// Example C++ function "CppModTemplate" dynamically loaded into "load.edp" // ------------------------------------------------------------------------ // ff-c++ LevelSet.cpp #include #include "AFunction_ext.hpp" // Extension of "AFunction.hpp" to deal with more than 3 parameters function using namespace Fem2D; Matrice_Creuse *Dmx; Matrice_Creuse *Dmy; Matrice_Creuse *Dpx; Matrice_Creuse *Dpy; Matrice_Creuse *Dmxx; Matrice_Creuse *Dmyy; Matrice_Creuse *Dpxx; Matrice_Creuse *Dpyy; Matrice_Creuse *D0xx; Matrice_Creuse *D0yy; double dx,dy; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// inline double G(const double &u1,const double &u2,const double &u3,const double &u4) { double p1=max(0.,u1), p2=min(0.,u2), p3=max(0.,u3), p4=min(0.,u4); return sqrt(p1*p1+p2*p2+p3*p3+p4*p4); } inline double Plus(const double &u) { double p1=max(0.,u); return p1; } inline double Moins(const double &u) { double p1=min(0.,u); return p1; } inline double Minmod(const double &a, const double &b) { double sa= a > 0. ? 1. : -1.; double sb= b > 0. ? 1. : -1.; return max(0.,sa*sb)*sa*min(abs(a),abs(b)); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int Derivatives1(Matrice_Creuse *const &dpx,Matrice_Creuse *const &dpy,Matrice_Creuse *const &dmx,Matrice_Creuse *const &dmy) { Dmx = dmx; Dmy = dmy; Dpx = dpx; Dpy = dpy; return 1; } int Derivatives2(Matrice_Creuse *const &dpxx,Matrice_Creuse *const &dpyy,Matrice_Creuse *const &dmxx,Matrice_Creuse *const &dmyy,Matrice_Creuse *const &d0xx,Matrice_Creuse *const &d0yy) { Dmxx = dmxx; Dmyy = dmyy; Dpxx = dpxx; Dpyy = dpyy; D0xx = d0xx; D0yy = d0yy; return 1; } int Parameters(const double & dx_, const double & dy_) { dx = dx_;dy = dy_; return 1; } //int HJUpwind(KN *const & psi0,KN *const & psi,KN *const & v,const double & dtReini,const double & dtUpwind) int HJ(KN *const & psi,KN *const & v,const long &Nupwind,const double & dtUpwind) { KN &Psi(*psi),&V(*v); int nm=Psi.N(); //cout<<"nm="< DmxPsi(nm), DpxPsi(nm), DmyPsi(nm), DpyPsi(nm),DmxxPsi(nm),D0xxPsi(nm),DpxxPsi(nm), DmyyPsi(nm),D0yyPsi(nm), DpyyPsi(nm),A(nm),B(nm),C(nm),D(nm),GammaP(nm),GammaM(nm),Vp(nm),Vm(nm); for(int i=0;iA)*Psi;DpxPsi=*(Dpx->A)*Psi;DmyPsi=*(Dmy->A)*Psi;DpyPsi=*(Dpy->A)*Psi; DmxxPsi=*(Dmxx->A)*Psi; DpxxPsi=*(Dpxx->A)*Psi; D0xxPsi=*(D0xx->A)*Psi; DmyyPsi=*(Dmyy->A)*Psi; DpyyPsi=*(Dpyy->A)*Psi; D0yyPsi=*(D0yy->A)*Psi; for(int ii=0;ii *const & psi,const long &Nreg,const double & dtReini) { KN &Psi(*psi); int nm=Psi.N(); KN DmxPsi0(nm), DpxPsi0(nm), DmyPsi0(nm), DpyPsi0(nm), DmxPsi(nm), DpxPsi(nm), DmyPsi(nm), DpyPsi(nm),DmxxPsi(nm), DpxxPsi(nm), DmyyPsi(nm), DpyyPsi(nm), D0xxPsi(nm), D0yyPsi(nm),A(nm),B(nm),C(nm),D(nm),GammaP(nm),GammaM(nm),S0(nm),Sp(nm),Sm(nm); KN Psi0 = Psi; { // reinitialization DmxPsi0=*(Dmx->A)*Psi0;DpxPsi0=*(Dpx->A)*Psi0;DmyPsi0=*(Dmy->A)*Psi0;DpyPsi0=*(Dpy->A)*Psi0; for(int j=0;jA)*Psi; DpxPsi=*(Dpx->A)*Psi; DmyPsi=*(Dmy->A)*Psi; DpyPsi=*(Dpy->A)*Psi; DmxxPsi=*(Dmxx->A)*Psi; DpxxPsi=*(Dpxx->A)*Psi; D0xxPsi=*(D0xx->A)*Psi; DmyyPsi=*(Dmyy->A)*Psi; DpyyPsi=*(Dpyy->A)*Psi; D0yyPsi=*(D0yy->A)*Psi; for(int ii=0;ii*, KN*,long,double>(HJ)); Global.Add("regularization","(",new OneOperator3_*,const long,const double>(regularization)); Global.Add("Parameters","(",new OneOperator2_(Parameters)); Global.Add("Derivatives1","(",new OneOperator4_ *,Matrice_Creuse *,Matrice_Creuse *,Matrice_Creuse *>(Derivatives1)); Global.Add("Derivatives2","(",new OneOperator6_ *,Matrice_Creuse *,Matrice_Creuse *, Matrice_Creuse *,Matrice_Creuse *,Matrice_Creuse *>(Derivatives2)); }