From b0e99bbcaac7b01d4e77d74be8bb71e8e4a38a06 Mon Sep 17 00:00:00 2001
From: Felix Riehn <felix@matilda>
Date: Thu, 13 May 2021 18:42:46 +0100
Subject: [PATCH] double random

---
 corsika/modules/epos/Random.hpp |  7 +++++++
 modules/epos/epos.cpp           |  3 ++-
 modules/epos/epos.hpp           | 11 +++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/corsika/modules/epos/Random.hpp b/corsika/modules/epos/Random.hpp
index c3fec35ab..4f0099ac3 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 1836776c7..bbfe7e20f 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 be5aa8269..a454c4a6e 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
 
-- 
GitLab