/[escript]/trunk/escript/src/Utils.cpp
ViewVC logotype

Diff of /trunk/escript/src/Utils.cpp

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

revision 2641 by jfenwick, Mon Aug 31 07:41:49 2009 UTC revision 2642 by jfenwick, Tue Sep 1 04:15:50 2009 UTC
# Line 172  ESCRIPT_DLL_API void MPIBarrierWorld() { Line 172  ESCRIPT_DLL_API void MPIBarrierWorld() {
172    #endif    #endif
173  }  }
174    
175    
176    /*
177    ESCRIPT_DLL_API
178    void
179    saveDataCSV(const std::string& filename, boost::python::dict arg, const std::string& sep, const std::string& csep,
180    bool append)
181    {
182        boost::python::list keys=arg.keys();
183        int numdata = boost::python::extract<int>(arg.attr("__len__")());
184        bool hasmask=arg.has_key("mask");
185        Data mask;
186        if (hasmask)
187        {
188        mask=boost::python::extract<escript::Data>(arg["mask"]);
189        keys.remove("mask");
190            if (mask.getDataPointRank()!=0)
191        {
192            throw DataException("saveDataCSVcpp: masks must be scalar.");
193        }
194        }
195        if (numdata<1)
196        {
197        throw DataException("saveDataCSVcpp: no data to save specified.");
198        }
199        std::vector<std::string> names(numdata);
200        std::vector<Data> data(numdata);
201        std::vector<int> fstypes(numdata);      // FunctionSpace types for each data
202    
203        if (hasmask)
204        {
205        numdata--;
206        }
207    
208        // We need to interpret the samples correctly even if they are different types
209        // for this reason, we should interate over samples
210        for (int i=0;i<numdata;++i)
211        {
212        names[i]=boost::python::extract<std::string>(keys[i]);
213        data[i]=boost::python::extract<escript::Data>(arg[keys[i]]);
214        fstypes[i]=data[i].getFunctionSpace().getTypeCode();
215        if (i>0)
216        {
217            if (data[i].getDomain()!=data[i-1].getDomain())
218            {
219            throw DataException("saveDataCSVcpp: all data must be on the same domain.");
220            }
221        }
222        }
223        const_Domain_ptr dom0=data[0].getDomain();
224        if (hasmask)
225        {
226        if (dom0!=mask.getDomain())
227        {
228            throw DataException("saveDataCSVcpp: mask be on the same FunctionSpace as data.");
229        }
230        fstypes[numdata]=mask.getFunctionSpace().getTypeCode();
231        names[numdata]="mask";
232        data[numdata]=mask;
233        }
234        int bestfnspace=0;
235        if (!dom0->commonFunctionSpace(fstypes, bestfnspace))
236        {
237        throw DataException("saveDataCSVcpp: FunctionSpaces of data are incompatible");
238        }
239        // now we interpolate all data to the same type
240        FunctionSpace best(dom0,bestfnspace);
241        for (int i=0;i<data.size();++i)
242        {
243        data[i]=data[i].interpolate(best);
244        }
245        dom0->saveDataCSV(filename, data, names, sep, csep, append, hasmask);
246    }
247    */
248    
249    
250  ESCRIPT_DLL_API  ESCRIPT_DLL_API
251  void  void
252  saveDataCSV(const std::string& filename, boost::python::dict arg, const std::string& sep, const std::string& csep,  saveDataCSV(const std::string& filename, boost::python::dict arg, const std::string& sep, const std::string& csep,
# Line 363  bool append) Line 438  bool append)
438      try{      try{
439        for (int i=0;i<numsamples;++i)        for (int i=0;i<numsamples;++i)
440        {        {
441            if (!best.ownSample(i))
442        {
443            continue;
444        }
445      wantrow=true;      wantrow=true;
446      for (int d=0;d<numdata;++d)      for (int d=0;d<numdata;++d)
447      {      {
# Line 463  bool append) Line 542  bool append)
542          if (ifs.is_open())          if (ifs.is_open())
543          {          {
544          ifs.close();          ifs.close();
545              if (!remove(fname_p.get()))              if (remove(fname_p.get()))
546          {          {
547              error=1;              error=1;
548          }          }
# Line 494  bool append) Line 573  bool append)
573                      MPI_CHAR, MPI_CHAR, "native", mpi_info);                      MPI_CHAR, MPI_CHAR, "native", mpi_info);
574  // here we are assuming that std::string holds the same type of char as MPI_CHAR  // here we are assuming that std::string holds the same type of char as MPI_CHAR
575      }      }
576    
577      std::string contents=os.str();      std::string contents=os.str();
578      char* con=new char[contents.size()+1];      char* con=new char[contents.size()+1];
579      strcpy(con, contents.c_str());      strcpy(con, contents.c_str());
# Line 517  bool append) Line 597  bool append)
597  #endif  #endif
598  }  }
599    
600    
601  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.2641  
changed lines
  Added in v.2642

  ViewVC Help
Powered by ViewVC 1.1.26