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

Diff of /branches/diaplayground/finley/src/CPPAdapter/MeshAdapter.cpp

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

revision 3514 by caltinay, Wed Mar 30 02:24:33 2011 UTC revision 3515 by gross, Thu May 19 08:20:57 2011 UTC
# Line 2413  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.3514  
changed lines
  Added in v.3515

  ViewVC Help
Powered by ViewVC 1.1.26