diff --git a/corsika/modules/epos/Random.hpp b/corsika/modules/epos/Random.hpp index c3fec35ab64265175b1de024fdfa8320771cab94..4f0099ac3a9e033d9573a9aade1dac3fb9ea4a9b 100644 --- a/corsika/modules/epos/Random.hpp +++ b/corsika/modules/epos/Random.hpp @@ -28,4 +28,11 @@ namespace epos { return dist(rng); } + double double_rndm_interface() { + static corsika::default_prng_type& rng = + corsika::RNGManager::getInstance().getRandomStream("epos"); + std::uniform_real_distribution<double> dist; + return dist(rng); + } + } // namespace epos diff --git a/modules/epos/epos.cpp b/modules/epos/epos.cpp index 1836776c70770a18e10419e2b03123a9e47da685..bbfe7e20f9805d97c9ad78e39f16823e0f9277b6 100644 --- a/modules/epos/epos.cpp +++ b/modules/epos/epos.cpp @@ -9,7 +9,8 @@ namespace epos { // this is needed as linker object, but it is not needed to do anything void ranfcv_(double&) {} - float rangen_() { return ::epos::rndm_interface(); } + float rangen_() { return ::epos::rndm_interface(); } + double drangen_() { return ::epos::double_rndm_interface(); } datadir::datadir(const std::string& dir) { if (dir.length() > 500) { diff --git a/modules/epos/epos.hpp b/modules/epos/epos.hpp index be5aa8269f6bc2edb8de18dd9687082303cdef9c..a454c4a6e954f5f9a2732dd0bd35402c2eba9e41 100644 --- a/modules/epos/epos.hpp +++ b/modules/epos/epos.hpp @@ -27,6 +27,16 @@ namespace epos { **/ extern float rndm_interface(); + /** + * \function epos::double_rndm_interface + * + * this is the random number hook to external packages. + * + * CORSIKA8, for example, has to provide an implementation of this. + **/ + + extern double double_rndm_interface(); + extern "C" { void aaset_(int&); @@ -76,6 +86,7 @@ namespace epos { void ranfcv_(double&); // void ranfgt(int&); float rangen_(); + double drangen_(); // common blocks as // defined in epos.inc