/[escript]/branches/lapack2681/escript/src/DataConstant.cpp
ViewVC logotype

Diff of /branches/lapack2681/escript/src/DataConstant.cpp

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

trunk/escript/src/DataConstant.cpp revision 1141 by gross, Tue May 15 04:24:51 2007 UTC temp_trunk_copy/escript/src/DataConstant.cpp revision 1384 by phornby, Fri Jan 11 02:29:38 2008 UTC
# Line 1  Line 1 
1  //$Id$  
2  /*  /* $Id$ */
3   ************************************************************  
4   *          Copyright 2006 by ACcESS MNRF                   *  /*******************************************************
5   *                                                          *   *
6   *              http://www.access.edu.au                    *   *           Copyright 2003-2007 by ACceSS MNRF
7   *       Primary Business: Queensland, Australia            *   *       Copyright 2007 by University of Queensland
8   *  Licensed under the Open Software License version 3.0    *   *
9   *     http://www.opensource.org/licenses/osl-3.0.php       *   *                http://esscc.uq.edu.au
10   *                                                          *   *        Primary Business: Queensland, Australia
11   ************************************************************   *  Licensed under the Open Software License version 3.0
12  */   *     http://www.opensource.org/licenses/osl-3.0.php
13     *
14     *******************************************************/
15    
16  #include "DataConstant.h"  #include "DataConstant.h"
17  #include "DataException.h"  #include "DataException.h"
# Line 18  Line 20 
20  #include <iostream>  #include <iostream>
21  #include <boost/python/extract.hpp>  #include <boost/python/extract.hpp>
22  #ifdef USE_NETCDF  #ifdef USE_NETCDF
23  #include "netcdfcpp.h"  #include <netcdfcpp.h>
24  #endif  #endif
25    
26    #include <boost/python/extract.hpp>
27    
28  using namespace std;  using namespace std;
29    using namespace boost::python;
30    
31  namespace escript {  namespace escript {
32    
# Line 29  DataConstant::DataConstant(const boost:: Line 34  DataConstant::DataConstant(const boost::
34                             const FunctionSpace& what)                             const FunctionSpace& what)
35    : DataAbstract(what)    : DataAbstract(what)
36  {  {
37    DataArray temp(value);    // extract the shape of the numarray
38      DataArrayView::ShapeType tempShape;
39      for (int i=0; i < value.getrank(); i++) {
40        tempShape.push_back(extract<int>(value.getshape()[i]));
41      }
42    
43      // get the space for the data vector
44      int len = DataArrayView::noValues(tempShape);
45      DataVector temp_data(len, 0.0, len);
46      DataArrayView temp_dataView(temp_data, tempShape);
47      temp_dataView.copy(value);
48    
49    //    //
50    // copy the data in the correct format    // copy the data in the correct format
51    m_data=temp.getData();    m_data=temp_data;
52    //    //
53    // create the view of the data    // create the view of the data
54    DataArrayView tempView(m_data,temp.getView().getShape());    DataArrayView tempView(m_data,temp_dataView.getShape());
55    setPointDataView(tempView);    setPointDataView(tempView);
56  }  }
57    
# Line 54  DataConstant::DataConstant(const DataArr Line 70  DataConstant::DataConstant(const DataArr
70    
71  DataConstant::DataConstant(const DataConstant& other)  DataConstant::DataConstant(const DataConstant& other)
72    : DataAbstract(other.getFunctionSpace())    : DataAbstract(other.getFunctionSpace())
73  {  //  {  //
74    // copy the data in the correct format    // copy the data in the correct format
75    m_data=other.m_data;    m_data=other.m_data;
76    //    //
# Line 131  DataConstant::getDataPoint(int sampleNo, Line 147  DataConstant::getDataPoint(int sampleNo,
147    // Whatever the coord's always return the same value as this is constant data.    // Whatever the coord's always return the same value as this is constant data.
148    return getPointDataView();    return getPointDataView();
149  }  }
150      
151  DataAbstract*  DataAbstract*
152  DataConstant::getSlice(const DataArrayView::RegionType& region) const  DataConstant::getSlice(const DataArrayView::RegionType& region) const
153  {  {
# Line 140  DataConstant::getSlice(const DataArrayVi Line 156  DataConstant::getSlice(const DataArrayVi
156    
157  void  void
158  DataConstant::setSlice(const DataAbstract* value,  DataConstant::setSlice(const DataAbstract* value,
159                         const DataArrayView::RegionType& region)                         const DataArrayView::RegionType& region)
160  {  {
161    const DataConstant* tempDataConst=dynamic_cast<const DataConstant*>(value);    const DataConstant* tempDataConst=dynamic_cast<const DataConstant*>(value);
162    if (tempDataConst==0) {    if (tempDataConst==0) {
163      throw DataException("Programming error - casting to DataConstant.");      throw DataException("Programming error - casting to DataConstant.");
164    }    }
165    //    //
166    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));    DataArrayView::ShapeType shape(DataArrayView::getResultSliceShape(region));
167    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);    DataArrayView::RegionLoopRangeType region_loop_range=getSliceRegionLoopRange(region);
168    //    //
# Line 276  void Line 292  void
292  DataConstant::dump(const std::string fileName) const  DataConstant::dump(const std::string fileName) const
293  {  {
294     #ifdef PASO_MPI     #ifdef PASO_MPI
295     throw DataException("Error - DataConstant:: dump is not implemented for MPI yet.")     throw DataException("Error - DataConstant:: dump is not implemented for MPI yet.");
296     #endif     #endif
297     #ifdef USE_NETCD     #ifdef USE_NETCDF
298     const NcDim* ncdims[DataArrayView::maxRank];     const NcDim* ncdims[DataArrayView::maxRank];
299     NcVar* var;     NcVar* var;
300     int rank = getPointDataView().getRank();     int rank = getPointDataView().getRank();
# Line 287  DataConstant::dump(const std::string fil Line 303  DataConstant::dump(const std::string fil
303     long dims[DataArrayView::maxRank];     long dims[DataArrayView::maxRank];
304     const double* d_ptr=&(m_data[0]);     const double* d_ptr=&(m_data[0]);
305     DataArrayView::ShapeType shape = getPointDataView().getShape();     DataArrayView::ShapeType shape = getPointDataView().getShape();
306      
307     // netCDF error handler     // netCDF error handler
308     NcError err(NcError::verbose_nonfatal);     NcError err(NcError::verbose_nonfatal);
309     // Create the file.     // Create the file.
310     NcFile dataFile(fileName.c_str(), NcFile::Replace);     NcFile dataFile(fileName.c_str(), NcFile::Replace);
311     // check if writing was successful     // check if writing was successful
312     if (!dataFile.is_valid())     if (!dataFile.is_valid())
313      throw DataException("Error - DataConstant:: opening of netCDF file for output failed.");      throw DataException("Error - DataConstant:: opening of netCDF file for output failed.");
314     if (!dataFile.add_att("type_id",0) )     if (!dataFile.add_att("type_id",0) )
315      throw DataException("Error - DataConstant:: appending data type to netCDF file failed.");      throw DataException("Error - DataConstant:: appending data type to netCDF file failed.");
316     if (!dataFile.add_att("rank",rank) )     if (!dataFile.add_att("rank",rank) )
317      throw DataException("Error - DataConstant:: appending rank attribute to netCDF file failed.");      throw DataException("Error - DataConstant:: appending rank attribute to netCDF file failed.");
318     if (!dataFile.add_att("function_space_type",type))     if (!dataFile.add_att("function_space_type",type))
319      throw DataException("Error - DataConstant:: appending function space attribute to netCDF file failed.");      throw DataException("Error - DataConstant:: appending function space attribute to netCDF file failed.");
320    
321     if (rank == 0) {     if (rank == 0) {
322        if( ! (ncdims[0] = dataFile.add_dim("l", 1)) )        if( ! (ncdims[0] = dataFile.add_dim("l", 1)) )
323          throw DataException("Error - DataConstant:: appending ncdimsion 0 to netCDF file failed.");          throw DataException("Error - DataConstant:: appending ncdimsion 0 to netCDF file failed.");
324        dims[0]=1,        dims[0]=1,
325        ndims=1;        ndims=1;
326     } else {     } else {
327         ndims=rank;         ndims=rank;
328         dims[0]=shape[0];         dims[0]=shape[0];
329         if (! (ncdims[0] = dataFile.add_dim("d0",shape[0])) )         if (! (ncdims[0] = dataFile.add_dim("d0",shape[0])) )
330          throw DataException("Error - DataConstant:: appending ncdimsion 0 to netCDF file failed.");          throw DataException("Error - DataConstant:: appending ncdimsion 0 to netCDF file failed.");
331         if ( rank >1 ) {         if ( rank >1 ) {
332             dims[1]=shape[1];             dims[1]=shape[1];
333             if (! (ncdims[1] = dataFile.add_dim("d1",shape[1])) )             if (! (ncdims[1] = dataFile.add_dim("d1",shape[1])) )
334          throw DataException("Error - DataConstant:: appending ncdimsion 1 to netCDF file failed.");          throw DataException("Error - DataConstant:: appending ncdimsion 1 to netCDF file failed.");
335         }         }
336         if ( rank >2 ) {         if ( rank >2 ) {
337             dims[2]=shape[2];             dims[2]=shape[2];
338             if (! (ncdims[2] = dataFile.add_dim("d2", shape[2])) )             if (! (ncdims[2] = dataFile.add_dim("d2", shape[2])) )
339          throw DataException("Error - DataConstant:: appending ncdimsion 2 to netCDF file failed.");          throw DataException("Error - DataConstant:: appending ncdimsion 2 to netCDF file failed.");
340         }         }
341         if ( rank >3 ) {         if ( rank >3 ) {
342             dims[3]=shape[3];             dims[3]=shape[3];
343             if (! (ncdims[3] = dataFile.add_dim("d3", shape[3])) )             if (! (ncdims[3] = dataFile.add_dim("d3", shape[3])) )
344          throw DataException("Error - DataConstant:: appending ncdimsion 3 to netCDF file failed.");          throw DataException("Error - DataConstant:: appending ncdimsion 3 to netCDF file failed.");
345         }         }
346     }     }
347      
348     if (! ( var = dataFile.add_var("data", ncDouble, ndims, ncdims)) )     if (! ( var = dataFile.add_var("data", ncDouble, ndims, ncdims)) )
349      throw DataException("Error - DataConstant:: appending variable to netCDF file failed.");      throw DataException("Error - DataConstant:: appending variable to netCDF file failed.");
350     if (! (var->put(d_ptr,dims)) )     if (! (var->put(d_ptr,dims)) )
351           throw DataException("Error - DataConstant:: copy data to netCDF buffer failed.");           throw DataException("Error - DataConstant:: copy data to netCDF buffer failed.");
352     #else     #else
353     throw DataException("Error - DataConstant:: dump is not configured with netCDF. Please contact your installation manager.");     throw DataException("Error - DataConstant:: dump is not configured with netCDF. Please contact your installation manager.");
354     #endif     #endif

Legend:
Removed from v.1141  
changed lines
  Added in v.1384

  ViewVC Help
Powered by ViewVC 1.1.26