/[escript]/branches/domexper/dudley/src/CPPAdapter/MeshAdapter.cpp
ViewVC logotype

Diff of /branches/domexper/dudley/src/CPPAdapter/MeshAdapter.cpp

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

revision 152 by jgs, Thu Sep 15 03:44:45 2005 UTC revision 153 by jgs, Tue Oct 25 01:51:20 2005 UTC
# Line 28  extern "C" { Line 28  extern "C" {
28  #include "escript/Data/DataArrayView.h"  #include "escript/Data/DataArrayView.h"
29  #include "escript/Data/FunctionSpace.h"  #include "escript/Data/FunctionSpace.h"
30  #include "escript/Data/DataFactory.h"  #include "escript/Data/DataFactory.h"
31    #include <boost/python/extract.hpp>
32    
33  #include <iostream>  #include <iostream>
 #include <vector>  
34  #include <sstream>  #include <sstream>
35    
36  using namespace std;  using namespace std;
# Line 806  void MeshAdapter::setNewX(const Data& ne Line 806  void MeshAdapter::setNewX(const Data& ne
806  }  }
807    
808  // saves a data array in openDX format:  // saves a data array in openDX format:
809  void MeshAdapter::saveDX(const std::string& filename,const Data& arg) const  void MeshAdapter::saveDX(const std::string& filename,const boost::python::dict& arg) const
810  {  {
811    Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),&(arg.getDataC()));      int MAX_namelength=256;
812    checkFinleyError();      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
813        char names[num_data][MAX_namelength];
814        char* c_names[num_data];
815        escriptDataC data[num_data];
816        escriptDataC* ptr_data[num_data];
817    
818        boost::python::list keys=arg.keys();
819        for (int i=0;i<num_data;++i) {
820             Data& d=boost::python::extract<Data&>(arg[keys[i]]);
821             if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)
822                 throw FinleyAdapterException("Error  in saveVTK: Data must be defined on same Domain");
823             data[i]=d.getDataC();
824             ptr_data[i]=&(data[i]);
825             std::string n=boost::python::extract<std::string>(keys[i]);
826             c_names[i]=&(names[i][0]);
827             if (n.length()>MAX_namelength-1) {
828                strncpy(c_names[i],n.c_str(),MAX_namelength-1);
829                c_names[i][MAX_namelength-1]='\0';
830             } else {
831                strcpy(c_names[i],n.c_str());
832             }
833        }
834        Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
835        checkFinleyError();
836        return;
837  }  }
838    
839  // saves a data array in openVTK format:  // saves a data array in openVTK format:
840  void MeshAdapter::saveVTK(const std::string& filename,const Data& arg) const  void MeshAdapter::saveVTK(const std::string& filename,const boost::python::dict& arg) const
841  {  {
842    Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),&(arg.getDataC()));      int MAX_namelength=256;
843    checkFinleyError();      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
844        char names[num_data][MAX_namelength];
845        char* c_names[num_data];
846        escriptDataC data[num_data];
847        escriptDataC* ptr_data[num_data];
848    
849        boost::python::list keys=arg.keys();
850        for (int i=0;i<num_data;++i) {
851             Data& d=boost::python::extract<Data&>(arg[keys[i]]);
852             if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)
853                 throw FinleyAdapterException("Error  in saveVTK: Data must be defined on same Domain");
854             data[i]=d.getDataC();
855             ptr_data[i]=&(data[i]);
856             std::string n=boost::python::extract<std::string>(keys[i]);
857             c_names[i]=&(names[i][0]);
858             if (n.length()>MAX_namelength-1) {
859                strncpy(c_names[i],n.c_str(),MAX_namelength-1);
860                c_names[i][MAX_namelength-1]='\0';
861             } else {
862                strcpy(c_names[i],n.c_str());
863             }
864        }
865        Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
866        checkFinleyError();
867        return;
868  }  }
869                                                                                                                                                                            
870                                                                                                                                                                            
871  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros:  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros:
872  SystemMatrixAdapter MeshAdapter::newSystemMatrix(  SystemMatrixAdapter MeshAdapter::newSystemMatrix(
873                        const int row_blocksize,                        const int row_blocksize,

Legend:
Removed from v.152  
changed lines
  Added in v.153

  ViewVC Help
Powered by ViewVC 1.1.26