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

quick try to get PhysicalRegion to work in MathEval... To test ;-)

parent 3db43012
No related branches found
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "MathEval.h" #include "MathEval.h"
#include "mathEvaluator.h" #include "mathEvaluator.h"
#include "OctreePost.h" #include "OctreePost.h"
#include "GEntity.h"
StringXNumber MathEvalOptions_Number[] = { StringXNumber MathEvalOptions_Number[] = {
{GMSH_FULLRC, "TimeStep", NULL, -1.}, {GMSH_FULLRC, "TimeStep", NULL, -1.},
...@@ -96,7 +97,7 @@ PView *GMSH_MathEvalPlugin::execute(PView *view) ...@@ -96,7 +97,7 @@ PView *GMSH_MathEvalPlugin::execute(PView *view)
int otherTimeStep = (int)MathEvalOptions_Number[2].def; int otherTimeStep = (int)MathEvalOptions_Number[2].def;
int iOtherView = (int)MathEvalOptions_Number[3].def; int iOtherView = (int)MathEvalOptions_Number[3].def;
int forceInterpolation = (int)MathEvalOptions_Number[4].def; int forceInterpolation = (int)MathEvalOptions_Number[4].def;
int region = (int)MathEvalOptions_Number[5].def; int physicalRegion = (int)MathEvalOptions_Number[5].def;
std::vector<std::string> expr(9); std::vector<std::string> expr(9);
for(int i = 0; i < 9; i++) expr[i] = MathEvalOptions_String[i].def; for(int i = 0; i < 9; i++) expr[i] = MathEvalOptions_String[i].def;
...@@ -185,7 +186,16 @@ PView *GMSH_MathEvalPlugin::execute(PView *view) ...@@ -185,7 +186,16 @@ PView *GMSH_MathEvalPlugin::execute(PView *view)
int timeBeg = (timeStep < 0) ? firstNonEmptyStep : timeStep; int timeBeg = (timeStep < 0) ? firstNonEmptyStep : timeStep;
int timeEnd = (timeStep < 0) ? -timeStep : timeStep + 1; int timeEnd = (timeStep < 0) ? -timeStep : timeStep + 1;
for(int ent = 0; ent < data1->getNumEntities(timeBeg); ent++){ for(int ent = 0; ent < data1->getNumEntities(timeBeg); ent++){
if (region>0 && (ent+1)!=region) continue; bool ok = (physicalRegion <= 0);
if(physicalRegion > 0){
GEntity *ge = data1->getEntity(timeBeg, ent);
if(ge){
std::vector<int>::iterator it = std::find
(ge->physicals.begin(), ge->physicals.end(), physicalRegion);
ok = (it != ge->physicals.end());
}
}
if(!ok) continue;
for(int ele = 0; ele < data1->getNumElements(timeBeg, ent); ele++){ for(int ele = 0; ele < data1->getNumElements(timeBeg, ent); ele++){
if(data1->skipElement(timeBeg, ent, ele)) continue; if(data1->skipElement(timeBeg, ent, ele)) continue;
int numNodes = data1->getNumNodes(timeBeg, ent, ele); int numNodes = data1->getNumNodes(timeBeg, ent, ele);
......
...@@ -95,10 +95,22 @@ void PViewData::setValue(int step, int ent, int ele, int nod, int comp, double v ...@@ -95,10 +95,22 @@ void PViewData::setValue(int step, int ent, int ele, int nod, int comp, double v
Msg::Error("Cannot change field value in this view"); Msg::Error("Cannot change field value in this view");
} }
GModel *PViewData::getModel(int step)
{
Msg::Error("Cannot get entity from this view");
return 0;
}
GEntity *PViewData::getEntity(int step, int ent)
{
Msg::Error("Cannot get entity from this view");
return 0;
}
MElement *PViewData::getElement(int step, int ent, int ele) MElement *PViewData::getElement(int step, int ent, int ele)
{ {
Msg::Error("Cannot get element from this view"); Msg::Error("Cannot get element from this view");
return NULL; return 0;
} }
void PViewData::setInterpolationMatrices(int type, void PViewData::setInterpolationMatrices(int type,
......
...@@ -222,6 +222,12 @@ class PViewData { ...@@ -222,6 +222,12 @@ class PViewData {
virtual bool isRemote(){ return false; } virtual bool isRemote(){ return false; }
virtual int fillRemoteVertexArrays(std::string &options){ return 0; } virtual int fillRemoteVertexArrays(std::string &options){ return 0; }
// get GModel (if view supports it)
virtual GModel *getModel(int step);
// get GEntity (if view supports it)
virtual GEntity *getEntity(int step, int entity);
// get MElement (if view supports it) // get MElement (if view supports it)
virtual MElement *getElement(int step, int entity, int element); virtual MElement *getElement(int step, int entity, int element);
......
...@@ -441,6 +441,11 @@ int PViewDataGModel::getNumElements(int step, int ent) ...@@ -441,6 +441,11 @@ int PViewDataGModel::getNumElements(int step, int ent)
return _steps[step]->getEntity(ent)->getNumMeshElements(); return _steps[step]->getEntity(ent)->getNumMeshElements();
} }
GEntity *PViewDataGModel::getEntity(int step, int ent)
{
return _steps[step]->getEntity(ent);
}
MElement *PViewDataGModel::getElement(int step, int ent, int element) MElement *PViewDataGModel::getElement(int step, int ent, int element)
{ {
if(_steps.empty()) return 0; if(_steps.empty()) return 0;
...@@ -770,11 +775,6 @@ bool PViewDataGModel::hasModel(GModel *model, int step) ...@@ -770,11 +775,6 @@ bool PViewDataGModel::hasModel(GModel *model, int step)
return (model == _steps[step]->getModel()); return (model == _steps[step]->getModel());
} }
GEntity *PViewDataGModel::getEntity(int step, int ent)
{
return _steps[step]->getEntity(ent);
}
bool PViewDataGModel::getValueByIndex(int step, int dataIndex, int nod, int comp, double &val) bool PViewDataGModel::getValueByIndex(int step, int dataIndex, int nod, int comp, double &val)
{ {
double *d = _steps[step]->getData(dataIndex); double *d = _steps[step]->getData(dataIndex);
......
...@@ -220,17 +220,14 @@ class PViewDataGModel : public PViewData { ...@@ -220,17 +220,14 @@ class PViewDataGModel : public PViewData {
bool hasMultipleMeshes(); bool hasMultipleMeshes();
bool hasModel(GModel *model, int step=-1); bool hasModel(GModel *model, int step=-1);
bool useGaussPoints(){ return _type == GaussPointData; } bool useGaussPoints(){ return _type == GaussPointData; }
GModel* getModel(int step){ return _steps[step]->getModel(); }
GEntity *getEntity(int step, int ent);
MElement *getElement(int step, int entity, int element);
// get the data type // get the data type
DataType getType(){ return _type; } DataType getType(){ return _type; }
// direct access to GModel entities
GEntity *getEntity(int step, int ent);
// direct access to value by index // direct access to value by index
bool getValueByIndex(int step, int dataIndex, int node, int comp, double &val); bool getValueByIndex(int step, int dataIndex, int node, int comp, double &val);
// get underlying model
GModel* getModel(int step){ return _steps[step]->getModel(); }
// get MElement
MElement *getElement(int step, int entity, int element);
// Add some data "on the fly" (data is stored in a map, indexed by // Add some data "on the fly" (data is stored in a map, indexed by
// node or element number depending on the type of dataset) // node or element number depending on the type of dataset)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment