Virtual Testbed
Ship dynamics simulator for extreme conditions
velocity_potential.cc
1 #include <vtestbed/config/opencl.hh>
2 #include <vtestbed/config/real_type.hh>
3 #include <vtestbed/core/derivative.hh>
4 #include <vtestbed/core/math.hh>
5 #include <vtestbed/core/velocity_potential.hh>
6 #include <vtestbed/core/wave_numbers.hh>
7 
8 using vtb::core::Policy;
9 
10 template <class T>
11 void
13  const Grid<T,4>& grid_tzxy,
14  const Array3<T>& zeta,
15  Array3<C>& result
16 ) {
17  if (this->assumptions().small_amplitude()) {
18  result = -derivative<T,3>(zeta, grid_tzxy.delta(0), 0);
19  } else {
20  using blitz::Range;
21  using blitz::sqrt;
22  using blitz::pow;
23  Array3<T> zeta_t(derivative<T,3>(zeta, grid_tzxy.delta(0), 0));
24  Array3<T> zeta_x(derivative<T,3>(zeta, grid_tzxy.delta(2), 1));
25  Array3<T> zeta_y(derivative<T,3>(zeta, grid_tzxy.delta(3), 2));
26  Array3<T> sqrt_zeta(sqrt(T{1} + pow2(zeta_x) + pow2(zeta_y)));
27  const C i(0,1);
28  result = zeta_t /
29  (i*((zeta_x + zeta_y)/sqrt_zeta - zeta_x - zeta_y) -
30  T{1}/sqrt_zeta);
31  }
32 }
33 
34 
35 template class
37 
38 template class
const T delta(int i) const
The size of the patch (interval) for dimension i.
Definition: core/grid.hh:239
Base class for all velocity potential solvers.
Base class for linear velocity potential solver.
void second_function(const Grid< T, 4 > &grid_tzxy, const Array3< T > &wavy_surface, Array3< C > &result)
Computes second function.