diff --git a/NEWS.md b/NEWS.md index 57b2e063..49c57cec 100644 --- a/NEWS.md +++ b/NEWS.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed `local_views(::BlockPMatrix, rows, cols)` indexing 1D block-range vectors with a 2D `CartesianIndex`, causing `BoundsError` for any multi-field problem with ≥2 fields. Since PR[#194](https://github.com/gridap/GridapDistributed.jl/pull/194/). - Fixed `mul!(y::BlockPVector, A::BlockPMatrix, x::BlockPVector, α, β)` computing `α*β*(A*x)` instead of `α*(A*x) + β*y`; the 3-arg `mul!` was also updated to correctly zero `y` before accumulating. Since PR[#194](https://github.com/gridap/GridapDistributed.jl/pull/194/). - Replaced fragile closure side-effect in `DistributedVisualizationData.filebase` with `getany(map(...))` for correct and idiomatic behaviour in both debug and MPI modes. Since PR[#195](https://github.com/gridap/GridapDistributed.jl/pull/195/). +- Changes required to generalize Nedelec Hexahedral elements for meshes beyond Cartesian Meshes. Since PR[#198](https://github.com/gridap/GridapDistributed.jl/pull/198/). ## [0.4.11] - 2026-02-20 diff --git a/Project.toml b/Project.toml index 2f7129a5..d0b51bdb 100644 --- a/Project.toml +++ b/Project.toml @@ -21,7 +21,7 @@ BlockArrays = "1" CircularArrays = "1.4.0" FillArrays = "1" ForwardDiff = "0.10, 1" -Gridap = "0.19.8" +Gridap = "0.19.9" LinearAlgebra = "1" MPI = "0.16, 0.17, 0.18, 0.19, 0.20" PartitionedArrays = "0.3.3" diff --git a/src/DivConformingFESpaces.jl b/src/DivAndCurlConformingFESpaces.jl similarity index 95% rename from src/DivConformingFESpaces.jl rename to src/DivAndCurlConformingFESpaces.jl index 5975a0b8..4779474f 100644 --- a/src/DivConformingFESpaces.jl +++ b/src/DivAndCurlConformingFESpaces.jl @@ -1,5 +1,7 @@ +const RTorNedelec = Union{RaviartThomas,Nedelec} + function FESpaces.FESpace(model::DistributedDiscreteModel, - reffe::Tuple{RaviartThomas,Any,Any}; + reffe::Tuple{<:RTorNedelec,Any,Any}; conformity=nothing, split_own_and_ghost=false, constraint=nothing, @@ -13,7 +15,7 @@ function FESpaces.FESpace(model::DistributedDiscreteModel, end function FESpaces.FESpace(model::DistributedDiscreteModel, - reffe::GenericRefFE{RaviartThomas}; + reffe::GenericRefFE{<:RTorNedelec}; conformity=nothing, split_own_and_ghost=false, constraint=nothing, @@ -34,7 +36,7 @@ end function FESpaces.FESpace( _trian::DistributedTriangulation, - reffe::Tuple{RaviartThomas,Any,Any}; + reffe::Tuple{<:RTorNedelec,Any,Any}; conformity=nothing, split_own_and_ghost=false, constraint=nothing,kwargs... @@ -48,7 +50,7 @@ function FESpaces.FESpace( end function FESpaces.FESpace(_trian::DistributedTriangulation, - reffe::GenericRefFE{RaviartThomas}; + reffe::GenericRefFE{<:RTorNedelec}; conformity=nothing, split_own_and_ghost=false, constraint=nothing, diff --git a/src/GridapDistributed.jl b/src/GridapDistributed.jl index edfce595..cfe41351 100644 --- a/src/GridapDistributed.jl +++ b/src/GridapDistributed.jl @@ -58,7 +58,7 @@ include("Visualization.jl") include("FESpaces.jl") -include("DivConformingFESpaces.jl") +include("DivAndCurlConformingFESpaces.jl") include("MultiField.jl") diff --git a/test/DivConformingTests.jl b/test/DivAndCurlConformingTests.jl similarity index 92% rename from test/DivConformingTests.jl rename to test/DivAndCurlConformingTests.jl index 33fc3a3f..85c88e0d 100644 --- a/test/DivConformingTests.jl +++ b/test/DivAndCurlConformingTests.jl @@ -1,4 +1,4 @@ -module DivConformingTests +module DivAndCurlConformingTests using SparseMatricesCSR import Gridap: ∇, divergence, DIV using Gridap @@ -60,7 +60,7 @@ function setup_p2_model() end function f(model,reffe,trian,das) - V = FESpace(model,reffe,conformity=:Hdiv) + V = FESpace(model,reffe) U = TrialFESpace(V) degree = 2 @@ -133,6 +133,16 @@ function main(distribute,nranks) f(model,reffe,trian,das) f(trian,reffe,trian,das) f(Triangulation(model),reffe,trian,das) + + reffe=ReferenceFE(nedelec,Float64,0) + f(model,reffe,trian,das) + f(trian,reffe,trian,das) + f(Triangulation(model),reffe,trian,das) + + reffe=ReferenceFE(QUAD, nedelec, 0) + f(model,reffe,trian,das) + f(trian,reffe,trian,das) + f(Triangulation(model),reffe,trian,das) end end # module diff --git a/test/sequential/DivConformingTests.jl b/test/sequential/DivAndCurlConformingTests.jl similarity index 52% rename from test/sequential/DivConformingTests.jl rename to test/sequential/DivAndCurlConformingTests.jl index d74831a6..e317b58d 100644 --- a/test/sequential/DivConformingTests.jl +++ b/test/sequential/DivAndCurlConformingTests.jl @@ -1,9 +1,9 @@ module DivConformingTestsSeq using PartitionedArrays -include("../DivConformingTests.jl") +include("../DivAndCurlConformingTests.jl") with_debug() do distribute - DivConformingTests.main(distribute,2) + DivAndCurlConformingTests.main(distribute,2) end end # module diff --git a/test/sequential/runtests.jl b/test/sequential/runtests.jl index 2f13ef9a..eedc5a37 100644 --- a/test/sequential/runtests.jl +++ b/test/sequential/runtests.jl @@ -18,12 +18,12 @@ if TESTCASE ∈ ("all", "seq-fespaces") end if TESTCASE ∈ ("all", "seq-physics") - @time @testset "Poisson" begin include("PoissonTests.jl") end - @time @testset "PLaplacian" begin include("PLaplacianTests.jl") end - @time @testset "DivConformingTests" begin include("DivConformingTests.jl") end - @time @testset "SurfaceCouplingTests" begin include("SurfaceCouplingTests.jl") end - @time @testset "StokesHdivDGTests" begin include("StokesHdivDGTests.jl") end - @time @testset "StokesOpenBoundary" begin include("StokesOpenBoundaryTests.jl") end + @time @testset "Poisson" begin include("PoissonTests.jl") end + @time @testset "PLaplacian" begin include("PLaplacianTests.jl") end + @time @testset "DivAndCurlConformingTests" begin include("DivAndCurlConformingTests.jl") end + @time @testset "SurfaceCouplingTests" begin include("SurfaceCouplingTests.jl") end + @time @testset "StokesHdivDGTests" begin include("StokesHdivDGTests.jl") end + @time @testset "StokesOpenBoundary" begin include("StokesOpenBoundaryTests.jl") end end if TESTCASE ∈ ("all", "seq-transient")