diff --git a/Plugin/Curl.cpp b/Plugin/Curl.cpp index c09d3e5b2e070d7a614d1f6e79695e04e95d072f..bec30666b9dbd5736d9613eb4fbd2279e4db3553 100644 --- a/Plugin/Curl.cpp +++ b/Plugin/Curl.cpp @@ -40,7 +40,7 @@ StringXNumber *GMSH_CurlPlugin::getOption(int iopt) PView *GMSH_CurlPlugin::execute(PView *v) { int iView = (int)CurlOptions_Number[0].def; - + PView *v1 = getView(iView, v); if(!v1) return v; @@ -52,20 +52,21 @@ PView *GMSH_CurlPlugin::execute(PView *v) PView *v2 = new PView(); PViewDataList *data2 = getDataList(v2); + int firstNonEmptyStep = data1->getFirstNonEmptyTimeStep(); - for(int ent = 0; ent < data1->getNumEntities(0); ent++){ - for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){ - if(data1->skipElement(0, ent, ele)) continue; - int numComp = data1->getNumComponents(0, ent, ele); + for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){ + for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){ + if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue; + int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele); if(numComp != 3) continue; - int type = data1->getType(0, ent, ele); + int type = data1->getType(firstNonEmptyStep, ent, ele); std::vector<double> *out = data2->incrementList(3, type); if(!out) continue; - int numNodes = data1->getNumNodes(0, ent, ele); + int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele); double x[8], y[8], z[8], val[8 * 3]; for(int nod = 0; nod < numNodes; nod++) - data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]); - int dim = data1->getDimension(0, ent, ele); + data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]); + int dim = data1->getDimension(firstNonEmptyStep, ent, ele); elementFactory factory; element *element = factory.create(numNodes, dim, x, y, z); if(!element) continue; @@ -73,6 +74,7 @@ PView *GMSH_CurlPlugin::execute(PView *v) for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]); for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]); for(int step = 0; step < data1->getNumTimeSteps(); step++){ + if(!data1->hasTimeStep(step)) continue; for(int nod = 0; nod < numNodes; nod++) for(int comp = 0; comp < numComp; comp++) data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]); @@ -90,12 +92,13 @@ PView *GMSH_CurlPlugin::execute(PView *v) } for(int i = 0; i < data1->getNumTimeSteps(); i++){ + if(!data1->hasTimeStep(i)) continue; double time = data1->getTime(i); data2->Time.push_back(time); } data2->setName(data1->getName() + "_Curl"); data2->setFileName(data1->getName() + "_Curl.pos"); data2->finalize(); - + return v2; } diff --git a/Plugin/Divergence.cpp b/Plugin/Divergence.cpp index 6b87dee4c61b0e986962424e790b074c0e3c152b..ffabf5a367b97227a25f7d7f6307665f4a7dc131 100644 --- a/Plugin/Divergence.cpp +++ b/Plugin/Divergence.cpp @@ -40,7 +40,7 @@ StringXNumber *GMSH_DivergencePlugin::getOption(int iopt) PView *GMSH_DivergencePlugin::execute(PView *v) { int iView = (int)DivergenceOptions_Number[0].def; - + PView *v1 = getView(iView, v); if(!v1) return v; @@ -52,20 +52,21 @@ PView *GMSH_DivergencePlugin::execute(PView *v) PView *v2 = new PView(); PViewDataList *data2 = getDataList(v2); + int firstNonEmptyStep = data1->getFirstNonEmptyTimeStep(); - for(int ent = 0; ent < data1->getNumEntities(0); ent++){ - for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){ - if(data1->skipElement(0, ent, ele)) continue; - int numComp = data1->getNumComponents(0, ent, ele); + for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){ + for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){ + if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue; + int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele); if(numComp != 3) continue; - int type = data1->getType(0, ent, ele); + int type = data1->getType(firstNonEmptyStep, ent, ele); std::vector<double> *out = data2->incrementList(1, type); if(!out) continue; - int numNodes = data1->getNumNodes(0, ent, ele); + int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele); double x[8], y[8], z[8], val[8 * 3]; for(int nod = 0; nod < numNodes; nod++) - data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]); - int dim = data1->getDimension(0, ent, ele); + data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]); + int dim = data1->getDimension(firstNonEmptyStep, ent, ele); elementFactory factory; element *element = factory.create(numNodes, dim, x, y, z); if(!element) continue; @@ -73,6 +74,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v) for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]); for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]); for(int step = 0; step < data1->getNumTimeSteps(); step++){ + if(!data1->hasTimeStep(step)) continue; for(int nod = 0; nod < numNodes; nod++) for(int comp = 0; comp < numComp; comp++) data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]); @@ -88,6 +90,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v) } for(int i = 0; i < data1->getNumTimeSteps(); i++){ + if(!data1->hasTimeStep(i)) continue; double time = data1->getTime(i); data2->Time.push_back(time); } diff --git a/Plugin/Gradient.cpp b/Plugin/Gradient.cpp index 4f954ed03d7e819ac5d5042a7a17462d578821a8..98fe67a2985aca278c06d95099032f29be3428b7 100644 --- a/Plugin/Gradient.cpp +++ b/Plugin/Gradient.cpp @@ -40,7 +40,7 @@ StringXNumber *GMSH_GradientPlugin::getOption(int iopt) PView *GMSH_GradientPlugin::execute(PView *v) { int iView = (int)GradientOptions_Number[0].def; - + PView *v1 = getView(iView, v); if(!v1) return v; @@ -52,20 +52,21 @@ PView *GMSH_GradientPlugin::execute(PView *v) PView *v2 = new PView(); PViewDataList *data2 = getDataList(v2); + int firstNonEmptyStep = data1->getFirstNonEmptyTimeStep(); - for(int ent = 0; ent < data1->getNumEntities(0); ent++){ - for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){ - if(data1->skipElement(0, ent, ele)) continue; - int numComp = data1->getNumComponents(0, ent, ele); + for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){ + for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){ + if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue; + int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele); if(numComp != 1 && numComp != 3) continue; - int type = data1->getType(0, ent, ele); + int type = data1->getType(firstNonEmptyStep, ent, ele); std::vector<double> *out = data2->incrementList((numComp == 1) ? 3 : 9, type); if(!out) continue; - int numNodes = data1->getNumNodes(0, ent, ele); + int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele); double x[8], y[8], z[8], val[8 * 3]; for(int nod = 0; nod < numNodes; nod++) - data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]); - int dim = data1->getDimension(0, ent, ele); + data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]); + int dim = data1->getDimension(firstNonEmptyStep, ent, ele); elementFactory factory; element *element = factory.create(numNodes, dim, x, y, z); if(!element) continue; @@ -73,6 +74,7 @@ PView *GMSH_GradientPlugin::execute(PView *v) for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]); for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]); for(int step = 0; step < data1->getNumTimeSteps(); step++){ + if(!data1->hasTimeStep(step)) continue; for(int nod = 0; nod < numNodes; nod++) for(int comp = 0; comp < numComp; comp++) data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]); @@ -92,12 +94,13 @@ PView *GMSH_GradientPlugin::execute(PView *v) } for(int i = 0; i < data1->getNumTimeSteps(); i++){ + if(!data1->hasTimeStep(i)) continue; double time = data1->getTime(i); data2->Time.push_back(time); } data2->setName(data1->getName() + "_Gradient"); data2->setFileName(data1->getName() + "_Gradient.pos"); data2->finalize(); - + return v2; }