/[escript]/trunk/dataexporter/src/NodeData.cpp
ViewVC logotype

Diff of /trunk/dataexporter/src/NodeData.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2834 by caltinay, Thu Jan 7 06:06:56 2010 UTC revision 2853 by caltinay, Mon Jan 18 01:46:05 2010 UTC
# Line 125  bool NodeData::initFromFinley(const Finl Line 125  bool NodeData::initFromFinley(const Finl
125      numDims = finleyFile->numDim;      numDims = finleyFile->numDim;
126      numNodes = finleyFile->numNodes;      numNodes = finleyFile->numNodes;
127    
128        int mpisize = finleyFile->MPIInfo->size;
129        iPtr = finleyFile->nodesDistribution->first_component;
130        nodeDist.clear();
131        nodeDist.insert(nodeDist.end(), mpisize+1, 0);
132        copy(iPtr, iPtr+mpisize+1, nodeDist.begin());
133    
134      CoordArray::iterator it;      CoordArray::iterator it;
135      for (it = coords.begin(); it != coords.end(); it++)      for (it = coords.begin(); it != coords.end(); it++)
136          delete[] *it;          delete[] *it;
137      coords.clear();      coords.clear();
138        nodeID.clear();
139        nodeTag.clear();
140        nodeGDOF.clear();
141        nodeGNI.clear();
142        nodeGRDFI.clear();
143        nodeGRNI.clear();
144    
145      if (numNodes > 0) {      if (numNodes > 0) {
146          for (int i=0; i<numDims; i++) {          for (int i=0; i<numDims; i++) {
# Line 143  bool NodeData::initFromFinley(const Finl Line 155  bool NodeData::initFromFinley(const Finl
155          int* iPtr;          int* iPtr;
156    
157          iPtr = finleyFile->Id;          iPtr = finleyFile->Id;
         nodeID.clear();  
158          nodeID.insert(nodeID.end(), numNodes, 0);          nodeID.insert(nodeID.end(), numNodes, 0);
159          copy(iPtr, iPtr+numNodes, nodeID.begin());          copy(iPtr, iPtr+numNodes, nodeID.begin());
160    
161          iPtr = finleyFile->Tag;          iPtr = finleyFile->Tag;
         nodeTag.clear();  
162          nodeTag.insert(nodeTag.end(), numNodes, 0);          nodeTag.insert(nodeTag.end(), numNodes, 0);
163          copy(iPtr, iPtr+numNodes, nodeTag.begin());          copy(iPtr, iPtr+numNodes, nodeTag.begin());
164    
165          iPtr = finleyFile->globalDegreesOfFreedom;          iPtr = finleyFile->globalDegreesOfFreedom;
         nodeGDOF.clear();  
166          nodeGDOF.insert(nodeGDOF.end(), numNodes, 0);          nodeGDOF.insert(nodeGDOF.end(), numNodes, 0);
167          copy(iPtr, iPtr+numNodes, nodeGDOF.begin());          copy(iPtr, iPtr+numNodes, nodeGDOF.begin());
168    
169          iPtr = finleyFile->globalNodesIndex;          iPtr = finleyFile->globalNodesIndex;
         nodeGNI.clear();  
170          nodeGNI.insert(nodeGNI.end(), numNodes, 0);          nodeGNI.insert(nodeGNI.end(), numNodes, 0);
171          copy(iPtr, iPtr+numNodes, nodeGNI.begin());          copy(iPtr, iPtr+numNodes, nodeGNI.begin());
172    
173          iPtr = finleyFile->globalReducedDOFIndex;          iPtr = finleyFile->globalReducedDOFIndex;
         nodeGRDFI.clear();  
174          nodeGRDFI.insert(nodeGRDFI.end(), numNodes, 0);          nodeGRDFI.insert(nodeGRDFI.end(), numNodes, 0);
175          copy(iPtr, iPtr+numNodes, nodeGRDFI.begin());          copy(iPtr, iPtr+numNodes, nodeGRDFI.begin());
176    
177          iPtr = finleyFile->globalReducedNodesIndex;          iPtr = finleyFile->globalReducedNodesIndex;
         nodeGRNI.clear();  
178          nodeGRNI.insert(nodeGRNI.end(), numNodes, 0);          nodeGRNI.insert(nodeGRNI.end(), numNodes, 0);
179          copy(iPtr, iPtr+numNodes, nodeGRNI.begin());          copy(iPtr, iPtr+numNodes, nodeGRNI.begin());
180    
         int mpisize = finleyFile->MPIInfo->size;  
         iPtr = finleyFile->nodesDistribution->first_component;  
         nodeDist.clear();  
         nodeDist.insert(nodeDist.end(), mpisize+1, 0);  
         copy(iPtr, iPtr+mpisize+1, nodeDist.begin());  
181      }      }
182      return true;      return true;
183  }  }
# Line 199  bool NodeData::readFromNc(NcFile* ncFile Line 200  bool NodeData::readFromNc(NcFile* ncFile
200      att = ncFile->get_att("mpi_size");      att = ncFile->get_att("mpi_size");
201      int mpisize = att->as_int(0);      int mpisize = att->as_int(0);
202    
203        nodeDist.clear();
204        nodeDist.insert(nodeDist.end(), mpisize+1, 0);
205        var = ncFile->get_var("Nodes_NodeDistribution");
206        var->get(&nodeDist[0], mpisize+1);
207    
208      CoordArray::iterator it;      CoordArray::iterator it;
209      for (it = coords.begin(); it != coords.end(); it++)      for (it = coords.begin(); it != coords.end(); it++)
210          delete[] *it;          delete[] *it;
211      coords.clear();      coords.clear();
     var = ncFile->get_var("Nodes_Coordinates");  
     for (int i=0; i<numDims; i++) {  
         float* c = new float[numNodes];  
         var->set_cur(0, i);  
         var->get(c, numNodes, 1);  
         coords.push_back(c);  
     }  
   
212      nodeID.clear();      nodeID.clear();
     nodeID.insert(nodeID.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_Id");  
     var->get(&nodeID[0], numNodes);  
   
213      nodeTag.clear();      nodeTag.clear();
     nodeTag.insert(nodeTag.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_Tag");  
     var->get(&nodeTag[0], numNodes);  
   
214      nodeGDOF.clear();      nodeGDOF.clear();
     nodeGDOF.insert(nodeGDOF.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_gDOF");  
     var->get(&nodeGDOF[0], numNodes);  
   
215      nodeGNI.clear();      nodeGNI.clear();
     nodeGNI.insert(nodeGNI.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_gNI");  
     var->get(&nodeGNI[0], numNodes);  
   
216      nodeGRDFI.clear();      nodeGRDFI.clear();
     nodeGRDFI.insert(nodeGRDFI.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_grDfI");  
     var->get(&nodeGRDFI[0], numNodes);  
   
217      nodeGRNI.clear();      nodeGRNI.clear();
     nodeGRNI.insert(nodeGRNI.end(), numNodes, 0);  
     var = ncFile->get_var("Nodes_grNI");  
     var->get(&nodeGRNI[0], numNodes);  
218    
219      nodeDist.clear();      // Only attempt to read further if there are any nodes.
220      nodeDist.insert(nodeDist.end(), mpisize+1, 0);      // Having no nodes is not an error.
221      var = ncFile->get_var("Nodes_NodeDistribution");      if (numNodes > 0) {
222      var->get(&nodeDist[0], mpisize+1);          var = ncFile->get_var("Nodes_Coordinates");
223            for (int i=0; i<numDims; i++) {
224                float* c = new float[numNodes];
225                var->set_cur(0, i);
226                var->get(c, numNodes, 1);
227                coords.push_back(c);
228            }
229    
230            nodeID.insert(nodeID.end(), numNodes, 0);
231            var = ncFile->get_var("Nodes_Id");
232            var->get(&nodeID[0], numNodes);
233    
234            nodeTag.insert(nodeTag.end(), numNodes, 0);
235            var = ncFile->get_var("Nodes_Tag");
236            var->get(&nodeTag[0], numNodes);
237    
238            nodeGDOF.insert(nodeGDOF.end(), numNodes, 0);
239            var = ncFile->get_var("Nodes_gDOF");
240            var->get(&nodeGDOF[0], numNodes);
241    
242            nodeGNI.insert(nodeGNI.end(), numNodes, 0);
243            var = ncFile->get_var("Nodes_gNI");
244            var->get(&nodeGNI[0], numNodes);
245    
246            nodeGRDFI.insert(nodeGRDFI.end(), numNodes, 0);
247            var = ncFile->get_var("Nodes_grDfI");
248            var->get(&nodeGRDFI[0], numNodes);
249    
250            nodeGRNI.insert(nodeGRNI.end(), numNodes, 0);
251            var = ncFile->get_var("Nodes_grNI");
252            var->get(&nodeGRNI[0], numNodes);
253        }
254    
255      return true;      return true;
256  #else // !USE_NETCDF  #else // !USE_NETCDF
# Line 291  StringVec NodeData::getVarNames() const Line 297  StringVec NodeData::getVarNames() const
297  }  }
298    
299  //  //
 //  
 //  
 void NodeData::removeGhostNodes(int ownIndex)  
 {  
     if (nodeDist.empty() || ownIndex > nodeDist.size()-1)  
         return;  
   
     int firstId = nodeDist[ownIndex];  
     int lastId = nodeDist[ownIndex+1];  
   
     // no ghost nodes  
     if (lastId-firstId == numNodes)  
         return;  
   
     // we have at most lastId-firstId nodes, it could be less however if  
     // nodes were culled already  
     numNodes = lastId-firstId;  
   
     CoordArray newCoords;  
     CoordArray::iterator it;  
     for (int i=0; i<numDims; i++) {  
         float* c = new float[numNodes];  
         newCoords.push_back(c);  
     }  
   
     IntVec newNodeID, newNodeTag;  
     IntVec newNodeGDOF, newNodeGNI, newNodeGRDFI, newNodeGRNI;  
   
     IndexMap nodeID2idx = getIndexMap();  
     int destIdx = 0;  
     for (int i=firstId; i<lastId; i++) {  
         IndexMap::iterator it = nodeID2idx.find(i);  
         if (it == nodeID2idx.end()) {  
             continue;  
         }  
         int idx = it->second;  
         for (int dim=0; dim<numDims; dim++) {  
             newCoords[dim][destIdx] = coords[dim][idx];  
         }  
         destIdx++;  
         newNodeID.push_back(i);  
         newNodeTag.push_back(nodeTag[idx]);  
         newNodeGDOF.push_back(nodeGDOF[idx]);  
         newNodeGNI.push_back(nodeGNI[idx]);  
         newNodeGRDFI.push_back(nodeGRDFI[idx]);  
         newNodeGRNI.push_back(nodeGRNI[idx]);  
     }  
   
     numNodes = destIdx;  
   
     for (it = coords.begin(); it != coords.end(); it++)  
         delete[] *it;  
   
     coords = newCoords;  
     nodeID = newNodeID;  
     nodeTag = newNodeTag;  
     nodeGDOF = newNodeGDOF;  
     nodeGNI = newNodeGNI;  
     nodeGRDFI = newNodeGRDFI;  
     nodeGRNI = newNodeGRNI;  
 }  
   
 //  
300  //  //
301  //  //
302  bool NodeData::writeToSilo(DBfile* dbfile)  bool NodeData::writeToSilo(DBfile* dbfile)

Legend:
Removed from v.2834  
changed lines
  Added in v.2853

  ViewVC Help
Powered by ViewVC 1.1.26