diff --git a/dumux/discretization/rotationsymmetricscv.hh b/dumux/discretization/rotationsymmetricscv.hh index 0870dc6445d0691687729e7cd7864b87dd6eb7c0..4bb912b8e37fb4fb7b33580bdb91e1e274775bbc 100644 --- a/dumux/discretization/rotationsymmetricscv.hh +++ b/dumux/discretization/rotationsymmetricscv.hh @@ -113,7 +113,7 @@ public: //! The volume of the sub control volume (Guldinus theorem) Scalar volume() const { - const auto radius = this->center()[1]; + const auto radius = this->center()[0]; return SubControlVolume::volume()*2.0*M_PI*radius; } }; diff --git a/dumux/discretization/rotationsymmetricscvf.hh b/dumux/discretization/rotationsymmetricscvf.hh index 5075fedf5dc41cdd1baf18fcabf276860c1b3d51..97e9840840ad589ed8ad73bf2a5ae687fddaa1e9 100644 --- a/dumux/discretization/rotationsymmetricscvf.hh +++ b/dumux/discretization/rotationsymmetricscvf.hh @@ -109,7 +109,7 @@ public: //! The area of the sub control volume face (Guldinus theorem) Scalar area() const { - const auto radius = this->center()[1]; + const auto radius = this->center()[0]; return SubControlVolumeFace::area()*2.0*M_PI*radius; } }; diff --git a/test/discretization/rotationsymmetry/test_rotationsymmetric_gridgeometry.cc b/test/discretization/rotationsymmetry/test_rotationsymmetric_gridgeometry.cc index b400bd8ec3197ffbe25eb9fde86ed845f8e03b84..e2ad89d1bbe23e938b8d5a20b2e22ed385a517be 100644 --- a/test/discretization/rotationsymmetry/test_rotationsymmetric_gridgeometry.cc +++ b/test/discretization/rotationsymmetry/test_rotationsymmetric_gridgeometry.cc @@ -140,8 +140,9 @@ int main (int argc, char *argv[]) try // make a grid const double innerRadius = 0.1; const double outerRadius = 1.0; - GlobalPosition lower({innerRadius, innerRadius}); - GlobalPosition upper({outerRadius, outerRadius}); + const double height = 0.5; + GlobalPosition lower({innerRadius, 0}); + GlobalPosition upper({outerRadius, height}); std::array<unsigned int, Grid::dimension> els({20, 20}); std::shared_ptr<Grid> grid = Dune::StructuredGridFactory<Grid>::createCubeGrid(lower, upper, els); @@ -152,9 +153,9 @@ int main (int argc, char *argv[]) try // compute the annulus area and the surface const auto centroidRadius = 0.5*(innerRadius + outerRadius); - const auto side = (outerRadius - innerRadius); - const double refVolume = side*side*2.0*M_PI*centroidRadius; - const double refSurface = 4.0*side*2.0*M_PI*centroidRadius; + const auto width = (outerRadius - innerRadius); + const double refVolume = height*width*2.0*M_PI*centroidRadius; + const double refSurface = (2.0*height + 2.0*width)*2.0*M_PI*centroidRadius; runTest(gg, refVolume, refSurface); std::cout << "Successfully tested toroid policy." << std::endl; @@ -170,9 +171,11 @@ int main (int argc, char *argv[]) try // make a grid const double innerRadius = 0.0; - const double outerRadius = 1.0; - GlobalPosition lower({innerRadius, innerRadius}); - GlobalPosition upper({outerRadius, outerRadius}); + const double outerRadius = 1.1; + const double minY = -0.25; + const double height = 0.5; + GlobalPosition lower({innerRadius, minY}); + GlobalPosition upper({outerRadius, minY+height}); std::array<unsigned int, Grid::dimension> els({20, 20}); std::shared_ptr<Grid> grid = Dune::StructuredGridFactory<Grid>::createCubeGrid(lower, upper, els); @@ -182,8 +185,8 @@ int main (int argc, char *argv[]) try gg.update(); // compute the annulus area and the surface - const double refVolume = outerRadius*M_PI*outerRadius*outerRadius; - const double refSurface = 2.0*M_PI*outerRadius + 2.0*M_PI*outerRadius*outerRadius; + const double refVolume = height*M_PI*outerRadius*outerRadius; + const double refSurface = 2.0*M_PI*outerRadius*height + 2.0*M_PI*outerRadius*outerRadius; runTest(gg, refVolume, refSurface); std::cout << "Successfully tested toroid policy for perfect cylinder." << std::endl;