WaveBEM: Unsteady Nonlinear Potential Flow Solver for Ship-Wave Interaction.
laplace_kernel.h
Go to the documentation of this file.
1 #ifndef lalpace_kernel_h
2 #define lalpace_kernel_h
3 #include <deal.II/base/point.h>
4 
5 #include <cmath>
6 
7 namespace LaplaceKernel
8 {
9  template <int dim>
10  double single_layer(const Point<dim> &R)
11  {
12  switch (dim)
13  {
14  case 2:
15  return (-std::log(R.norm()) / (2*numbers::PI) );
16 
17  case 3:
18  return (1./( R.norm()*4*numbers::PI ) );
19 
20  default:
21  Assert(false, ExcInternalError());
22  return 0.;
23  }
24  }
25 
26 
27 
28  template <int dim>
30  {
31  switch (dim)
32  {
33  case 2:
34  return R / ( -2*numbers::PI * R.square());
35  case 3:
36  return R / ( -4*numbers::PI * R.square() * R.norm() );
37 
38  default:
39  Assert(false, ExcInternalError());
40  return Point<dim>();
41  }
42  }
43 
44  template <int dim>
45  void kernels(const Point<dim> &R, Point<dim> &D, double &d)
46  {
47  double r = R.norm();
48  double r2 = r*r;
49  switch (dim)
50  {
51  case 2:
52  d = -std::log(r) / (2*numbers::PI);
53  D = R / ( -2*numbers::PI * r2);
54  break;
55  case 3:
56  d = (1./( r*4*numbers::PI ) );
57  D = R / ( -4*numbers::PI * r2*r );
58  break;
59  default:
60  Assert(false, ExcInternalError());
61  }
62  }
63 
64 }
65 #endif
Point< dim > double_layer(const Point< dim > &R)
void kernels(const Point< dim > &R, Point< dim > &D, double &d)
numbers::NumberTraits< Number >::real_type norm() const
static const double PI
#define Assert(cond, exc)
numbers::NumberTraits< double >::real_type square() const
double single_layer(const Point< dim > &R)
static::ExceptionBase & ExcInternalError()