1 #include <vtestbed/config/real_type.hh>     2 #include <vtestbed/core/calm_sea_generator.hh>     3 #include <vtestbed/core/cosine_wave.hh>     4 #include <vtestbed/core/plain_wave_generator.hh>     5 #include <vtestbed/core/stokes_wave.hh>     6 #include <vtestbed/guile/macros.hh>     7 #include <vtestbed/guile/traits.hh>    17     SCM kw_policy, kw_wave;
    18     SCM sym_opencl, sym_openmp;
    26         template <> SCM traits_type::type() { return ::type; }
    36             using vtb::core::make_calm_sea_generator;
    37             using T = VTB_REAL_TYPE;
    38             return traits_type::make(make_calm_sea_generator<T,3>());
    50             using vtb::core::make_plain_wave_generator;
    51             using T = VTB_REAL_TYPE;
    52             SCM s_policy = sym_opencl, wave = SCM_UNDEFINED;
    53             scm_c_bind_keyword_arguments(
"make-plain-wave-generator", rest,
    54                                          scm_t_keyword_arguments_flags{},
    55                                          kw_policy, &s_policy, kw_wave, &wave,
    57             Policy policy = Policy::OpenCL;
    58             if (symbol_equal(s_policy, sym_opencl)) { policy = Policy::OpenCL; }
    59             else if (symbol_equal(s_policy, sym_openmp)) { policy = Policy::OpenMP; }
    60             else { throw_error(
"bad policy"); 
return SCM_UNSPECIFIED; }
    61             SCM wave_class = scm_class_of(wave);
    63                 auto* wrapper = get_wrapper<propagating_cosine>(wave);
    64                 auto generator = make_plain_wave_generator<T,3>(*wrapper->get(), policy);
    65                 return traits_type::make(std::move(generator));
    68                 auto* wrapper = get_wrapper<standing_cosine>(wave);
    69                 auto generator = make_plain_wave_generator<T,3>(*wrapper->get(), policy);
    70                 return traits_type::make(std::move(generator));
    73                 auto* wrapper = get_wrapper<propagating_stokes>(wave);
    74                 auto generator = make_plain_wave_generator<T,3>(*wrapper->get(), policy);
    75                 return traits_type::make(std::move(generator));
    77             throw_error(
"bad wave");
    78             return SCM_UNSPECIFIED;
    82         traits_type::define() {
    83             ::type = define_type<object_type>(
"<wave-generator>");
    84             kw_policy = scm_from_utf8_keyword(
"policy");
    85             kw_wave = scm_from_utf8_keyword(
"wave");
    86             sym_opencl = scm_from_utf8_symbol(
"opencl");
    87             sym_openmp = scm_from_utf8_symbol(
"openmp");
    88             define_procedure(
"make-calm-sea-generator", 0, 0, 0,
    90             define_procedure(
"make-plain-wave-generator", 0, 0, 1,
 Propagating plain wave which has cosine shape.
 
Propagating third-order Stokes wave.
 
SCM make_plain_wave_generator(SCM rest)
Construct plain wave wavy surface generator.
 
Standing plain wave which has cosine shape.
 
SCM make_calm_sea_generator()
Construct calm sea wavy surface generator.