IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 907d4f95 authored by André Schmidt's avatar André Schmidt Committed by ralfulrich
Browse files

undo removal

parent 26151c4b
No related branches found
No related tags found
1 merge request!404adding Geomagnetic Models
...@@ -123,14 +123,22 @@ namespace corsika { ...@@ -123,14 +123,22 @@ namespace corsika {
if (longitude < -180 || longitude > 180) { if (longitude < -180 || longitude > 180) {
CORSIKA_LOG_WARN("Longitude should be between -180 and 180 degree."); CORSIKA_LOG_WARN("Longitude should be between -180 and 180 degree.");
} }
double epoch = double(iEpoch->first);
const double lat_geo = latitude * constants::pi / 180; double const epoch = double(iEpoch->first);
const double lon = longitude * constants::pi / 180; auto iNextEpoch = iEpoch; // next epoch for interpolation
--iNextEpoch;
bool const lastEpoch = (iEpoch == parameters_.rbegin());
auto const delta_t = year - epoch;
CORSIKA_LOG_DEBUG(
"identified: t_epoch={}, delta_t={}, lastEpoch={} (false->interpolate)", epoch,
delta_t, lastEpoch);
double const lat_geo = latitude * constants::pi / 180;
double const lon = longitude * constants::pi / 180;
// Transform into spherical coordinates // Transform into spherical coordinates
const double f = 1 / 298.257223563; double constexpr f = 1 / 298.257223563;
const double e_squared = f * (2 - f); double constexpr e_squared = f * (2 - f);
LengthType R_c = LengthType R_c =
constants::EarthRadius::Equatorial / sqrt(1 - e_squared * pow(sin(lat_geo), 2)); constants::EarthRadius::Equatorial / sqrt(1 - e_squared * pow(sin(lat_geo), 2));
LengthType p = (R_c + altitude) * cos(lat_geo); LengthType p = (R_c + altitude) * cos(lat_geo);
...@@ -146,21 +154,24 @@ namespace corsika { ...@@ -146,21 +154,24 @@ namespace corsika {
ParameterLine p = iEpoch->second[j]; ParameterLine p = iEpoch->second[j];
// Time interpolation // Time interpolation
if (iEpoch == parameters_.rbegin() || p.dg != 0 || p.dh != 0) { if (iEpoch == parameters_.rbegin()) {
// this is the latest epoch in time, or time-dependence (dg/dh) was specified // this is the latest epoch in time, or time-dependence (dg/dh) was specified
// we use the extrapolation factors dg/dh: // we use the extrapolation factors dg/dh:
p.g = p.g + (year - epoch) * p.dg; p.g = p.g + delta_t * p.dg;
p.h = p.h + (year - epoch) * p.dh; p.h = p.h + delta_t * p.dh;
} else { } else {
// we linearly interpolate between two epochs // we linearly interpolate between two epochs
auto const nextEpoch = --iEpoch; // next epoch ParameterLine const next_p = iNextEpoch->second[j];
ParameterLine const next_p = nextEpoch->second[j]; double const length = iNextEpoch->first - epoch;
const double length = nextEpoch->first - epoch; double p_g = p.g + (next_p.g - p.g) * delta_t / length;
CORSIKA_LOG_WARN("Length {}.", length); double p_h = p.h + (next_p.h - p.h) * delta_t / length;
CORSIKA_LOG_WARN("year {}. Epoch {}", year, epoch); CORSIKA_LOG_TRACE(
CORSIKA_LOG_WARN("g {}. h {}", next_p.g, next_p.h); "interpolation: delta-g={}, delta-h={}, delta-t={}, length={} g1={} g2={} "
p.g = p.g + (next_p.g - p.g) * (year - epoch) / length; "g={} h={} ",
p.h = p.h + (next_p.h - p.h) * (year - epoch) / length; next_p.g - p.g, next_p.h - p.h, year - epoch, length, next_p.g, p.g, p_g,
p_h);
p.g = p_g;
p.h = p_h;
} }
legendre = pow(-1, p.m) * std::assoc_legendre(p.n, p.m, sin(lat_sph)); legendre = pow(-1, p.m) * std::assoc_legendre(p.n, p.m, sin(lat_sph));
......
...@@ -105,6 +105,7 @@ TEST_CASE("UniformMagneticField w/ Homogeneous Medium") { ...@@ -105,6 +105,7 @@ TEST_CASE("UniformMagneticField w/ Homogeneous Medium") {
CHECK(WMM_B_4.getY(gCS) / 1_nT == Approx(186).margin(0.5)); CHECK(WMM_B_4.getY(gCS) / 1_nT == Approx(186).margin(0.5));
CHECK(WMM_B_4.getZ(gCS) / 1_nT == Approx(-52429).margin(0.5)); CHECK(WMM_B_4.getZ(gCS) / 1_nT == Approx(-52429).margin(0.5));
} }
{ {
GeomagneticModel igrf(gOrigin, corsika_data("GeoMag/IGRF13.COF")); GeomagneticModel igrf(gOrigin, corsika_data("GeoMag/IGRF13.COF"));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment