diff --git a/dumux/assembly/fvassembler.hh b/dumux/assembly/fvassembler.hh index 3195589c599e6f61cd17e8b821dade9b4b3a914b..efc3cf647e76efe2eb86f42e55839efa6a6fe544 100644 --- a/dumux/assembly/fvassembler.hh +++ b/dumux/assembly/fvassembler.hh @@ -170,7 +170,7 @@ public: // issue a warning if the caluclation is used in parallel with overlap static bool warningIssued = false; - if (gridView().overlapSize(0) == 0) + if (gridView().comm().size() > 1 && gridView().overlapSize(0) == 0) { if constexpr (isBox) { diff --git a/dumux/multidomain/fvassembler.hh b/dumux/multidomain/fvassembler.hh index 0b94c8eb018ba6dce38b67f9016a6185123ae6f2..656a8ce65819576b7d775e0712d5437244884d5d 100644 --- a/dumux/multidomain/fvassembler.hh +++ b/dumux/multidomain/fvassembler.hh @@ -239,7 +239,7 @@ public: const auto gridGeometry = std::get<domainId>(gridGeometryTuple_); const auto& gridView = gridGeometry->gridView(); - if (gridView.overlapSize(0) == 0) + if (gridView.comm().size() && gridView.overlapSize(0) == 0) { if constexpr (GridGeometry<domainId>::discMethod == DiscretizationMethod::box) { diff --git a/test/porousmediumflow/1p/incompressible/CMakeLists.txt b/test/porousmediumflow/1p/incompressible/CMakeLists.txt index 9eac64ac66d7312a9f2a8bca7ed142051abee048..02adbcc24585db8f2d13c44769a9fdaea54a2f93 100644 --- a/test/porousmediumflow/1p/incompressible/CMakeLists.txt +++ b/test/porousmediumflow/1p/incompressible/CMakeLists.txt @@ -145,3 +145,11 @@ dumux_add_test(NAME test_1p_incompressible_mpfa_extrude_distorted -Problem.CheckIsConstantVelocity true -Problem.EnableGravity false -Grid.File ./grids/randomlydistorted.dgf) + +# check grids without communicate method (using box and numeric differentiation) +dumux_add_test(NAME test_1p_incompressible_box_numdiff_no_communicate + LABELS porousmediumflow 1p + SOURCES main.cc + COMPILE_DEFINITIONS TYPETAG=OnePIncompressibleBox NUMDIFFMETHOD=DiffMethod::numeric GRIDTYPE=Dumux::NoCommunicateGrid<2> + COMMAND ./test_1p_incompressible_box_numdiff_no_communicate + CMD_ARGS -Grid.Overlap 0) diff --git a/test/porousmediumflow/1p/incompressible/main.cc b/test/porousmediumflow/1p/incompressible/main.cc index 3f8e191a6cd493c0997fc8d9b5c5ff82ea568d97..f0d7a5e666cc11a9814ac82f9a44567c8971127c 100644 --- a/test/porousmediumflow/1p/incompressible/main.cc +++ b/test/porousmediumflow/1p/incompressible/main.cc @@ -149,6 +149,9 @@ int main(int argc, char** argv) // output result to vtk vtkWriter.write(1.0); + // output residual norm (test assembler interface) + std::cout << "Residual norm: " << assembler->residualNorm(x) << std::endl; + timer.stop(); const bool checkIsConstantVelocity = getParam<bool>("Problem.CheckIsConstantVelocity", false); diff --git a/test/porousmediumflow/1p/incompressible/properties.hh b/test/porousmediumflow/1p/incompressible/properties.hh index d333cff6fa25cd4a5a02c058b41585b11716afa6..7df2043848a99e25dc9b7a29e0414efef3b00ffd 100644 --- a/test/porousmediumflow/1p/incompressible/properties.hh +++ b/test/porousmediumflow/1p/incompressible/properties.hh @@ -50,6 +50,67 @@ #define GRIDTYPE Dune::YaspGrid<2> #endif +//////////////////////////////////////////////////// +// A fake grid that cannot communicate. // +// Can be used to make sure that compilation and // +// sequential execution also work for such grids. // +//////////////////////////////////////////////////// +namespace Dumux { + +template<int dim> +class NoCommunicateGrid; + +template<int dim> +class NoCommunicateGridLeafGridView +: public Dune::YaspGrid<dim>::LeafGridView +{ + using ParentType = typename Dune::YaspGrid<dim>::LeafGridView; +public: + using ParentType::ParentType; + + struct Traits : public ParentType::Traits + { using Grid = NoCommunicateGrid<dim>; }; +}; + +template<int dim> +class NoCommunicateGrid : public Dune::YaspGrid<dim> +{ + using ParentType = Dune::YaspGrid<dim>; +public: + using ParentType::ParentType; + struct Traits : public ParentType::Traits + { using LeafGridView = NoCommunicateGridLeafGridView<dim>; }; + + using LeafGridView = NoCommunicateGridLeafGridView<dim>; + + typename Traits::LeafGridView leafGridView() const + { return NoCommunicateGridLeafGridView<dim>(*this); } +private: + using ParentType::communicate; + using ParentType::communicateCodim; +}; + +template<int dim> +class GridManager<NoCommunicateGrid<dim>> : public GridManager<Dune::YaspGrid<dim>> +{ + using ParentType = GridManager<Dune::YaspGrid<dim>>; +public: + using ParentType::ParentType; + using Grid = NoCommunicateGrid<dim>; + Grid& grid() { return static_cast<NoCommunicateGrid<dim>&>(ParentType::grid()); } +}; + +} // end namespace Dumux + +namespace Dune::Capabilities { + +template<int dim, int codim> +struct canCommunicate<Dumux::NoCommunicateGrid<dim>, codim> +{ static constexpr bool v = false; }; + +} // end namespace Dune::Capabilities +///////////////////////////////////////// + namespace Dumux::Properties { // Create new type tags namespace TTag {