Skip to content
Snippets Groups Projects
Commit 0e7846b7 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

add matheval levelset
parent c611fdf1
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,7 @@
#include "TreeUtils.h"
#include "SPoint2.h"
#include "ExtrudeParams.h"
#include "DILevelset.h"
#include "gmshLevelset.h"
#define MSH_POINT 100
#define MSH_POINT_BND_LAYER 101
......
// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to <gmsh@geuz.org>.
#ifndef _GMSH_LEVELSET_H_
#define _GMSH_LEVELSET_H_
#include <string>
#include <vector>
#include "GmshConfig.h"
#if defined(HAVE_DINTEGRATION)
#include "DILevelset.h"
#include "mathEvaluator.h"
class gLevelsetMathEval: public gLevelsetPrimitive
{
mathEvaluator *_expr;
public:
gLevelsetMathEval(std::string f, int &tag) : gLevelsetPrimitive(tag)
{
std::vector<std::string> expressions(1, f);
std::vector<std::string> variables(3);
variables[0] = "x";
variables[1] = "y";
variables[2] = "z";
_expr = new mathEvaluator(expressions, variables);
}
~gLevelsetMathEval(){ delete _expr; }
virtual double operator () (const double &x, const double &y, const double &z) const
{
std::vector<double> values(3), res(1);
values[0] = x;
values[1] = y;
values[2] = z;
if(_expr->eval(values, res)) return res[0];
return 0.;
}
int type() const { return UNKNOWN; }
};
#endif
#endif
This diff is collapsed.
......@@ -30,9 +30,9 @@
#include "OS.h"
#include "CreateFile.h"
#include "gmshSurface.h"
#include "gmshLevelset.h"
#include "Field.h"
#include "BackgroundMesh.h"
#include "DILevelset.h"
#if !defined(HAVE_NO_POST)
#include "PView.h"
#include "PViewDataList.h"
......@@ -1723,6 +1723,7 @@ ListOfShapes :
LevelSet :
tLevelset tPlane '(' FExpr ')' tAFFECT ListOfDouble tEND
{
#if defined(HAVE_DINTEGRATION)
if(List_Nbr($7) == 4){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1739,10 +1740,12 @@ LevelSet :
}
else
yymsg(0, "Wrong levelset definition (%d)", $4);
#endif
}
| tLevelset tPlane '(' FExpr ')' tAFFECT '{' VExpr ',' VExpr ','
RecursiveListOfDouble '}' tEND
{
#if defined(HAVE_DINTEGRATION)
if(List_Nbr($12) == 0){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1758,10 +1761,12 @@ LevelSet :
}
else
yymsg(0, "Wrong levelset definition (%d)", $4);
#endif
}
| tLevelset tPlane '(' FExpr ')' tAFFECT '{' VExpr ',' VExpr ',' VExpr ','
RecursiveListOfDouble '}' tEND
{
#if defined(HAVE_DINTEGRATION)
if(List_Nbr($14) == 0){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1778,9 +1783,11 @@ LevelSet :
}
else
yymsg(0, "Wrong levelset definition (%d)", $4);
#endif
}
| tLevelset tSphere '(' FExpr ')' tAFFECT '{' VExpr ',' RecursiveListOfDouble '}' tEND
{
#if defined(HAVE_DINTEGRATION)
if(List_Nbr($10) == 1){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1796,9 +1803,11 @@ LevelSet :
}
else
yymsg(0, "Wrong levelset definition (%d)", $4);
#endif
}
| tLevelset tSTRING '(' FExpr ')' tAFFECT ListOfDouble tEND
{
#if defined(HAVE_DINTEGRATION)
if(!strcmp($2, "Union")){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1874,9 +1883,30 @@ LevelSet :
else
yymsg(0, "Wrong levelset definition (%d)", $4);
Free($2);
#endif
}
| tLevelset tSTRING '(' FExpr ')' tAFFECT tBIGSTR tEND
{
#if defined(HAVE_DINTEGRATION)
if(!strcmp($2, "MathEval")){
int t = (int)$4;
if(FindLevelSet(t)){
yymsg(0, "Levelset %d already exists", t);
}
else {
gLevelset *ls = new gLevelsetMathEval($7, t);
LevelSet *l = Create_LevelSet(ls->getTag(), ls);
Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
}
}
else
yymsg(0, "Wrong levelset definition");
Free($2); Free($7);
#endif
}
| tLevelset tSTRING '{' FExpr '}' tEND
{
#if defined(HAVE_DINTEGRATION)
if(!strcmp($2, "CutMesh")){
int t = (int)$4;
GModel *GM = GModel::current();
......@@ -1886,10 +1916,12 @@ LevelSet :
else
yymsg(0, "Wrong levelset definition");
Free($2);
#endif
}
| tLevelset tSTRING '(' FExpr ')' tAFFECT '{' VExpr ',' VExpr ','
RecursiveListOfDouble '}' tEND
{
#if defined(HAVE_DINTEGRATION)
if(!strcmp($2, "Cylinder") && List_Nbr($12) == 1){
int t = (int)$4;
if(FindLevelSet(t)){
......@@ -1988,6 +2020,7 @@ LevelSet :
else
yymsg(0, "Wrong levelset definition (%d)", $4);
Free($2);
#endif
}
;
......
......@@ -8,6 +8,7 @@
// PRIMITIVE LEVELSET
#define UNKNOWN 0
#define SPHERE 1
#define PLANE 2
#define GENCYLINDER 3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment