IAP GITLAB

Skip to content
Snippets Groups Projects
Commit 5da1d65d authored by Ralf M Ulrich's avatar Ralf M Ulrich Committed by ralfulrich
Browse files

iniurqmdc8

parent 5a11aa10
No related branches found
No related tags found
2 merge requests!234WIP: Initial example of python as script language from C++,!232Conex EM
Subproject commit b65a9961760359531f4ed8668e61d4e1350c7437
Subproject commit 7c276813de7b4f7635eb024b3806936a4bc9c770
......@@ -22,6 +22,26 @@
using namespace corsika;
using namespace corsika::process::qgsjetII;
using namespace corsika::units::si;
template <typename TStackView>
auto sumCharge(TStackView const& view) {
int totalCharge = 0;
for (auto const& p : view) { totalCharge += particles::GetChargeNumber(p.GetPID()); }
return totalCharge;
}
template <typename TStackView>
auto sumMomentum(TStackView const& view, geometry::CoordinateSystem const& vCS) {
geometry::Vector<hepenergy_d> sum{vCS, 0_eV, 0_eV, 0_eV};
for (auto const& p : view) { sum += p.GetMomentum(); }
return sum;
}
TEST_CASE("QgsjetII", "[processes]") {
......@@ -113,18 +133,27 @@ TEST_CASE("QgsjetIIInterface", "[processes]") {
auto particle =
stack.AddParticle(std::tuple<particles::Code, units::si::HEPEnergyType,
corsika::stack::MomentumVector, geometry::Point,
units::si::TimeType, unsigned int, unsigned int>{
particles::Code::Nucleus, E0, plab, pos, 0_ns, 16, 8});
// corsika::stack::MomentumVector, geometry::Point, units::si::TimeType>{
// particles::Code::PiPlus, E0, plab, pos, 0_ns});
units::si::TimeType>{
particles::Code::Proton, E0, plab, pos, 0_ns});
particle.SetNode(nodePtr);
corsika::stack::SecondaryView view(particle);
auto projectile = view.GetProjectile();
auto const projectileMomentum = projectile.GetMomentum();
Interaction model;
model.Init();
[[maybe_unused]] const process::EProcessReturn ret = model.DoInteraction(projectile);
[[maybe_unused]] const GrammageType length = model.GetInteractionLength(particle);
REQUIRE( length/(1_g / square(1_cm)) == Approx(93.47).margin(0.1) );
REQUIRE( view.GetSize() == 13 );
/*REQUIRE( sumCharge(view) ==
1 + particles::GetChargeNumber(particles::Code::Oxygen) );*/
auto const secMomSum =
sumMomentum(view, projectileMomentum.GetCoordinateSystem());
REQUIRE( (secMomSum - projectileMomentum).norm() / projectileMomentum.norm() ==
Approx(0).margin(1e-2));
}
}
......@@ -27,15 +27,13 @@
using namespace corsika::process::UrQMD;
using namespace corsika::units::si;
UrQMD::UrQMD() { iniurqmdc8_(); }
using SetupStack = corsika::setup::Stack;
using SetupParticle = corsika::setup::Stack::StackIterator;
using SetupProjectile = corsika::setup::StackView::StackIterator;
UrQMD::UrQMD(std::string const& xs_file) {
readXSFile(xs_file);
iniurqmd_();
iniurqmdc8_();
}
CrossSectionType UrQMD::GetTabulatedCrossSection(particles::Code projectileCode,
......
......@@ -77,74 +77,74 @@ namespace corsika::process::UrQMD {
using nmaxDoubleArray = nmaxArray<double>;
extern "C" {
// FORTRAN functions defined in UrQMD
void iniurqmdc8_();
double ranf_(int&);
void cascinit_(int const&, int const&, int const&);
double nucrad_(int const&);
void urqmd_(int&);
int pdgid_(int const&, int const&);
double sigtot_(int&, int&, double&);
int collclass_(int&, int&, int&, int&);
double crossx_(int const&, double const&, int const&, int const&, double const&,
int const&, int const&, double const&, double&);
int readsigmaln_(int const&, int const&, int const&);
// defined in coms.f
extern struct {
int npart, nbar, nmes, ctag, nsteps, uid_cnt, ranseed, event;
int Ap; // projectile mass number (in case of nucleus)
int At; // target mass number (in case of nucleus)
int Zp; // projectile charge number (in case of nucleus)
int Zt; // target charge number (in case of nucleus)
int eos, dectag, NHardRes, NSoftRes, NDecRes, NElColl, NBlColl;
} sys_;
extern struct {
double time, acttime, bdist, bimp, bmin;
double ebeam; // lab-frame energy of projectile
double ecm;
} rsys_;
// defined in coms.f
extern struct {
nmaxIntArray spin, ncoll, charge, ityp, lstcoll, iso3, origin, strid, uid;
} isys_;
// defined in coor.f
extern struct {
nmaxDoubleArray r0, rx, ry, rz, p0, px, py, pz, fmass, rww, dectime;
} coor_;
// defined in inputs.f
extern struct {
int nevents;
std::array<int, 2> spityp; // particle codes of: [0]: projectile, [1]: target
int prspflg; // projectile special flag
int trspflg; // target special flag, set to 1 unless target is nucleus > H
std::array<int, 2> spiso3; // particle codes of: [0]: projectile, [1]: target
int outsteps, bflag, srtflag, efuncflag, nsrt, npb, firstev;
} inputs_;
// defined in inputs.f
extern struct {
double srtmin, srtmax, pbeam, betann, betatar, betapro, pbmin, pbmax;
} input2_;
// defined in options.f
extern struct {
std::array<double, details::constants::numcto> CTOption;
std::array<double, details::constants::numctp> CTParam;
} options_;
extern struct {
int fixedseed, bf13, bf14, bf15, bf16, bf17, bf18, bf19, bf20;
} loptions_;
// defined in urqmdInterface.F
extern struct { std::array<double, 3> xs, bim; } cxs_u2_;
// FORTRAN functions defined in UrQMD
void iniurqmdc8_();
double ranf_(int&);
void cascinit_(int const&, int const&, int const&);
double nucrad_(int const&);
void urqmd_(int&);
int pdgid_(int const&, int const&);
double sigtot_(int&, int&, double&);
int collclass_(int&, int&, int&, int&);
double crossx_(int const&, double const&, int const&, int const&, double const&,
int const&, int const&, double const&, double&);
int readsigmaln_(int const&, int const&, int const&);
// defined in coms.f
extern struct {
int npart, nbar, nmes, ctag, nsteps, uid_cnt, ranseed, event;
int Ap; // projectile mass number (in case of nucleus)
int At; // target mass number (in case of nucleus)
int Zp; // projectile charge number (in case of nucleus)
int Zt; // target charge number (in case of nucleus)
int eos, dectag, NHardRes, NSoftRes, NDecRes, NElColl, NBlColl;
} sys_;
extern struct {
double time, acttime, bdist, bimp, bmin;
double ebeam; // lab-frame energy of projectile
double ecm;
} rsys_;
// defined in coms.f
extern struct {
nmaxIntArray spin, ncoll, charge, ityp, lstcoll, iso3, origin, strid, uid;
} isys_;
// defined in coor.f
extern struct {
nmaxDoubleArray r0, rx, ry, rz, p0, px, py, pz, fmass, rww, dectime;
} coor_;
// defined in inputs.f
extern struct {
int nevents;
std::array<int, 2> spityp; // particle codes of: [0]: projectile, [1]: target
int prspflg; // projectile special flag
int trspflg; // target special flag, set to 1 unless target is nucleus > H
std::array<int, 2> spiso3; // particle codes of: [0]: projectile, [1]: target
int outsteps, bflag, srtflag, efuncflag, nsrt, npb, firstev;
} inputs_;
// defined in inputs.f
extern struct {
double srtmin, srtmax, pbeam, betann, betatar, betapro, pbmin, pbmax;
} input2_;
// defined in options.f
extern struct {
std::array<double, details::constants::numcto> CTOption;
std::array<double, details::constants::numctp> CTParam;
} options_;
extern struct {
int fixedseed, bf13, bf14, bf15, bf16, bf17, bf18, bf19, bf20;
} loptions_;
// defined in urqmdInterface.F
extern struct { std::array<double, 3> xs, bim; } cxs_u2_;
}
/**
* convert CORSIKA code to UrQMD code tuple
*
......
......@@ -227,10 +227,13 @@ endif (NOT (${USE_CONEX_C8} IN_LIST ThirdPartyChoiceValues))
message (STATUS "USE_CONEX_C8='${USE_CONEX_C8}'")
add_library (C8::ext::conex STATIC IMPORTED GLOBAL)
# this is from the corsika-data/readLib submodule:
get_directory_property (Boost_iostreams_FOUND DIRECTORY ${CORSIKA_DATA}/readLib DEFINITION Boost_iostreams_FOUND)
set (conex_boost "")
set (boost_lib "boost_iostreams")
if (NOT Boost_iostreams_FOUND)
set (conex_boost "NO_BOOST=1")
set (boost_lib "")
endif (NOT Boost_iostreams_FOUND)
if ("x_${USE_CONEX_C8}" STREQUAL "x_SYSTEM")
......@@ -238,9 +241,12 @@ if ("x_${USE_CONEX_C8}" STREQUAL "x_SYSTEM")
message (STATUS "Using system-level CONEX version at ${CONEX_INCLUDE_DIR}")
set_target_properties (
C8::ext::conex PROPERTIES
IMPORTED_LOCATION ${CONEX_LIBRARY}
IMPORTED_LINK_INTERFACE_LIBRARIES dl
INTERFACE_INCLUDE_DIRECTORIES ${CONEX_INCLUDE_DIR}
IMPORTED_LOCATION ${CONEX_PREFIX}/lib/${CMAKE_SYSTEM_NAME}/libCONEXsibyll.a
IMPORTED_NO_SONAME 1
SKIP_BUILD_RPATH FALSE
IMPORTED_LINK_INTERFACE_LIBRARIES ${boost_lib}
INTERFACE_INCLUDE_DIRECTORIES
$<BUILD_INTERFACE:${CONEX_INCLUDE_DIR}>
)
set (CONEX_FOUND 1 PARENT_SCOPE)
......@@ -283,6 +289,7 @@ else ()
IMPORTED_LOCATION ${CONEX_PREFIX}/lib/${CMAKE_SYSTEM_NAME}/libCONEXsibyll.a
IMPORTED_NO_SONAME 1
SKIP_BUILD_RPATH FALSE
IMPORTED_LINK_INTERFACE_LIBRARIES ${boost_lib}
INTERFACE_INCLUDE_DIRECTORIES
$<BUILD_INTERFACE:${CONEX_INCLUDE_DIR}>
)
......
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