Mercurial > repos > public > sbplib_julia
annotate src/Grids/mapped_grid.jl @ 1705:4870fc3faa25 feature/grids/curvilinear
Add tests for equallity of mapped grids
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Wed, 04 Sep 2024 15:38:10 +0200 |
| parents | e5e76c8e52c5 |
| children | 11640aa3e348 |
| rev | line source |
|---|---|
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
1 struct MappedGrid{T,D, GT<:Grid{<:Any,D}, CT<:AbstractArray{T,D}, JT<:AbstractArray{<:AbstractArray{<:Any, 2}, D}} <: Grid{T,D} |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
2 logicalgrid::GT |
|
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
3 physicalcoordinates::CT |
|
1505
63101a1cd0e6
Remove some comments
Jonatan Werpers <jonatan@werpers.com>
parents:
1504
diff
changeset
|
4 jacobian::JT |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
5 end |
|
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
6 |
|
1705
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
7 function Base.:(==)(a::MappedGrid, b::MappedGrid) |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
8 same_logicalgrid = logicalgrid(a) == logicalgrid(b) |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
9 same_coordinates = collect(a) == collect(b) |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
10 same_jacobian = jacobian(a) == jacobian(b) |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
11 |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
12 return same_logicalgrid && same_coordinates && same_jacobian |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
13 end |
|
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
14 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
15 jacobian(g::MappedGrid) = g.jacobian |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
16 logicalgrid(g::MappedGrid) = g.logicalgrid |
|
1431
6adf31ba6cfd
Add `jacobian` and `logicalgrid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1430
diff
changeset
|
17 |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
18 |
|
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
19 # Indexing interface |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
20 Base.getindex(g::MappedGrid, I::Vararg{Int}) = g.physicalcoordinates[I...] |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
21 Base.eachindex(g::MappedGrid) = eachindex(g.logicalgrid) |
|
1432
64b60b42d367
Implement indexing interface
Jonatan Werpers <jonatan@werpers.com>
parents:
1431
diff
changeset
|
22 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
23 Base.firstindex(g::MappedGrid, d) = firstindex(g.logicalgrid, d) |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
24 Base.lastindex(g::MappedGrid, d) = lastindex(g.logicalgrid, d) |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
25 |
|
1450
647c8b18b84f
Implement iterator interface
Jonatan Werpers <jonatan@werpers.com>
parents:
1449
diff
changeset
|
26 # Iteration interface |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
27 Base.iterate(g::MappedGrid) = iterate(g.physicalcoordinates) |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
28 Base.iterate(g::MappedGrid, state) = iterate(g.physicalcoordinates, state) |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
29 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
30 Base.IteratorSize(::Type{<:MappedGrid{<:Any, D}}) where D = Base.HasShape{D}() |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
31 Base.length(g::MappedGrid) = length(g.logicalgrid) |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
32 Base.size(g::MappedGrid) = size(g.logicalgrid) |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
33 Base.size(g::MappedGrid, d) = size(g.logicalgrid, d) |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
34 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
35 boundary_identifiers(g::MappedGrid) = boundary_identifiers(g.logicalgrid) |
|
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
36 boundary_indices(g::MappedGrid, id::TensorGridBoundary) = boundary_indices(g.logicalgrid, id) |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
37 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
38 function boundary_grid(g::MappedGrid, id::TensorGridBoundary) |
|
1451
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
39 b_indices = boundary_indices(g.logicalgrid, id) |
|
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
40 |
| 1504 | 41 # Calculate indices of needed jacobian components |
|
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
42 D = ndims(g) |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
43 all_indices = SVector{D}(1:D) |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
44 free_variable_indices = deleteat(all_indices, grid_id(id)) |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
45 jacobian_components = (:, free_variable_indices) |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
46 |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
47 # Create grid function for boundary grid jacobian |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
48 boundary_jacobian = componentview((@view g.jacobian[b_indices...]) , jacobian_components...) |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
49 boundary_physicalcoordinates = @view g.physicalcoordinates[b_indices...] |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
50 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
51 return MappedGrid( |
|
1451
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
52 boundary_grid(g.logicalgrid, id), |
|
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
53 boundary_physicalcoordinates, |
|
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
54 boundary_jacobian, |
|
1451
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
55 ) |
|
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
56 end |
|
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
57 |
|
1527
69790e9d1652
Remove tests for refine and coarsen
Jonatan Werpers <jonatan@werpers.com>
parents:
1506
diff
changeset
|
58 # TBD: refine and coarsen could be implemented once we have a simple manifold implementation. |
|
69790e9d1652
Remove tests for refine and coarsen
Jonatan Werpers <jonatan@werpers.com>
parents:
1506
diff
changeset
|
59 # Before we do, we should consider the overhead of including such a field in the mapped grid struct. |
|
69790e9d1652
Remove tests for refine and coarsen
Jonatan Werpers <jonatan@werpers.com>
parents:
1506
diff
changeset
|
60 |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
61 function mapped_grid(x, J, size...) |
|
1502
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
62 D = length(size) |
|
1570
063a2bfb03da
Fix bugs in calls to equidistant_grid after merge with default
Jonatan Werpers <jonatan@werpers.com>
parents:
1560
diff
changeset
|
63 lg = equidistant_grid(ntuple(i->0., D), ntuple(i->1., D), size...) |
|
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
64 return MappedGrid( |
|
1502
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
65 lg, |
|
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
66 map(x,lg), |
|
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
67 map(J,lg), |
|
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
68 ) |
|
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
69 end |
|
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
70 |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
71 function jacobian_determinant(g::MappedGrid) |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
72 return map(jacobian(g)) do ∂x∂ξ |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
73 det(∂x∂ξ) |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
74 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
75 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
76 |
|
1682
4ce9cb21220c
Fix naming of metrix tensor functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1681
diff
changeset
|
77 function metric_tensor(g::MappedGrid) |
|
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
78 return map(jacobian(g)) do ∂x∂ξ |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
79 ∂x∂ξ'*∂x∂ξ |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
80 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
81 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
82 |
|
1682
4ce9cb21220c
Fix naming of metrix tensor functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1681
diff
changeset
|
83 function metric_tensor_inverse(g::MappedGrid) |
|
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
84 return map(jacobian(g)) do ∂x∂ξ |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
85 inv(∂x∂ξ'*∂x∂ξ) |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
86 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
87 end |
|
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
88 |
|
1684
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
89 function min_spacing(g::MappedGrid{T,1} where T) |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
90 n, = size(g) |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
91 |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
92 ms = Inf |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
93 for i ∈ 1:n-1 |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
94 ms = min(ms, norm(g[i+1]-g[i])) |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
95 end |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
96 |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
97 return ms |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
98 end |
|
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
99 |
|
1688
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
100 function min_spacing(g::MappedGrid{T,2} where T) |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
101 n, m = size(g) |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
102 |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
103 ms = Inf |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
104 for i ∈ 1:n-1, j ∈ 1:m-1 # loop over each cell of the grid |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
105 |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
106 ms = min( |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
107 ms, |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
108 norm(g[i+1,j]-g[i,j]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
109 norm(g[i,j+1]-g[i,j]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
110 |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
111 norm(g[i+1,j]-g[i+1,j+1]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
112 norm(g[i,j+1]-g[i+1,j+1]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
113 |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
114 norm(g[i+1,j+1]-g[i,j]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
115 norm(g[i+1,j]-g[i,j+1]), |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
116 ) |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
117 # NOTE: This could be optimized to avoid checking all interior edges twice. |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
118 end |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
119 |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
120 return ms |
|
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
121 end |
|
1684
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
122 |
|
1659
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
123 """ |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
124 normal(g::MappedGrid, boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
125 |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
126 The outward pointing normal as a grid function on the boundary |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
127 """ |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
128 function normal(g::MappedGrid, boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
129 b_indices = boundary_indices(g, boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
130 σ =_boundary_sign(component_type(g), boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
131 return map(jacobian(g)[b_indices...]) do ∂x∂ξ |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
132 ∂ξ∂x = inv(∂x∂ξ) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
133 k = grid_id(boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
134 σ*∂ξ∂x[k,:]/norm(∂ξ∂x[k,:]) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
135 end |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
136 end |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
137 |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
138 function _boundary_sign(T, boundary) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
139 if boundary_id(boundary) == Upper() |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
140 return one(T) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
141 elseif boundary_id(boundary) == Lower() |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
142 return -one(T) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
143 else |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
144 throw(ArgumentError("The boundary identifier must be either `Lower()` or `Upper()`")) |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
145 end |
|
3bbcd496e021
Add function for computing the normal at the boundary of a mapped grid as a grid function
Jonatan Werpers <jonatan@werpers.com>
parents:
1645
diff
changeset
|
146 end |
