/[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

revision 3344 by caltinay, Thu Nov 11 23:26:52 2010 UTC revision 3515 by gross, Thu May 19 08:20:57 2011 UTC
# Line 23  extern "C" { Line 23  extern "C" {
23  }  }
24    
25  #include <boost/python/import.hpp>  #include <boost/python/import.hpp>
 #include <boost/python/tuple.hpp>  
26    
27  using namespace std;  using namespace std;
28  using namespace escript;  using namespace escript;
# Line 806  void MeshAdapter::addPDEToSystem( Line 805  void MeshAdapter::addPDEToSystem(
805  void  MeshAdapter::addPDEToLumpedSystem(  void  MeshAdapter::addPDEToLumpedSystem(
806                                          escript::Data& mat,                                          escript::Data& mat,
807                                          const escript::Data& D,                                          const escript::Data& D,
808                                          const escript::Data& d) const                                          const escript::Data& d,
809                                            const bool useHRZ) const
810  {  {
811     escriptDataC _mat=mat.getDataC();     escriptDataC _mat=mat.getDataC();
812     escriptDataC _D=D.getDataC();     escriptDataC _D=D.getDataC();
# Line 814  void  MeshAdapter::addPDEToLumpedSystem( Line 814  void  MeshAdapter::addPDEToLumpedSystem(
814    
815     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
816    
817     Finley_Assemble_LumpedSystem(mesh->Nodes,mesh->Elements,&_mat, &_D);     Finley_Assemble_LumpedSystem(mesh->Nodes,mesh->Elements,&_mat, &_D, useHRZ);
818     checkFinleyError();     checkFinleyError();
819        
820     Finley_Assemble_LumpedSystem(mesh->Nodes,mesh->FaceElements,&_mat, &_d);     Finley_Assemble_LumpedSystem(mesh->Nodes,mesh->FaceElements,&_mat, &_d, useHRZ);
821     checkFinleyError();     checkFinleyError();
822    
823  }  }
# Line 1075  void MeshAdapter::interpolateOnDomain(es Line 1075  void MeshAdapter::interpolateOnDomain(es
1075        break;        break;
1076        case(Points):        case(Points):
1077        if (getMPISize()>1) {        if (getMPISize()>1) {
1078           escript::Data temp=escript::Data( in,  continuousFunction(*this) );           //escript::Data temp=escript::Data( in,  continuousFunction(*this) );
1079           escriptDataC _in2 = temp.getDataC();           //escriptDataC _in2 = temp.getDataC();
1080        } else {        } else {
1081           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in,&_target);
1082        }        }
# Line 1549  void MeshAdapter::saveDX(const string& f Line 1549  void MeshAdapter::saveDX(const string& f
1549  //  //
1550  void MeshAdapter::saveVTK(const string& filename,const boost::python::dict& arg,  const string& metadata, const string& metadata_schema) const  void MeshAdapter::saveVTK(const string& filename,const boost::python::dict& arg,  const string& metadata, const string& metadata_schema) const
1551  {  {
1552      boost::python::object pySaveVTK = boost::python::import("esys.weipa").attr("saveVTK");      boost::python::object pySaveVTK = boost::python::import("esys.weipa").attr("_saveVTK");
1553      pySaveVTK(*boost::python::make_tuple(filename,      pySaveVTK(filename, const_cast<MeshAdapter*>(this)->getPtr(),
1554                 const_cast<MeshAdapter*>(this)->getPtr(),                metadata, metadata_schema, arg);
                metadata, metadata_schema), **arg);  
1555  }  }
1556    
1557  bool MeshAdapter::ownSample(int fs_code, index_t id) const  bool MeshAdapter::ownSample(int fs_code, index_t id) const
# Line 2414  ReferenceElementSetWrapper::~ReferenceEl Line 2413  ReferenceElementSetWrapper::~ReferenceEl
2413    Finley_ReferenceElementSet_dealloc(m_refSet);    Finley_ReferenceElementSet_dealloc(m_refSet);
2414  }  }
2415    
2416    void MeshAdapter:: addDiracPoints(const boost::python::list& points, const boost::python::list& tags) const
2417    {
2418          const int dim = getDim();
2419          int numPoints=boost::python::extract<int>(points.attr("__len__")());
2420          int numTags=boost::python::extract<int>(tags.attr("__len__")());
2421          Finley_Mesh* mesh=m_finleyMesh.get();
2422          
2423          if  ( (numTags > 0) and ( numPoints !=  numTags ) )
2424         throw FinleyAdapterException("Error - if tags are given number of tags and points must match.");
2425          
2426          double* points_ptr=TMPMEMALLOC(numPoints * dim, double);
2427          int*    tags_ptr= TMPMEMALLOC(numPoints, int);
2428          
2429          for (int i=0;i<numPoints;++i) {
2430           int tag_id=-1;
2431           int numComps=boost::python::extract<int>(points[i].attr("__len__")());
2432           if  ( numComps !=   dim ) {
2433                   stringstream temp;          
2434                   temp << "Error - illegal number of components " << numComps << " for point " << i;              
2435                   throw FinleyAdapterException(temp.str());
2436           }
2437           points_ptr[ i * dim     ] = boost::python::extract<double>(points[i][0]);
2438           if ( dim > 1 ) points_ptr[ i * dim + 1 ] = boost::python::extract<double>(points[i][1]);
2439           if ( dim > 2 ) points_ptr[ i * dim + 2 ] = boost::python::extract<double>(points[i][2]);
2440          
2441           if ( numTags > 0) {
2442                  boost::python::extract<string> ex_str(tags[i]);
2443              if  ( ex_str.check() ) {
2444                  tag_id=getTag( ex_str());
2445              } else {
2446                   boost::python::extract<int> ex_int(tags[i]);
2447                   if ( ex_int.check() ) {
2448                       tag_id=ex_int();
2449                   } else {
2450                    stringstream temp;          
2451                        temp << "Error - unable to extract tag for point " << i;
2452                    throw FinleyAdapterException(temp.str());
2453                  }
2454              }
2455           }      
2456               tags_ptr[i]=tag_id;
2457          }
2458          
2459          Finley_Mesh_addPoints(mesh, numPoints, points_ptr, tags_ptr);
2460          checkPasoError();
2461          
2462          TMPMEMFREE(points_ptr);
2463          TMPMEMFREE(tags_ptr);
2464    }
2465    
2466    void MeshAdapter:: addDiracPoint( const boost::python::list& point, const int tag) const
2467    {  
2468        boost::python::list points =  boost::python::list();
2469        boost::python::list tags =  boost::python::list();
2470        points.append(point);
2471        tags.append(tag);
2472        addDiracPoints(points, tags);
2473    }
2474    void MeshAdapter:: addDiracPointWithTagName( const boost::python::list& point, const std::string& tag) const
2475    {
2476            boost::python::list points =   boost::python::list();
2477            boost::python::list tags =   boost::python::list();
2478            points.append(point);
2479            tags.append(tag);
2480            addDiracPoints(points, tags);
2481    }  
2482  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.3344  
changed lines
  Added in v.3515

  ViewVC Help
Powered by ViewVC 1.1.26