From a9e40beb3d7aeb90fccc3fe090d2e28b48c85526 Mon Sep 17 00:00:00 2001 From: Ralf Hartmann Date: Fri, 12 Jan 2001 09:13:52 +0000 Subject: [PATCH] New get_intermediate_points_on_quad functions in Boundary in StraightBoundary classes. Small changes. git-svn-id: https://svn.dealii.org/trunk@3644 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/deal.II/source/grid/tria_boundary.cc | 74 ++++++++++++++++++-- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/deal.II/deal.II/source/grid/tria_boundary.cc b/deal.II/deal.II/source/grid/tria_boundary.cc index d2b6b96df5..002ced7f75 100644 --- a/deal.II/deal.II/source/grid/tria_boundary.cc +++ b/deal.II/deal.II/source/grid/tria_boundary.cc @@ -43,6 +43,16 @@ Boundary::get_intermediate_points_on_line ( }; +template +void +Boundary::get_intermediate_points_on_quad ( + const typename Triangulation::quad_iterator &, + vector > &) const +{ + Assert (false, ExcPureVirtualFunctionCalled()); +}; + + template Point StraightBoundary::get_new_point_on_line (const typename Triangulation::line_iterator &line) const @@ -57,7 +67,7 @@ template Point StraightBoundary::get_new_point_on_quad (const typename Triangulation::quad_iterator &) const { - Assert (false, typename Boundary::ExcPureVirtualFunctionCalled()); + Assert (false, typename Boundary::ExcFunctionNotUseful(dim)); return Point(); }; @@ -80,6 +90,20 @@ StraightBoundary::get_new_point_on_quad (const typename Triangulation: #endif +#if deal_II_dimension < 2 + +template +void +StraightBoundary::get_intermediate_points_on_line ( + const typename Triangulation::line_iterator &, + vector > &) const +{ + Assert(false, typename Boundary::ExcFunctionNotUseful(dim)); +} + + +#else + template void StraightBoundary::get_intermediate_points_on_line ( @@ -88,12 +112,52 @@ StraightBoundary::get_intermediate_points_on_line ( { const unsigned int n=points.size(); Assert(n>0, ExcInternalError()); - const double part=1./(n+1); - double position=part; - for (unsigned int i=0; ivertex(0) + position*line->vertex(1); + const double dx=1./(n+1); + double x=dx; + for (unsigned int i=0; ivertex(0) + x*line->vertex(1); }; +#endif + + + +#if deal_II_dimension < 3 + +template +void +StraightBoundary::get_intermediate_points_on_quad ( + const typename Triangulation::quad_iterator &, + vector > &) const +{ + Assert(false, typename Boundary::ExcFunctionNotUseful(dim)); +} + +#else + +template +void +StraightBoundary::get_intermediate_points_on_quad ( + const typename Triangulation::quad_iterator &quad, + vector > &points) const +{ + const unsigned int n=points.size(), + m=static_cast(sqrt(n)); + // is n a square number + Assert(m*m==n, ExcInternalError()); + const double ds=1./(m+1); + double y=ds; + for (unsigned int i=0; ivertex(0) + x*quad->vertex(1))*(1-y)+ + ((1-x)*quad->vertex(3) + x*quad->vertex(2))*y; + } +} + +#endif + // explicit instantiations template class Boundary; -- 2.39.5