From e2af6cdbaef079d7b6274c6b464bd8bee5267b6b Mon Sep 17 00:00:00 2001 From: Henning Scheufler Date: Sun, 6 Oct 2024 10:38:10 +0200 Subject: [PATCH] test coeff in parallelfor --- test/dsl/coeff.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/dsl/coeff.cpp b/test/dsl/coeff.cpp index 883aa7d5d..1d3cbd0c1 100644 --- a/test/dsl/coeff.cpp +++ b/test/dsl/coeff.cpp @@ -56,4 +56,65 @@ TEST_CASE("Coeff") REQUIRE(hostResF.data()[1] == 12.0); REQUIRE(hostResF.data()[2] == 12.0); } + + SECTION("evaluation in parallelFor" + execName) + { + size_t size = 3; + + NeoFOAM::Field fieldA(exec, size, 0.0); + NeoFOAM::Field fieldB(exec, size, 1.0); + + SECTION("span") + { + Coeff coeff = fieldB; // is a span with uniform value 1.0 + { + NeoFOAM::parallelFor( + fieldA, KOKKOS_LAMBDA(const size_t i) { return coeff[i] + 2.0; } + ); + }; + auto hostFieldA = fieldA.copyToHost(); + REQUIRE(coeff.hasSpan() == true); + REQUIRE(hostFieldA[0] == 3.0); + REQUIRE(hostFieldA[1] == 3.0); + REQUIRE(hostFieldA[2] == 3.0); + } + + SECTION("scalar") + { + NeoFOAM::Field fieldA(exec, size, 0.0); + + Coeff coeff = Coeff(2.0); + { + NeoFOAM::parallelFor( + fieldA, KOKKOS_LAMBDA(const size_t i) { return coeff[i] + 2.0; } + ); + }; + auto hostFieldA = fieldA.copyToHost(); + REQUIRE(coeff.hasSpan() == false); + REQUIRE(hostFieldA[0] == 4.0); + REQUIRE(hostFieldA[1] == 4.0); + REQUIRE(hostFieldA[2] == 4.0); + } + + SECTION("span and scalar") + { + NeoFOAM::Field fieldA(exec, size, 0.0); + NeoFOAM::Field fieldB(exec, size, 1.0); + Coeff coeff {-5.0,fieldB}; + { + NeoFOAM::parallelFor( + fieldA, KOKKOS_LAMBDA(const size_t i) { return coeff[i] + 2.0; } + ); + }; + auto hostFieldA = fieldA.copyToHost(); + REQUIRE(coeff.hasSpan() == true); + REQUIRE(hostFieldA[0] == -3.0); + REQUIRE(hostFieldA[1] == -3.0); + REQUIRE(hostFieldA[2] == -3.0); + } + + } + + + }