Liebe Gitlab-Nutzer, lieber Gitlab-Nutzer, es ist nun möglich sich mittels des ZIH-Logins/LDAP an unserem Dienst anzumelden. Ein Anmelden über dieses erzeugt ein neues Konto. Das alte Konto ist über den Reiter "Standard" erreichbar. Die Administratoren

Dear Gitlab user, it is now possible to log in to our service using the ZIH login/LDAP. Logging in via this will create a new account. The old account can be accessed via the "Standard" tab. The administrators

Commit cf83fce1 by Praetorius, Simon

### converting routines for phasefields and signed distance functions

parent 49bb4f10
 ... ... @@ -5,6 +5,10 @@ using namespace AMDiS; /// \brief /// Converts an AbstractFunction dist, that describes a signed distance function, to /// a phasefield function p, by \f$\frac{1}{2}(1 - tanh(s \cdot dist(x) / \epsilon))\f$ /// struct SignedDistFctToPhaseField : AbstractFunction > { SignedDistFctToPhaseField(double epsilon_, ... ... @@ -27,6 +31,67 @@ private: double scalingFactor; }; /// \brief /// Converts a DOFVector, that describes a signed distance function, to /// a phasefield function p, by \f$\frac{1}{2}(1 - tanh(s \cdot dist / \epsilon))\f$. /// You have to use transformDOF to apply this function to the DOFVector dist. /// struct SignedDistToPhaseField : AbstractFunction { SignedDistToPhaseField(double epsilon_ = -1.0, double scalingFactor_ = 1.0/sqrt(2.0)) : AbstractFunction(6), epsilon(epsilon_), scalingFactor(scalingFactor_) { if (epsilon < 0.0) Parameters::get("mesh->refinement->epsilon", epsilon); } double operator()(const double &dist) const { return 0.5 * (1.0 - tanh(scalingFactor * dist / epsilon)); } private: double epsilon; double scalingFactor; }; /// \brief /// Converts a DOFVector, that describes a signed distance function, to /// a phasefield function p with values in [-1,1], by \f$- tanh(s \cdot dist / \epsilon)\f$. /// You have to use transformDOF to apply this function to the DOFVector dist. /// struct SignedDistToCh : AbstractFunction { SignedDistToCh(double epsilon_ = -1.0, double scalingFactor_ = 1.0/sqrt(2.0)) : AbstractFunction(6), epsilon(epsilon_), scalingFactor(scalingFactor_) { if (epsilon < 0.0) Parameters::get("mesh->refinement->epsilon", epsilon); } double operator()(const double &dist) const { return -tanh(scalingFactor * dist / epsilon); } private: double epsilon; double scalingFactor; }; /// \brief /// Converts a vector of AbstractFunctions {dist_i}, that describe signed distance functions, to /// a phasefield function p, by \f$\frac{1}{2}(1 - tanh(s \cdot \min_i(dist_i(x)) / \epsilon))\f$. /// The minimum of all distance function describes the union of the areas of negative values, of the /// distance functions. /// struct SignedDistFctListToPhaseField : AbstractFunction > { SignedDistFctListToPhaseField(double epsilon_, ... ... @@ -54,6 +119,10 @@ private: }; /// \brief /// Calculates the maximum of vector of distance function. This describes the intersections of the areas /// of negative values, of the distance functions. /// struct SignedDistList : AbstractFunction > { SignedDistList(std::vector >*> dist_) ... ... @@ -89,6 +158,14 @@ private: std::vector >*> dist; }; /// \brief /// Converts a DOFVector, that describes a phasefield function phi, to /// a signed distance function dist, by \f$atanh(-\phi)\cdot\epsilon/s \f$. /// You have to use transformDOF to apply this function to the DOFVector phi. /// the phasefield values are cutted to allow the atanh calculation, by /// \f$\phi:=\max(-1 + 10^{-10}, min(1-10^{-10}, \phi) ) \f$ /// struct PhaseFieldToSignedDist : AbstractFunction { PhaseFieldToSignedDist(double epsilon_= -1.0, double scalingFactor_ = 1.0/sqrt(2.0)) ... ... @@ -111,48 +188,13 @@ private: double scalingFactor; }; struct SignedDistToPhaseField : AbstractFunction { SignedDistToPhaseField(double epsilon_ = -1.0, double scalingFactor_ = 1.0/sqrt(2.0)) : AbstractFunction(6), epsilon(epsilon_), scalingFactor(scalingFactor_) { if (epsilon < 0.0) Parameters::get("mesh->refinement->epsilon", epsilon); } double operator()(const double &dist) const { return 0.5 * (1.0 - tanh(scalingFactor * dist / epsilon)); } private: double epsilon; double scalingFactor; }; struct SignedDistToCh : AbstractFunction { SignedDistToCh(double epsilon_ = -1.0, double scalingFactor_ = 1.0/sqrt(2.0)) : AbstractFunction(6), epsilon(epsilon_), scalingFactor(scalingFactor_) { if (epsilon < 0.0) Parameters::get("mesh->refinement->epsilon", epsilon); } double operator()(const double &dist) const { return -tanh(scalingFactor * dist / epsilon); } private: double epsilon; double scalingFactor; }; /// \brief /// Converts a DOFVector, that describes a phasefield function c with /// values in [-1, 1], to a phasefield function with values in [0,1], by /// \f$\frac{1}{2}(c + 1) \f$. /// You have to use transformDOF to apply this function to the DOFVector phi. /// struct ChToPhaseField : AbstractFunction { ChToPhaseField() : AbstractFunction(1) {}; ... ... @@ -162,6 +204,13 @@ struct ChToPhaseField : AbstractFunction } }; /// \brief /// Converts a DOFVector, that describes a phasefield function phi with /// values in [0, 1], to a phasefield function with values in [-1,1], by /// \f$2\cdot\phi-1 \f$. /// You have to use transformDOF to apply this function to the DOFVector phi. /// struct PhaseFieldToCh : AbstractFunction { PhaseFieldToCh() : AbstractFunction(1) {}; ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!