changeset 1502:a2dc80396808 feature/grids/curvilinear

Add functions `curvilinear_grid`
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 16 Feb 2024 10:58:17 +0100
parents 553111a15506
children 704a84eef8b6
files src/Grids/Grids.jl src/Grids/curvilinear_grid.jl test/Grids/curvilinear_grid_test.jl
diffstat 3 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/Grids/Grids.jl	Fri Feb 16 10:28:02 2024 +0100
+++ b/src/Grids/Grids.jl	Fri Feb 16 10:58:17 2024 +0100
@@ -37,6 +37,7 @@
 export CurvilinearGrid
 export jacobian
 export logicalgrid
+export curvilinear_grid
 
 abstract type BoundaryIdentifier end
 
--- a/src/Grids/curvilinear_grid.jl	Fri Feb 16 10:28:02 2024 +0100
+++ b/src/Grids/curvilinear_grid.jl	Fri Feb 16 10:58:17 2024 +0100
@@ -42,3 +42,12 @@
 # creating the logical grid, evaluating functions and possibly calculating the
 # entries in the jacobian.
 
+function curvilinear_grid(x, J, size...)
+    D = length(size)
+    lg = equidistant_grid(size, ntuple(i->0., D), ntuple(i->1., D))
+    return CurvilinearGrid(
+        lg,
+        map(x,lg),
+        map(J,lg),
+    )
+end
--- a/test/Grids/curvilinear_grid_test.jl	Fri Feb 16 10:28:02 2024 +0100
+++ b/test/Grids/curvilinear_grid_test.jl	Fri Feb 16 10:58:17 2024 +0100
@@ -143,3 +143,17 @@
         @test_broken false # @test_throws DomainError(3, "Size minus 1 must be divisible by the ratio.") coarsen(cg, 3)
     end
 end
+
+@testset "curvilinear_grid" begin
+    x̄((ξ, η)) = @SVector[ξ, η*(1+ξ*(ξ-1))]
+    J((ξ, η)) = @SMatrix[
+        1     0;
+        2ξ-1  1+ξ*(ξ-1);
+    ]
+    cg = curvilinear_grid(x̄, J, 10, 11)
+    @test cg isa CurvilinearGrid{SVector{2,Float64}, 2}
+
+    lg = equidistant_grid((10,11), (0,0), (1,1))
+    @test logicalgrid(cg) == lg
+    @test collect(cg) == map(x̄, lg)
+end