#ifndef AMDIS_MATHFUNCTIONS_H #define AMDIS_MATHFUNCTIONS_H #include "Global.h" namespace AMDiS { //converts signed distance to phasefield 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)); } //levelset: positive (1) in the set, negative (-1) outside, zero on the boundary inline double LevelSet(double r) { if(r<0) return 1; if(r>0) return -1; return 0; } //convert Phi1 to r inline double Phi1ToR(double p1, double eps) { return eps/3.0 * atanh( max(-1+1.e-14, min(1-1.e-14, 1-2*p1)) ); } //convert Phi2 to r inline double Phi2ToR(double p2, double eps) { return eps/3.0 * atanh( max(-1+1.e-14, min(1-1.e-14, 1+2*p2)) ); } } #endif