/[escript]/trunk/finley/src/CPPAdapter/MeshAdapter.cpp
ViewVC logotype

Diff of /trunk/finley/src/CPPAdapter/MeshAdapter.cpp

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

trunk/esys2/finley/src/CPPAdapter/MeshAdapter.cpp revision 150 by jgs, Thu Sep 15 03:44:45 2005 UTC trunk/finley/src/CPPAdapter/MeshAdapter.cpp revision 472 by jgs, Fri Jan 27 01:50:59 2006 UTC
# Line 12  Line 12 
12   *                                                                            *   *                                                                            *
13   ******************************************************************************   ******************************************************************************
14  */  */
15  extern "C" {  
16  #include "finley/finleyC/Finley.h"  #include "MeshAdapter.h"
 #include "finley/finleyC/Assemble.h"  
 #include "finley/finleyC/Mesh.h"  
 #include "finley/finleyC/Finley.h"  
 #include "paso/SystemMatrix.h"  
 }  
 #include "finley/CPPAdapter/SystemMatrixAdapter.h"  
 #include "finley/CPPAdapter/MeshAdapter.h"  
 #include "finley/CPPAdapter/FinleyError.h"  
 #include "finley/CPPAdapter/FinleyAdapterException.h"  
 #include "escript/Data/FunctionSpaceFactory.h"  
 #include "escript/Data/Data.h"  
 #include "escript/Data/DataArrayView.h"  
 #include "escript/Data/FunctionSpace.h"  
 #include "escript/Data/DataFactory.h"  
   
 #include <iostream>  
 #include <vector>  
 #include <sstream>  
17    
18  using namespace std;  using namespace std;
19  using namespace escript;  using namespace escript;
# Line 806  void MeshAdapter::setNewX(const Data& ne Line 788  void MeshAdapter::setNewX(const Data& ne
788  }  }
789    
790  // saves a data array in openDX format:  // saves a data array in openDX format:
791  void MeshAdapter::saveDX(const std::string& filename,const Data& arg) const  void MeshAdapter::saveDX(const std::string& filename,const boost::python::dict& arg) const
792  {  {
793    Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),&(arg.getDataC()));      int MAX_namelength=256;
794    checkFinleyError();      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
795        char names[num_data][MAX_namelength];
796        char* c_names[num_data];
797        escriptDataC data[num_data];
798        escriptDataC* ptr_data[num_data];
799    
800        boost::python::list keys=arg.keys();
801        for (int i=0;i<num_data;++i) {
802             Data& d=boost::python::extract<Data&>(arg[keys[i]]);
803             if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)
804                 throw FinleyAdapterException("Error  in saveVTK: Data must be defined on same Domain");
805             data[i]=d.getDataC();
806             ptr_data[i]=&(data[i]);
807             std::string n=boost::python::extract<std::string>(keys[i]);
808             c_names[i]=&(names[i][0]);
809             if (n.length()>MAX_namelength-1) {
810                strncpy(c_names[i],n.c_str(),MAX_namelength-1);
811                c_names[i][MAX_namelength-1]='\0';
812             } else {
813                strcpy(c_names[i],n.c_str());
814             }
815        }
816        Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
817        checkFinleyError();
818        return;
819  }  }
820    
821  // saves a data array in openVTK format:  // saves a data array in openVTK format:
822  void MeshAdapter::saveVTK(const std::string& filename,const Data& arg) const  void MeshAdapter::saveVTK(const std::string& filename,const boost::python::dict& arg) const
823  {  {
824    Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),&(arg.getDataC()));      int MAX_namelength=256;
825    checkFinleyError();      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
826        char names[num_data][MAX_namelength];
827        char* c_names[num_data];
828        escriptDataC data[num_data];
829        escriptDataC* ptr_data[num_data];
830    
831        boost::python::list keys=arg.keys();
832        for (int i=0;i<num_data;++i) {
833             Data& d=boost::python::extract<Data&>(arg[keys[i]]);
834             if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)
835                 throw FinleyAdapterException("Error  in saveVTK: Data must be defined on same Domain");
836             data[i]=d.getDataC();
837             ptr_data[i]=&(data[i]);
838             std::string n=boost::python::extract<std::string>(keys[i]);
839             c_names[i]=&(names[i][0]);
840             if (n.length()>MAX_namelength-1) {
841                strncpy(c_names[i],n.c_str(),MAX_namelength-1);
842                c_names[i][MAX_namelength-1]='\0';
843             } else {
844                strcpy(c_names[i],n.c_str());
845             }
846        }
847        Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
848        checkFinleyError();
849        return;
850  }  }
851                                                                                                                                                                            
852                                                                                                                                                                            
853  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros:  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros:
854  SystemMatrixAdapter MeshAdapter::newSystemMatrix(  SystemMatrixAdapter MeshAdapter::newSystemMatrix(
855                        const int row_blocksize,                        const int row_blocksize,

Legend:
Removed from v.150  
changed lines
  Added in v.472

  ViewVC Help
Powered by ViewVC 1.1.26