1 #ifndef PSURFACE_BOUNDARY_HH
2 #define PSURFACE_BOUNDARY_HH
7 #include "../../../common/gridfactory.hh"
10 #include <psurface/PSurface.h>
25 class PSurfaceBoundary
27 dune_static_assert((dim==1 or dim==2),
"PSurfaceBoundaries can only have dimensions 1 or 2!");
41 PSurfaceBoundarySegment(
const shared_ptr<PSurfaceBoundary<dim> >& psurfaceBoundary,
int segment)
42 : psurfaceBoundary_(psurfaceBoundary),
47 virtual Dune::FieldVector<double, dim+1> operator()(
const Dune::FieldVector<double,dim>& local)
const {
49 Dune::FieldVector<double, dim+1> result;
52 PSURFACE_NAMESPACE StaticVector<float,dim> barCoords;
55 barCoords[0] = 1 - local[0] - local[1];
56 barCoords[1] = local[0];
58 barCoords[0] = 1 - local[0];
61 PSURFACE_NAMESPACE StaticVector<float,dim+1> r;
63 if (!psurfaceBoundary_->getPSurfaceObject()->positionMap(segment_, barCoords, r))
64 DUNE_THROW(
Dune::GridError,
"psurface::positionMap returned error code");
66 for (
int i=0; i<dim+1; i++)
72 shared_ptr<PSurfaceBoundary<dim> > psurfaceBoundary_;
79 PSurfaceBoundary(PSURFACE_NAMESPACE PSurface<dim,float>* psurface)
90 PSURFACE_NAMESPACE PSurface<dim,float>* getPSurfaceObject()
92 return psurface_.get();
97 std::auto_ptr<PSURFACE_NAMESPACE PSurface<dim,float> > psurface_;
103 #endif // #if HAVE_PSURFACE
104 #endif // #ifndef PSURFACE_BOUNDARY_HH