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.