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

#include "Global.h"
5
#include <limits>
Praetorius, Simon's avatar
Praetorius, Simon committed
6

7
using namespace std;
8
9
namespace AMDiS {
  //converts signed distance to phasefield
10
11
  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)); }
12
13
14
15
  
  //levelset: positive (1) in the set, negative (-1) outside, zero on the boundary
  inline double LevelSet(double r)
  {
16
    if (r < 0)
17
      return 1;
18
    if (r > 0)
19
20
21
22
      return -1;
    return 0;
  }

23
  inline double Phi1ToR(double p1, double eps) {
24
25
26
    double x = max(-1.0 + numeric_limits< double >::epsilon(), 
		    min(1.0 - numeric_limits< double >::epsilon(), p1));
    return eps / 3.0 * log((1 + x) / (1 - x)) * 0.5;
27
  }
28

29
  inline double Phi2ToR(double p2, double eps) {
30
31
32
    double x = max(-1.0 + numeric_limits< double >::epsilon(), 
		    min(1.0 - numeric_limits< double >::epsilon(), 1 + 2 * p2));
    return eps / 3.0 * log( (1 + x) / (1 - x) );
33
  }
34

35
36
}
#endif