00001 #include "Geomag.h"
00002
00003 #include "Geomag.inc"
00004
00005 double Geomag::L(double lat, double lon) {
00006 return Geomag::geoInterp(lat, lon, Lvals);
00007 }
00008
00009 double Geomag::B(double lat, double lon) {
00010 return Geomag::geoInterp(lat, lon, Bvals);
00011 }
00012
00013 double Geomag::geolat(double lat, double lon) {
00014 return Geomag::geoInterp(lat, lon, glats);
00015 }
00016
00017 double Geomag::geolon(double lat, double lon) {
00018 return Geomag::geoInterp(lat, lon, glons);
00019 }
00020
00021 double Geomag::L(std::pair<double,double>coords) {
00022 return Geomag::L(coords.first, coords.second);
00023 }
00024
00025 double Geomag::B(std::pair<double,double>coords) {
00026 return Geomag::B(coords.first, coords.second);
00027 }
00028
00029 double Geomag::geolat(std::pair<double,double>coords) {
00030 return Geomag::geolat(coords.first, coords.second);
00031 }
00032
00033 double Geomag::geolon(std::pair<double,double>coords) {
00034 return Geomag::geolon(coords.first, coords.second);
00035 }
00036
00037 double Geomag::geoInterp(double lat, double lon, const double * array) {
00038 int ilat = static_cast<int>(lat/5.+6);
00039 int ilon = static_cast<int>(lon/5.);
00040 double a = fmod(lat+30., 5.)/5.;
00041 double b = fmod(lon, 5.)/5.;
00042 return array[ilat + 13*ilon ] * (1.-a) * (1.-b) +
00043 array[ilat + 13*(ilon+1)] * (1.-a) * b +
00044 array[ilat+1 + 13*ilon ] * a * (1.-b) +
00045 array[ilat+1 + 13*(ilon+1)] * a * b ;
00046 }