Core components.
template <class T, int N> using Wave_statistics_vector = blitz::TinyVector< Wave_statistics< T >, N >using bstream = ::vtb::base::bstreamusing int1 = Vector< int, 1 >using int2 = Vector< int, 2 >using int3 = Vector< int, 3 >using int4 = Vector< int, 4 >using mask_array = std::vector< bool >using rect2 = blitz::RectDomain< 2 >using rect3 = blitz::RectDomain< 3 >using rect4 = blitz::RectDomain< 4 >enum Centre_of_rotationenum Policyenum Solver_typeclass vtb::core::Assumptionsconstexpr const Policy default_policytemplate <class T, int N> autoregression_white_noise_variance(const blitz::Array< T, N > & acf, const blitz::Array< T, N > & phi) -> Ttemplate <class T, int N, class F> bisection(blitz::TinyVector< T, N > a, blitz::TinyVector< T, N > b, F func, const blitz::TinyVector< T, N > & arg_eps, const blitz::TinyVector< T, N > & func_eps, int max_iter) -> blitz::TinyVector< T, N >template <class T> chop_right(const blitz::Array< T, 4 > & rhs, T eps) -> blitz::TinyVector< int, 4 >template <class T> chop_right(const blitz::Array< T, 3 > & rhs, T eps) -> blitz::TinyVector< int, 3 >template <class T> clamp(const Grid< T, 3 > & grid_xyz, const std::vector< Ship_hull_panel< T, 3 >> & panels, Vector< int, 3 > min_shape, Vector< bool, 3 > power_of_two = Vector< bool, 3 >(false)) -> Grid< T, 3 >template <class T> clamp_domain(const Grid< T, 3 > & grid_xyz, const std::vector< Ship_hull_panel< T, 3 >> & panels, Vector< int, 3 > min_shape, Vector< bool, 3 > power_of_two = Vector< bool, 3 >(false)) -> blitz::RectDomain< 3 >template <class T, int N> correlation(blitz::Array< T, N > lhs, blitz::Array< T, N > rhs) -> blitz::Array< T, N >template <class T, int N> correlation(blitz::Array< T, N > lhs, blitz::Array< T, N > rhs, Chirp_Z_transform< std::complex< T >, N > & fft) -> blitz::Array< T, N >template <class T, int N, class Wave> courant_number(const Wave & wave, const Grid< T, N > & grid) -> Ttemplate <class T, int N, class Wave> courant_number_sum(const Wave & wave, const Grid< T, N > & grid) -> Ttemplate <class T, int N> covariance(blitz::Array< T, N > lhs, blitz::Array< T, N > rhs) -> blitz::Array< T, N >template <class T, int N> covariance(blitz::Array< T, N > lhs, blitz::Array< T, N > rhs, Chirp_Z_transform< std::complex< T >, N > & fft) -> blitz::Array< T, N >template <class T, int N> derivative(const blitz::TinyVector< int, N > & idx, int dimension, const T delta, const Array< T, N > & func) -> Ttemplate <class T, int N> derivative(const blitz::TinyVector< int, N > & idx, int idx_min, int idx_max, int dimension, const T delta, const Array< T, N > & func) -> Ttemplate <class T, int N> derivative(Array< T, N > func, const T delta, int dimension) -> Array< T, N >template <class T, int N> derivative(Array< T, N > func, const T delta, int dimension, Array< T, N > & result) -> voidtemplate <class T> find_extrema(blitz::Array< T, 1 > func, const Grid< T, 1 > & grid) -> std::vector< blitz::TinyVector< T, 2 > >template <class T> find_wave_halves(const std::vector< blitz::TinyVector< T, 2 >> & extrema) -> std::vector< Wave_half< T > >template <class T> find_wave_number_range(blitz::Array< T, 2 > surface, const Grid< T, 2 > & grid) -> Grid< T, 2 >template <class T> find_wave_number_range(const std::vector< Wave_half< T >> & halves) -> Grid< T, 1 >template <class T> find_wave_number_range(const std::vector< Wave_half< T >> & halves, T & min_wave_number, T & max_wave_number) -> voidtemplate <class T, int N> fourier_transform(blitz::Array< T, N > & x, int sign, Wave_table< T > waves) -> voidtemplate <class T, int N, class Wave> generate_wave(const Grid< T, N > & grid, Wave wave) -> Array< T, N >template <class T, int N, class Wave> generate_wave(const Grid< T, N > & grid, Array< T, N > & result, Wave wave) -> voidtemplate <class T, int N, class Wave> generate_wave(T t, const Grid< T, N > & grid, Wave wave) -> Array< T, N >template <class T, int N, class Wave> generate_wave(T t, const Grid< T, N > & grid, Array< T, N > & result, Wave wave) -> voidwave and spatio-temporal grid. 
        template <class T> gradient(const blitz::TinyVector< int, 4 > & idx, const blitz::TinyVector< T, 4 > & delta, const Array< T, 4 > & func) -> blitz::TinyVector< T, 4 >template <class T> gradient(const blitz::TinyVector< int, 3 > & idx, const blitz::TinyVector< T, 3 > & delta, const Array< T, 3 > & func) -> blitz::TinyVector< T, 3 >template <class T, int N> gradient(const blitz::TinyVector< int, N > & idx, const blitz::TinyVector< T, N > & delta, const Array< T, N > & func) -> blitz::TinyVector< T, N >template <class T> intersect(const vtb::geometry::Triangle< T, 3 > & panel, const Vector< T, 3 > & water_level, std::vector< vtb::geometry::Triangle< T, 3 >> * wet_panels, std::vector< vtb::geometry::Triangle< T, 3 >> * dry_panels, std::vector< vtb::geometry::Line_segment< T, 3 >> * waterline) -> voidtemplate <class T, int N> make_gerstner_solver(Policy policy) -> std::unique_ptr< Gerstner_solver< T, N > >template <class T, int N, Policy P> make_gerstner_solver() -> std::unique_ptr< Gerstner_solver< T, N > >template <class T> make_plane_wave_generator(std::any wave, Policy policy) -> std::unique_ptr< Wavy_surface_generator< T > >template <class T, class Wave, Policy P> make_plane_wave_generator() -> std::unique_ptr< Plane_wave_generator< T, Wave, P > >template <class T, class Wave, Policy P> make_plane_wave_generator(const Wave & wave) -> std::unique_ptr< Plane_wave_generator< T, Wave, P > >template <class T> make_plane_wave_generator_opencl(std::any wave) -> std::unique_ptr< Wavy_surface_generator< T > >template <class T> make_plane_wave_generator_openmp(std::any wave) -> std::unique_ptr< Wavy_surface_generator< T > >template <class T, int N, Policy P> make_velocity_potential_solver() -> std::unique_ptr< Velocity_potential_solver< T, N > >template <class T, Policy P> make_wave_pressure_solver() -> std::unique_ptr< Wave_pressure_solver< T > >template <class T, int N, Policy P> make_wetted_surface_solver() -> std::unique_ptr< Wetted_surface_solver< T, N > >template <class T, int N> moving_average_white_noise_variance(const blitz::Array< T, N > & acf, const blitz::Array< T, N > & theta) -> Ttemplate <class T> operator<<(std::ostream & out, const Wave_statistics< T > & rhs) -> std::ostream &pow2(double x) -> doublepow2(float x) -> floattemplate <class T, int N> shallow_water_wave_angular_frequency(T length, Vector< T, N > normal, T depth) -> Ttemplate <class T, int N> shallow_water_wave_angular_frequency(const blitz::TinyVector< T, N > & k, T depth) -> Ttemplate <class T, int N> stokes_wave_angular_frequency(const Vector< T, N > & wave_vector, T amplitude) -> Tsupported_policies() -> std::vector< Policy >template <class T> temporal_wave_statistics(blitz::Array< T, 1 > surface, const Grid< T, 1 > & grid) -> Wave_statistics< T >template <class T, int N> wave_number_grid(const Wave_statistics_vector< T, N > & waves) -> Grid< T, N >template <class T> wave_statistics(blitz::Array< T, 2 > surface, const Grid< T, 2 > & grid) -> Wave_statistics_vector< T, 2 >