From 11bf3cd175cbbd06fb7905adced79bc6c38682d1 Mon Sep 17 00:00:00 2001 From: Gregory Legrain <gregory.legrain@ec-nantes.fr> Date: Fri, 16 Jul 2010 10:07:01 +0000 Subject: [PATCH] Added some methods : * iterator on active cells * get the nodal values on a given cell --- Numeric/cartesian.h | 93 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/Numeric/cartesian.h b/Numeric/cartesian.h index e3ae44edba..a3285dd581 100644 --- a/Numeric/cartesian.h +++ b/Numeric/cartesian.h @@ -61,6 +61,67 @@ class cartesianBox { typename std::map<int, scalar>::const_iterator begin() const { return _nodalValues.begin(); } typename std::map<int, scalar>::const_iterator end() const { return _nodalValues.end(); } + typedef std::set<int>::iterator boxIter; + boxIter activeBoxBegin() {return _active.begin(); } + boxIter activeBoxEnd() {return _active.end(); } + + //Perhaps not optimal (lot of searches...) + void getNodalValues(const int &t, std::vector<scalar> &ls_values) { + int i,j,k; + element_ijk(t,i,j,k); + + typename std::map<int, scalar>::iterator itNode = _nodalValues.find(node_index(i,j,k)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i+1,j,k)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i+1,j+1,k)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i,j+1,k)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i,j,k+1)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i+1,j,k+1)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i+1,j+1,k+1)); + ls_values.push_back(itNode->second); + + itNode = _nodalValues.find(node_index(i,j+1,k+1)); + ls_values.push_back(itNode->second); + + return; + } + +// // Test : does not work for the moment +// bool connectedToActiveCell(int i, int j, int k){ +// +// int connectedCells[8]={-1,-1,-1,-1,-1,-1,-1,-1}; +// +// connectedCells[0]=element_index(i,j,k); +// connectedCells[1]=element_index(i-1,j,k); +// connectedCells[2]=element_index(i,j-1,k); +// connectedCells[3]=element_index(i-1,j-1,k); +// connectedCells[4]=element_index(i,j,k-1); +// connectedCells[5]=element_index(i-1,j,k-1); +// connectedCells[6]=element_index(i,j-1,k-1); +// connectedCells[7]=element_index(i-1,j-1,k-1); +// +// bool activeCell=false; +// +// for(int I=0;I<8;++I){ +// activeCell += (_active.find() == _active.end()); +// } +// +// return activeCell; +// +// } + + // add that in the ann search tool void insert_point (double x, double y, double z) { @@ -115,6 +176,16 @@ class cartesianBox { { _active.insert(t); } + void erase (const int &t) + { + _active.erase(t); + } + + void erase (std::set<int>::iterator t) + { + _active.erase(t); + } + inline int element_index (int i, int j, int k) const { return i + _Nxi * j + _Nxi *_Neta * k; @@ -148,7 +219,7 @@ class cartesianBox { _nodalValues[node_index(i+I,j+J,k+K)] = 0.0; } } - void writeMSH (const std::string &filename, bool simplex=false) const + void writeMSH (const std::string &filename, bool simplex=false, bool writeLS=true) const { // const bool simplex=false; @@ -238,7 +309,7 @@ class cartesianBox { } fprintf(f,"$EndElements\n"); } - { + if(writeLS){ fprintf(f,"$NodeData\n1\n\"distance\"\n 1\n 0.0\n3\n0\n 1\n %d\n",_nodalValues.size()); typename std::map<int, scalar>::const_iterator it = _nodalValues.begin(); for ( ; it!=_nodalValues.end();++it){ @@ -250,6 +321,24 @@ class cartesianBox { } fclose (f); } + + void writeLSOnly (const std::string &filename) const + { + FILE *f = fopen (filename.c_str(), "w"); + + fprintf(f,"%d\n",_nodalValues.size()); + typename std::map<int, scalar>::const_iterator it = _nodalValues.begin(); + for ( ; it!=_nodalValues.end();++it){ + SPoint3 p = coordinates_of_node(it->first); + fprintf(f,"%d %g\n",it->first,it->second); + } + + fclose (f); + + } + }; + + #endif -- GitLab