MathFunctions.h 835 Bytes
Newer Older
1
2
#ifndef AMDIS_MATHFUNCTIONS_H
#define AMDIS_MATHFUNCTIONS_H
Praetorius, Simon's avatar
Praetorius, Simon committed
3
4
5

#include "Global.h"

6
7
namespace AMDiS {
  //converts signed distance to phasefield
8
9
  inline double Phi1(double r, double eps) { return 0.5 * (1 - tanh(3 * r / eps)); }
  inline double Phi2(double r, double eps) { return 0.5 * (1 + tanh(3 * r / eps)); }
10
11
12
13
  
  //levelset: positive (1) in the set, negative (-1) outside, zero on the boundary
  inline double LevelSet(double r)
  {
14
    if (r < 0)
15
      return 1;
16
    if (r > 0)
17
18
19
20
21
      return -1;
    return 0;
  }

  //convert Phi1 to r
22
  inline double Phi1ToR(double p1, double eps) {
23
	return eps / 3.0 * atanh( max(-1 + 1.0e-14, min(1 - 1.0e-14, 1 - 2 * p1)) );
24
  }
25
  //convert Phi2 to r
26
  inline double Phi2ToR(double p2, double eps) {
27
	return eps / 3.0 * atanh( max(-1 + 1.0e-14, min(1 - 1.0e-14, 1 + 2 * p2)) );
28
  }
29
30
}
#endif