Mercurial > repos > public > sbplib_julia
annotate src/Grids/mapped_grid.jl @ 1774:035af82f559a feature/grids/curvilinear
Rename logicalgrid to logical_grid
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sun, 15 Sep 2024 18:03:37 +0200 |
parents | 08e52f442872 |
children | ecec2b0eea0f |
rev | line source |
---|---|
1746 | 1 """ |
2 MappedGrid{T,D} <: Grid{T,D} | |
3 | |
4 A grid defined by a coordinate mapping from a logical grid to some physical | |
5 coordinates. The physical coordinates and the Jacobian are stored as grid | |
6 functions corresponding to the logical grid. | |
7 | |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
8 See also: [`logical_grid`](@ref), [`jacobian`](@ref), [`metric_tensor`](@ref). |
1746 | 9 """ |
1773
08e52f442872
Replace AbstractArray{<:Any,2} with AbstractMatrix{<:Any}
Jonatan Werpers <jonatan@werpers.com>
parents:
1768
diff
changeset
|
10 struct MappedGrid{T,D, GT<:Grid{<:Any,D}, CT<:AbstractArray{T,D}, JT<:AbstractArray{<:AbstractMatrix{<:Any}, D}} <: Grid{T,D} |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
11 logical_grid::GT |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
12 physicalcoordinates::CT |
1505
63101a1cd0e6
Remove some comments
Jonatan Werpers <jonatan@werpers.com>
parents:
1504
diff
changeset
|
13 jacobian::JT |
1743
49bd573ab07f
Implement checking of sizes for inputs to MappedGrid
Jonatan Werpers <jonatan@werpers.com>
parents:
1741
diff
changeset
|
14 |
1746 | 15 """ |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
16 MappedGrid(logical_grid, physicalcoordinates, jacobian) |
1746 | 17 |
18 A MappedGrid with the given physical coordinates and jacobian. | |
19 """ | |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
20 function MappedGrid(logical_grid::GT, physicalcoordinates::CT, jacobian::JT) where {T,D, GT<:Grid{<:Any,D}, CT<:AbstractArray{T,D}, JT<:AbstractArray{<:AbstractMatrix{<:Any}, D}} |
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
21 if !(size(logical_grid) == size(physicalcoordinates) == size(jacobian)) |
1743
49bd573ab07f
Implement checking of sizes for inputs to MappedGrid
Jonatan Werpers <jonatan@werpers.com>
parents:
1741
diff
changeset
|
22 throw(ArgumentError("Sizes must match")) |
49bd573ab07f
Implement checking of sizes for inputs to MappedGrid
Jonatan Werpers <jonatan@werpers.com>
parents:
1741
diff
changeset
|
23 end |
49bd573ab07f
Implement checking of sizes for inputs to MappedGrid
Jonatan Werpers <jonatan@werpers.com>
parents:
1741
diff
changeset
|
24 |
1744
c38eead8be17
Add checks for the size of the jacobian
Jonatan Werpers <jonatan@werpers.com>
parents:
1743
diff
changeset
|
25 if size(first(jacobian)) != (length(first(physicalcoordinates)),D) |
c38eead8be17
Add checks for the size of the jacobian
Jonatan Werpers <jonatan@werpers.com>
parents:
1743
diff
changeset
|
26 throw(ArgumentError("The size of the jacobian must match the dimensions of the grid and coordinates")) |
c38eead8be17
Add checks for the size of the jacobian
Jonatan Werpers <jonatan@werpers.com>
parents:
1743
diff
changeset
|
27 end |
c38eead8be17
Add checks for the size of the jacobian
Jonatan Werpers <jonatan@werpers.com>
parents:
1743
diff
changeset
|
28 |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
29 return new{T,D,GT,CT,JT}(logical_grid, physicalcoordinates, jacobian) |
1743
49bd573ab07f
Implement checking of sizes for inputs to MappedGrid
Jonatan Werpers <jonatan@werpers.com>
parents:
1741
diff
changeset
|
30 end |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
31 end |
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
32 |
1705
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
33 function Base.:(==)(a::MappedGrid, b::MappedGrid) |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
34 same_logical_grid = logical_grid(a) == logical_grid(b) |
1705
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
35 same_coordinates = collect(a) == collect(b) |
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
36 same_jacobian = jacobian(a) == jacobian(b) |
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
37 |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
38 return same_logical_grid && same_coordinates && same_jacobian |
1705
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
39 end |
4870fc3faa25
Add tests for equallity of mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1704
diff
changeset
|
40 |
1746 | 41 """ |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
42 logical_grid(g::MappedGrid) |
1746 | 43 |
44 The logical grid of `g`. | |
45 """ | |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
46 logical_grid(g::MappedGrid) = g.logical_grid |
1746 | 47 |
48 """ | |
49 jacobian(g::MappedGrid) | |
50 | |
51 The Jacobian matrix of `g` as a grid function. | |
52 """ | |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
53 jacobian(g::MappedGrid) = g.jacobian |
1431
6adf31ba6cfd
Add `jacobian` and `logicalgrid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1430
diff
changeset
|
54 |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
55 |
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
56 # Indexing interface |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
57 Base.getindex(g::MappedGrid, I::Vararg{Int}) = g.physicalcoordinates[I...] |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
58 Base.eachindex(g::MappedGrid) = eachindex(g.logical_grid) |
1432
64b60b42d367
Implement indexing interface
Jonatan Werpers <jonatan@werpers.com>
parents:
1431
diff
changeset
|
59 |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
60 Base.firstindex(g::MappedGrid, d) = firstindex(g.logical_grid, d) |
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
61 Base.lastindex(g::MappedGrid, d) = lastindex(g.logical_grid, d) |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
62 |
1450
647c8b18b84f
Implement iterator interface
Jonatan Werpers <jonatan@werpers.com>
parents:
1449
diff
changeset
|
63 # Iteration interface |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
64 Base.iterate(g::MappedGrid) = iterate(g.physicalcoordinates) |
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
65 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
|
66 |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
67 Base.IteratorSize(::Type{<:MappedGrid{<:Any, D}}) where D = Base.HasShape{D}() |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
68 Base.length(g::MappedGrid) = length(g.logical_grid) |
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
69 Base.size(g::MappedGrid) = size(g.logical_grid) |
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
70 Base.size(g::MappedGrid, d) = size(g.logical_grid, d) |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
71 |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
72 boundary_identifiers(g::MappedGrid) = boundary_identifiers(g.logical_grid) |
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
73 boundary_indices(g::MappedGrid, id::TensorGridBoundary) = boundary_indices(g.logical_grid, id) |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
74 |
1768
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
75 # Review: Error when calling plot(boundary_grid(g, id)) |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
76 # Currently need to collect first, i.e., plot(collect(boundary_grid(g, id))) |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
77 function boundary_grid(g::MappedGrid, id::TensorGridBoundary) |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
78 b_indices = boundary_indices(g.logical_grid, id) |
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
79 |
1504 | 80 # Calculate indices of needed jacobian components |
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
81 D = ndims(g) |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
82 all_indices = SVector{D}(1:D) |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
83 free_variable_indices = deleteat(all_indices, grid_id(id)) |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
84 jacobian_components = (:, free_variable_indices) |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
85 |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
86 # Create grid function for boundary grid jacobian |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
87 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
|
88 boundary_physicalcoordinates = @view g.physicalcoordinates[b_indices...] |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
89 |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
90 return MappedGrid( |
1774
035af82f559a
Rename logicalgrid to logical_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1773
diff
changeset
|
91 boundary_grid(g.logical_grid, id), |
1503
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
92 boundary_physicalcoordinates, |
704a84eef8b6
Add tests for boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1502
diff
changeset
|
93 boundary_jacobian, |
1451
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
94 ) |
2e08f3444354
Implement boundary_identifiers, and a wishful implementation of boundary_grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1450
diff
changeset
|
95 end |
1430
9fc3c1af33e5
Add testsets and a few tests
Jonatan Werpers <jonatan@werpers.com>
parents:
1426
diff
changeset
|
96 |
1746 | 97 |
98 """ | |
99 mapped_grid(x, J, size::Vararg{Int}) | |
1527
69790e9d1652
Remove tests for refine and coarsen
Jonatan Werpers <jonatan@werpers.com>
parents:
1506
diff
changeset
|
100 |
1746 | 101 A `MappedGrid` with a default logical grid on a unit hyper box. `x` and `J` |
102 are functions to be evaluated on the logical grid and `size` determines the | |
103 size of the logical grid. | |
104 """ | |
1706
11640aa3e348
Add method and refactor mapped_grid()
Jonatan Werpers <jonatan@werpers.com>
parents:
1705
diff
changeset
|
105 function mapped_grid(x, J, size::Vararg{Int}) |
1502
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
106 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
|
107 lg = equidistant_grid(ntuple(i->0., D), ntuple(i->1., D), size...) |
1706
11640aa3e348
Add method and refactor mapped_grid()
Jonatan Werpers <jonatan@werpers.com>
parents:
1705
diff
changeset
|
108 return mapped_grid(lg, x, J) |
11640aa3e348
Add method and refactor mapped_grid()
Jonatan Werpers <jonatan@werpers.com>
parents:
1705
diff
changeset
|
109 end |
11640aa3e348
Add method and refactor mapped_grid()
Jonatan Werpers <jonatan@werpers.com>
parents:
1705
diff
changeset
|
110 |
1746 | 111 """ |
112 mapped_grid(lg::Grid, x, J) | |
113 | |
114 A `MappedGrid` with logical grid `lg`. Physical coordinates and Jacobian are | |
115 determined by the functions `x` and `J`. | |
116 """ | |
1706
11640aa3e348
Add method and refactor mapped_grid()
Jonatan Werpers <jonatan@werpers.com>
parents:
1705
diff
changeset
|
117 function mapped_grid(lg::Grid, x, J) |
1506
535f32316637
Rename from curvilinear to mapped
Jonatan Werpers <jonatan@werpers.com>
parents:
1505
diff
changeset
|
118 return MappedGrid( |
1502
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
119 lg, |
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
120 map(x,lg), |
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
121 map(J,lg), |
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
122 ) |
a2dc80396808
Add functions `curvilinear_grid`
Jonatan Werpers <jonatan@werpers.com>
parents:
1501
diff
changeset
|
123 end |
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
124 |
1768
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
125 # Review: Error when calling jacobian_determinant(boundary_grid(g,id)) |
1746 | 126 """ |
127 jacobian_determinant(g::MappedGrid) | |
128 | |
129 The jacobian determinant of `g` as a grid function. | |
130 """ | |
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
131 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
|
132 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
|
133 det(∂x∂ξ) |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
134 end |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
135 end |
1741
248304f88e49
Add TBD for deciding about what jacobian_determinant should mean for Rn->Rm grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1736
diff
changeset
|
136 # TBD: Should this be changed to calculate sqrt(g) instead? |
248304f88e49
Add TBD for deciding about what jacobian_determinant should mean for Rn->Rm grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1736
diff
changeset
|
137 # This would make it well defined also for n-dim grids embedded in higher dimensions. |
248304f88e49
Add TBD for deciding about what jacobian_determinant should mean for Rn->Rm grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1736
diff
changeset
|
138 # TBD: Is there a better name? metric_determinant? |
1745 | 139 # TBD: Is the best option to delete it? |
1752
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
140 # Review: I don't think we should delete it. Users building their own |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
141 # curvilinear operators will need the functionality. Also the |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
142 # determinant of the jacobian (and not its square root) is required |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
143 # for quadratures on mapped grids right? For that reason I think we should |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
144 # keep the function as is. We could provide a function for the square root |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
145 # as well if we think it would be helpfull. Regarding naming, perhaps |
c98d9c528a22
Review: Added review comments to Grids.jl and mapped_grid.jl
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1749
diff
changeset
|
146 # metric_determinant is better? |
1560
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
147 |
1746 | 148 """ |
149 metric_tensor(g::MappedGrid) | |
150 | |
151 The metric tensor of `g` as a grid function. | |
152 """ | |
1682
4ce9cb21220c
Fix naming of metrix tensor functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1681
diff
changeset
|
153 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
|
154 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
|
155 ∂x∂ξ'*∂x∂ξ |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
156 end |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
157 end |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
158 |
1746 | 159 """ |
160 metric_tensor_inverse(g::MappedGrid) | |
161 | |
162 The inverse of the metric tensor of `g` as a grid function. | |
163 """ | |
1682
4ce9cb21220c
Fix naming of metrix tensor functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1681
diff
changeset
|
164 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
|
165 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
|
166 inv(∂x∂ξ'*∂x∂ξ) |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
167 end |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
168 end |
5d32ecb98db8
Add functions for jacobian_determiant, geometric_tensor, geometric_tensor_inverse
Jonatan Werpers <jonatan@werpers.com>
parents:
1527
diff
changeset
|
169 |
1684
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
170 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
|
171 n, = size(g) |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
172 |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
173 ms = Inf |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
174 for i ∈ 1:n-1 |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
175 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
|
176 end |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
177 |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
178 return ms |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
179 end |
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
180 |
1688
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
181 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
|
182 n, m = size(g) |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
183 |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
184 ms = Inf |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
185 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
|
186 |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
187 ms = min( |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
188 ms, |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
189 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
|
190 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
|
191 |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
192 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
|
193 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
|
194 |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
195 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
|
196 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
|
197 ) |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
198 # 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
|
199 end |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
200 |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
201 return ms |
72776d3d5fd6
Add min_spacing for 2D mapped grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1684
diff
changeset
|
202 end |
1684
22a9992471be
Add min_spacing for mapped 1d grid
Jonatan Werpers <jonatan@werpers.com>
parents:
1682
diff
changeset
|
203 |
1768
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
204 # Review: I would implement the normal through Nansons formula |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
205 # nⱼ = inv(Jᵧ)*J*Fⱼᵢ*νᵢ |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
206 # where |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
207 # Jᵧ boundary jacobian determiant |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
208 # J is the volume jacobian determinant |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
209 # Fⱼᵢ = dξᵢ/dxⱼ |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
210 # νᵢ normal on logical grid |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
211 # j: indices on physical grid |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
212 # i: indices on logical grid |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
213 # ξ: coordinate vector on logical grid |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
214 # x: coordinate vector on logical grid |
672897f64d58
More reivew comments
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1752
diff
changeset
|
215 # Perhaps the below is equivalent? |
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
|
216 """ |
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
|
217 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
|
218 |
1746 | 219 The outward pointing normal as a grid function on the corresponding boundary grid. |
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
|
220 """ |
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
|
221 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
|
222 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
|
223 σ =_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
|
224 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
|
225 ∂ξ∂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
|
226 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
|
227 σ*∂ξ∂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
|
228 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
|
229 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
|
230 |
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
|
231 function _boundary_sign(T, boundary) |
1736 | 232 if boundary_id(boundary) == UpperBoundary() |
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
|
233 return one(T) |
1736 | 234 elseif boundary_id(boundary) == LowerBoundary() |
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
|
235 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
|
236 else |
1736 | 237 throw(ArgumentError("The boundary identifier must be either `LowerBoundary()` or `UpperBoundary()`")) |
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
|
238 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
|
239 end |