From 36a1be2113a82db9b297d6272b4473a39998a78f Mon Sep 17 00:00:00 2001 From: Remy Prechelt <prechelt@hawaii.edu> Date: Mon, 16 Nov 2020 23:17:37 -1000 Subject: [PATCH] Port over inhomogenous medium. --- corsika/detail/media/InhomogeneousMedium.inl | 50 ++++++++++++++++++++ corsika/media/InhomogeneousMedium.hpp | 45 +++++++----------- 2 files changed, 67 insertions(+), 28 deletions(-) create mode 100644 corsika/detail/media/InhomogeneousMedium.inl diff --git a/corsika/detail/media/InhomogeneousMedium.inl b/corsika/detail/media/InhomogeneousMedium.inl new file mode 100644 index 000000000..ff64e9cd1 --- /dev/null +++ b/corsika/detail/media/InhomogeneousMedium.inl @@ -0,0 +1,50 @@ +/* + * (c) Copyright 2020 CORSIKA Project, corsika-project@lists.kit.edu + * + * This software is distributed under the terms of the GNU General Public + * Licence version 3 (GPL Version 3). See file LICENSE for a full version of + * the license. + */ + +#pragma once + +#include <corsika/framework/core/PhysicalUnits.hpp> +#include <corsika/framework/geometry/Line.hpp> +#include <corsika/framework/geometry/Point.hpp> +#include <corsika/framework/geometry/Trajectory.hpp> +#include <corsika/media/NuclearComposition.hpp> + +namespace corsika { + + template <typename T, typename TDensityFunction> + template <typename... TArgs> + InhomogeneousMedium<T, TDensityFunction>::InhomogeneousMedium( + NuclearComposition nuclComp, TArgs&&... rhoTArgs) + : nuclComp_(nuclComp) + , densityFunction_(rhoTArgs...){} + + template <typename T, typename TDensityFunction> + units::si::MassDensityType InhomogeneousMedium<T, TDensityFunction>::getMassDensity( + Point const& point) const { + return densityFunction_.evaluateAt(point); + } + + template <typename T, typename TDensityFunction> + NuclearComposition const& + InhomogeneousMedium<T, TDensityFunction>::getNuclearComposition() const { + return nuclComp_; + } + + template <typename T, typename TDensityFunction> + units::si::GrammageType InhomogeneousMedium<T, TDensityFunction>::integratedGrammage( + Trajectory<Line> const& line, units::si::LengthType to) const { + return densityFunction_.integrateGrammage(line, to); + } + + template <typename T, typename TDensityFunction> + units::si::LengthType InhomogeneousMedium<T, TDensityFunction>::arclengthFromGrammage( + Trajectory<Line> const& line, units::si::GrammageType grammage) const { + return densityFunction_.arclengthFromGrammage(line, grammage); + } + +} // namespace corsika diff --git a/corsika/media/InhomogeneousMedium.hpp b/corsika/media/InhomogeneousMedium.hpp index 5df9a04bb..5467e2db3 100644 --- a/corsika/media/InhomogeneousMedium.hpp +++ b/corsika/media/InhomogeneousMedium.hpp @@ -8,12 +8,10 @@ #pragma once -#include <corsika/framework/core/ParticleProperties.hpp> #include <corsika/framework/core/PhysicalUnits.hpp> #include <corsika/framework/geometry/Line.hpp> #include <corsika/framework/geometry/Point.hpp> #include <corsika/framework/geometry/Trajectory.hpp> -#include <corsika/framework/random/RNGManager.hpp> #include <corsika/media/NuclearComposition.hpp> /** @@ -23,35 +21,26 @@ namespace corsika { - template <class T, class TDensityFunction> + template <typename T, typename TDensityFunction> class InhomogeneousMedium : public T { - NuclearComposition const fNuclComp; - TDensityFunction const fDensityFunction; + NuclearComposition const nuclComp_; + TDensityFunction const densityFunction_; public: - /* - * FIXME: should have traits here for ...Args - */ - template <typename... Args> - InhomogeneousMedium(NuclearComposition pNuclComp, Args&&... rhoArgs) - : fNuclComp(pNuclComp) - , fDensityFunction(rhoArgs...) {} - - MassDensityType GetMassDensity(Point const& p) const override { - return fDensityFunction.EvaluateAt(p); - } - - NuclearComposition const& GetNuclearComposition() const override { return fNuclComp; } - - GrammageType IntegratedGrammage(Trajectory<Line> const& pLine, - LengthType pTo) const override { - return fDensityFunction.IntegrateGrammage(pLine, pTo); - } - - LengthType ArclengthFromGrammage(Trajectory<Line> const& pLine, - GrammageType pGrammage) const override { - return fDensityFunction.ArclengthFromGrammage(pLine, pGrammage); - } + template <typename... TArgs> + InhomogeneousMedium(NuclearComposition nuclComp, TArgs&&... rhoTArgs); + + units::si::MassDensityType getMassDensity(Point const& point) const override; + + NuclearComposition const& getNuclearComposition() const override; + + units::si::GrammageType integratedGrammage(Trajectory<Line> const& line, + units::si::LengthType to) const override; + + units::si::LengthType arclengthFromGrammage( + Trajectory<Line> const& pLine, units::si::GrammageType grammage) const override; }; } // namespace corsika + +#include <corsika/detail/media/InhomogeneousMedium.inl> -- GitLab