diff --git a/Numeric/cartesian.h b/Numeric/cartesian.h index e3ae44edba2f663af4d9e6ac618582ce15d8ee6e..a3285dd581d67498765aa9b58aef4fe31a05df13 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