Commit 486cdef4 authored by Cianciosa, Mark's avatar Cianciosa, Mark
Browse files

Add commandline option to fix the seed.

parent 10482fe1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ project (rays CXX)
#  Build Options
#-------------------------------------------------------------------------------
option (USE_PCH "Enable the use of precompiled headers" ON)
option (USE_STATIC "Limits the dyamics for testing." OFF)
option (SAVE_KERNEL_SOURCE "Writes the kernel source code to a file." OFF)

#-------------------------------------------------------------------------------
+62 −47
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ void set_xy_variables(const commandline::parser &cl,
///  @params[in]     eq        Equilibrium object.
///  @params[in]     num_steps Equilibrium object.
///  @params[in]     sub_steps Equilibrium object.
///  @params[in,out] engine    Random engine.
///  @params[in]     filename  Result filename, empty names will be blank.
///  @params[in]     num_rays  Number of rays to write.
///  @params[in]     index     Concurrent index.
@@ -178,6 +179,7 @@ void run_solver(const commandline::parser &cl,
                                    SOLVER_METHOD::safe_math> &eq,
                const size_t num_steps,
                const size_t sub_steps,
                std::mt19937_64 &engine,
                const std::string &filename="",
                const size_t num_rays=0,
                const size_t index=0) {
@@ -224,11 +226,6 @@ void run_solver(const commandline::parser &cl,
        std::cout << std::endl;
    }

#ifndef STATIC
    std::mt19937_64 engine((index + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())));
#else
    std::mt19937_64 engine(index + 1);
#endif
    std::uniform_int_distribution<size_t> int_dist(0, num_rays - 1);
    
    const size_t sample = int_dist(engine);
@@ -273,6 +270,7 @@ void run_solver(const commandline::parser &cl,
///  @params[in]     eq        Equilibrium object.
///  @params[in]     num_steps Equilibrium object.
///  @params[in]     sub_steps Equilibrium object.
///  @params[in,out] engine    Random engine.
///  @params[in]     filename  Result filename, empty names will be blank.
///  @params[in]     num_rays  Number of rays to write.
///  @params[in]     index     Concurrent index.
@@ -300,6 +298,7 @@ void run_dispersion(const commandline::parser &cl,
                                        DISPERSION_FUNCTION::safe_math> &eq,
                    const size_t num_steps,
                    const size_t sub_steps,
                    std::mt19937_64 &engine,
                    const std::string &filename="",
                    const size_t num_rays=0,
                    const size_t index=0) {
@@ -312,6 +311,7 @@ void run_dispersion(const commandline::parser &cl,
                                                                   t, dt_const, eq,
                                                                   num_steps,
                                                                   sub_steps,
                                                                   engine,
                                                                   filename,
                                                                   num_rays,
                                                                   index);
@@ -323,6 +323,7 @@ void run_dispersion(const commandline::parser &cl,
                                                      t, dt_const, eq,
                                                      num_steps,
                                                      sub_steps,
                                                      engine,
                                                      filename,
                                                      num_rays,
                                                      index);
@@ -334,6 +335,7 @@ void run_dispersion(const commandline::parser &cl,
                                                      t, dt_const, eq,
                                                      num_steps,
                                                      sub_steps,
                                                      engine,
                                                      filename,
                                                      num_rays,
                                                      index);
@@ -347,6 +349,7 @@ void run_dispersion(const commandline::parser &cl,
                                                               t, dt_var, eq,
                                                               num_steps,
                                                               sub_steps,
                                                               engine,
                                                               filename,
                                                               num_rays,
                                                               index);
@@ -373,6 +376,21 @@ equilibrium::shared<T, SAFE_MATH> make_equilibrium(const commandline::parser &cl
    }
}

//------------------------------------------------------------------------------
///  @brief Generate the engine.
///
///  @params[in] cl    Parsed commandline.
///  @params[in] index Thread index.
//------------------------------------------------------------------------------
std::mt19937_64 make_engine(const commandline::parser &cl,
                            const size_t index) {
    if (cl.is_option_set("seed")) {
        return std::mt19937_64(index);
    }

    return std::mt19937_64((index + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())));
}

//------------------------------------------------------------------------------
///  @brief Trace the rays.
///
@@ -406,12 +424,7 @@ void trace_ray(const commandline::parser &cl,
            const size_t local_num_rays = batch
                                        + (extra > thread_number ? 1 : 0);

#ifndef STATIC
            std::mt19937_64 engine((thread_number + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())));
#else
            std::mt19937_64 engine(thread_number + 1);
#endif
            std::uniform_int_distribution<size_t> int_dist(0, local_num_rays - 1);
            std::mt19937_64 engine = make_engine(cl, thread_number);

            auto omega = graph::variable<T, SAFE_MATH> (local_num_rays, "\\omega");
            auto kx    = graph::variable<T, SAFE_MATH> (local_num_rays, "k_{x}");
@@ -449,6 +462,7 @@ void trace_ray(const commandline::parser &cl,
                                                                  t, dt, eq,
                                                                  num_steps,
                                                                  sub_steps,
                                                                  engine,
                                                                  stream.str(),
                                                                  local_num_rays,
                                                                  thread_number);
@@ -459,6 +473,7 @@ void trace_ray(const commandline::parser &cl,
                                                                      t, dt, eq,
                                                                      num_steps,
                                                                      sub_steps,
                                                                      engine,
                                                                      stream.str(),
                                                                      local_num_rays,
                                                                      thread_number);
@@ -469,6 +484,7 @@ void trace_ray(const commandline::parser &cl,
                                                                         t, dt, eq,
                                                                         num_steps,
                                                                         sub_steps,
                                                                         engine,
                                                                         stream.str(),
                                                                         local_num_rays,
                                                                         thread_number);
@@ -479,6 +495,7 @@ void trace_ray(const commandline::parser &cl,
                                                                               t, dt, eq,
                                                                               num_steps,
                                                                               sub_steps,
                                                                               engine,
                                                                               stream.str(),
                                                                               local_num_rays,
                                                                               thread_number);
@@ -489,6 +506,7 @@ void trace_ray(const commandline::parser &cl,
                                                                       t, dt, eq,
                                                                       num_steps,
                                                                       sub_steps,
                                                                       engine,
                                                                       stream.str(),
                                                                       local_num_rays,
                                                                       thread_number);
@@ -845,6 +863,7 @@ commandline::parser parse_commandline(int argc, const char * argv[]) {
        "root_find",
        "weak_damping"
    });
    cl.add_option("seed",              false, "Fix the random seed.");

    cl.parse(argc, argv);

@@ -868,11 +887,7 @@ int main(int argc, const char * argv[]) {

    const size_t num_times = cl.get_option_value<size_t> ("num_times");
    const size_t sub_steps = cl.get_option_value<size_t> ("sub_steps");
#ifndef STATIC
    const size_t num_rays = cl.get_option_value<size_t> ("num_rays");
#else
    const size_t num_rays = 1;
#endif

    const bool use_safe_math = true;

+0 −1
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ target_compile_definitions (rays
                            EFIT_FILE="${CMAKE_CURRENT_SOURCE_DIR}/../graph_tests/efit.nc"
                            VMEC_FILE="${CMAKE_CURRENT_SOURCE_DIR}/../graph_tests/vmec.nc"
                            $<$<BOOL:${USE_CUDA}>:HEADER_DIR="$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>">
                            $<$<BOOL:${USE_STATIC}>:STATIC>
                            $<$<BOOL:${SAVE_KERNEL_SOURCE}>:SAVE_KERNEL_SOURCE>
)