/[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 3546 by jfenwick, Thu Jul 28 01:32:20 2011 UTC revision 3675 by jfenwick, Thu Nov 17 00:53:38 2011 UTC
# Line 11  Line 11 
11  *  *
12  *******************************************************/  *******************************************************/
13    
14    #include <pasowrap/PasoException.h>
15    #include <pasowrap/TransportProblemAdapter.h>
16  #include "MeshAdapter.h"  #include "MeshAdapter.h"
17  #include "escript/Data.h"  #include "escript/Data.h"
18  #include "escript/DataFactory.h"  #include "escript/DataFactory.h"
# Line 26  extern "C" { Line 27  extern "C" {
27    
28  using namespace std;  using namespace std;
29  using namespace escript;  using namespace escript;
30    using namespace paso;
31    
32  namespace finley {  namespace finley {
33    
# Line 872  void MeshAdapter::addPDEToTransportProbl Line 874  void MeshAdapter::addPDEToTransportProbl
874                                             const escript::Data& d_contact,const escript::Data& y_contact,                                             const escript::Data& d_contact,const escript::Data& y_contact,
875                                             const escript::Data& d_dirac, const escript::Data& y_dirac) const                                             const escript::Data& d_dirac, const escript::Data& y_dirac) const
876  {  {
877     TransportProblemAdapter* tpa=dynamic_cast<TransportProblemAdapter*>(&tp);     paso::TransportProblemAdapter* tpa=dynamic_cast<paso::TransportProblemAdapter*>(&tp);
878     if (tpa==0)     if (tpa==0)
879     {     {
880      throw FinleyAdapterException("finley only supports its own transport problems.");      throw FinleyAdapterException("finley only supports its own transport problems.");
# Line 2437  ReferenceElementSetWrapper::~ReferenceEl Line 2439  ReferenceElementSetWrapper::~ReferenceEl
2439    Finley_ReferenceElementSet_dealloc(m_refSet);    Finley_ReferenceElementSet_dealloc(m_refSet);
2440  }  }
2441    
2442  void MeshAdapter:: addDiracPoints(const boost::python::list& points, const boost::python::list& tags) const  // points will be flattened
2443    void MeshAdapter:: addDiracPoints(const std::vector<double>& points, const std::vector<int>& tags) const
2444  {  {
2445        const int dim = getDim();        const int dim = getDim();
2446        int numPoints=boost::python::extract<int>(points.attr("__len__")());        int numPoints=points.size()/dim;
2447        int numTags=boost::python::extract<int>(tags.attr("__len__")());        int numTags=tags.size();
2448        Finley_Mesh* mesh=m_finleyMesh.get();        Finley_Mesh* mesh=m_finleyMesh.get();
2449                
2450          if ( points.size() % dim != 0 )
2451          {
2452        throw FinleyAdapterException("Error - number of coords does not appear to be a multiple of dimension.");
2453          }
2454          
2455        if  ( (numTags > 0) && ( numPoints !=  numTags ) )        if  ( (numTags > 0) && ( numPoints !=  numTags ) )
2456       throw FinleyAdapterException("Error - if tags are given number of tags and points must match.");       throw FinleyAdapterException("Error - if tags are given number of tags and points must match.");
2457                
# Line 2451  void MeshAdapter:: addDiracPoints(const Line 2459  void MeshAdapter:: addDiracPoints(const
2459        int*    tags_ptr= TMPMEMALLOC(numPoints, int);        int*    tags_ptr= TMPMEMALLOC(numPoints, int);
2460                
2461        for (int i=0;i<numPoints;++i) {        for (int i=0;i<numPoints;++i) {
2462         int tag_id=-1;         points_ptr[ i * dim     ] = points[i * dim ];
2463         int numComps=boost::python::extract<int>(points[i].attr("__len__")());         if ( dim > 1 ) points_ptr[ i * dim + 1 ] = points[i * dim + 1];
2464         if  ( numComps !=   dim ) {         if ( dim > 2 ) points_ptr[ i * dim + 2 ] = points[i * dim + 2];    
2465                 stringstream temp;                       tags_ptr[i]=tags[i];
                temp << "Error - illegal number of components " << numComps << " for point " << i;                
                throw FinleyAdapterException(temp.str());  
        }  
        points_ptr[ i * dim     ] = boost::python::extract<double>(points[i][0]);  
        if ( dim > 1 ) points_ptr[ i * dim + 1 ] = boost::python::extract<double>(points[i][1]);  
        if ( dim > 2 ) points_ptr[ i * dim + 2 ] = boost::python::extract<double>(points[i][2]);  
         
        if ( numTags > 0) {  
               boost::python::extract<string> ex_str(tags[i]);  
           if  ( ex_str.check() ) {  
               tag_id=getTag( ex_str());  
           } else {  
                boost::python::extract<int> ex_int(tags[i]);  
                if ( ex_int.check() ) {  
                    tag_id=ex_int();  
                } else {  
                 stringstream temp;            
                     temp << "Error - unable to extract tag for point " << i;  
                 throw FinleyAdapterException(temp.str());  
               }  
           }  
        }        
            tags_ptr[i]=tag_id;  
2466        }        }
2467                
2468        Finley_Mesh_addPoints(mesh, numPoints, points_ptr, tags_ptr);        Finley_Mesh_addPoints(mesh, numPoints, points_ptr, tags_ptr);
# Line 2487  void MeshAdapter:: addDiracPoints(const Line 2472  void MeshAdapter:: addDiracPoints(const
2472        TMPMEMFREE(tags_ptr);        TMPMEMFREE(tags_ptr);
2473  }  }
2474    
2475    
2476    // void MeshAdapter:: addDiracPoints(const boost::python::list& points, const boost::python::list& tags) const
2477    // {
2478    //       const int dim = getDim();
2479    //       int numPoints=boost::python::extract<int>(points.attr("__len__")());
2480    //       int numTags=boost::python::extract<int>(tags.attr("__len__")());
2481    //       Finley_Mesh* mesh=m_finleyMesh.get();
2482    //      
2483    //       if  ( (numTags > 0) && ( numPoints !=  numTags ) )
2484    //   throw FinleyAdapterException("Error - if tags are given number of tags and points must match.");
2485    //      
2486    //       double* points_ptr=TMPMEMALLOC(numPoints * dim, double);
2487    //       int*    tags_ptr= TMPMEMALLOC(numPoints, int);
2488    //      
2489    //       for (int i=0;i<numPoints;++i) {
2490    //     int tag_id=-1;
2491    //     int numComps=boost::python::extract<int>(points[i].attr("__len__")());
2492    //     if  ( numComps !=   dim ) {
2493    //                stringstream temp;            
2494    //                temp << "Error - illegal number of components " << numComps << " for point " << i;              
2495    //                throw FinleyAdapterException(temp.str());
2496    //     }
2497    //     points_ptr[ i * dim     ] = boost::python::extract<double>(points[i][0]);
2498    //     if ( dim > 1 ) points_ptr[ i * dim + 1 ] = boost::python::extract<double>(points[i][1]);
2499    //     if ( dim > 2 ) points_ptr[ i * dim + 2 ] = boost::python::extract<double>(points[i][2]);
2500    //    
2501    //     if ( numTags > 0) {
2502    //            boost::python::extract<string> ex_str(tags[i]);
2503    //        if  ( ex_str.check() ) {
2504    //            tag_id=getTag( ex_str());
2505    //        } else {
2506    //             boost::python::extract<int> ex_int(tags[i]);
2507    //             if ( ex_int.check() ) {
2508    //                 tag_id=ex_int();
2509    //             } else {
2510    //              stringstream temp;          
2511    //                  temp << "Error - unable to extract tag for point " << i;
2512    //              throw FinleyAdapterException(temp.str());
2513    //            }
2514    //        }
2515    //     }      
2516    //            tags_ptr[i]=tag_id;
2517    //       }
2518    //      
2519    //       Finley_Mesh_addPoints(mesh, numPoints, points_ptr, tags_ptr);
2520    //       checkPasoError();
2521    //      
2522    //       TMPMEMFREE(points_ptr);
2523    //       TMPMEMFREE(tags_ptr);
2524    // }
2525    
2526    /*
2527  void MeshAdapter:: addDiracPoint( const boost::python::list& point, const int tag) const  void MeshAdapter:: addDiracPoint( const boost::python::list& point, const int tag) const
2528  {    {  
2529      boost::python::list points =  boost::python::list();      boost::python::list points =  boost::python::list();
# Line 2495  void MeshAdapter:: addDiracPoint( const Line 2532  void MeshAdapter:: addDiracPoint( const
2532      tags.append(tag);      tags.append(tag);
2533      addDiracPoints(points, tags);      addDiracPoints(points, tags);
2534  }  }
2535    */
2536    
2537    /*
2538  void MeshAdapter:: addDiracPointWithTagName( const boost::python::list& point, const std::string& tag) const  void MeshAdapter:: addDiracPointWithTagName( const boost::python::list& point, const std::string& tag) const
2539  {  {
2540          boost::python::list points =   boost::python::list();          boost::python::list points =   boost::python::list();
# Line 2502  void MeshAdapter:: addDiracPointWithTagN Line 2542  void MeshAdapter:: addDiracPointWithTagN
2542          points.append(point);          points.append(point);
2543          tags.append(tag);          tags.append(tag);
2544          addDiracPoints(points, tags);          addDiracPoints(points, tags);
2545  }    }
2546    */
2547  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.3546  
changed lines
  Added in v.3675

  ViewVC Help
Powered by ViewVC 1.1.26