Mercurial > repos > public > sbplib_julia
comparison src/Grids/manifolds.jl @ 1581:f77c5309dd2b feature/grids/manifolds
Rename ConcreteChart to Chart and remove the abstarct chart type
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Thu, 25 Apr 2024 22:32:54 +0200 |
| parents | fdee60ab8c4e |
| children | 84c3b9d71218 |
comparison
equal
deleted
inserted
replaced
| 1580:fdee60ab8c4e | 1581:f77c5309dd2b |
|---|---|
| 64 return Simplex((z,verticies...)) | 64 return Simplex((z,verticies...)) |
| 65 end | 65 end |
| 66 unitsimplex(D) = unitsimplex(Float64, D) | 66 unitsimplex(D) = unitsimplex(Float64, D) |
| 67 | 67 |
| 68 """ | 68 """ |
| 69 Chart{D} | |
| 69 | 70 |
| 70 A parametrized description of a manifold or part of a manifold. | 71 A parametrized description of a manifold or part of a manifold. |
| 71 | |
| 72 Should implement a methods for | |
| 73 * `parameterspace` | |
| 74 * `(::Chart)(ξs...)` | |
| 75 """ | 72 """ |
| 76 abstract type Chart{D} end | 73 struct Chart{D, PST<:ParameterSpace{D}, MT} |
| 77 # abstract type Chart{D,R} end | |
| 78 | |
| 79 domain_dim(::Chart{D}) where D = D | |
| 80 # range_dim(::Chart{D,R}) where {D,R} = R | |
| 81 | |
| 82 """ | |
| 83 The parameterspace of a chart | |
| 84 """ | |
| 85 function parameterspace end | |
| 86 | |
| 87 | |
| 88 # TODO: Add trait for if there is a jacobian available? | |
| 89 # Add package extension to allow calling the getter function anyway if it's not available | |
| 90 # And can we add an informative error that ForwardDiff could be loaded to make it work? | |
| 91 # Or can we handle this be custom implementations? For sometypes in the library it can be implemented explicitly. | |
| 92 # And as an example for ConcreteChart it can be implemented by the user like | |
| 93 # c = ConcreteChart(...) | |
| 94 # jacobian(c::typeof(c)) = ... | |
| 95 | |
| 96 struct ConcreteChart{D, PST<:ParameterSpace{D}, MT} <: Chart{D} | |
| 97 mapping::MT | 74 mapping::MT |
| 98 parameterspace::PST | 75 parameterspace::PST |
| 99 end | 76 end |
| 100 | 77 |
| 101 (c::ConcreteChart)(ξ) = c.mapping(ξ) | 78 domain_dim(::Chart{D}) where D = D |
| 102 parameterspace(c::ConcreteChart) = c.parameterspace | 79 (c::Chart)(ξ) = c.mapping(ξ) |
| 80 parameterspace(c::Chart) = c.parameterspace | |
| 103 | 81 |
| 104 jacobian(c::ConcreteChart, ξ) = jacobian(c.mapping, ξ) | 82 """ |
| 83 jacobian(c::Chart, ξ) | |
| 84 | |
| 85 The jacobian of the mapping evaluated at `ξ`. This defers to the | |
| 86 implementation of `jacobian` for the mapping itself. If no implementation is | |
| 87 available one can easily be specified for either the mapping function or the | |
| 88 chart itself. | |
| 89 ```julia | |
| 90 c = Chart(f, ps) | |
| 91 jacobian(f::typeof(f), ξ) = f′(ξ) | |
| 92 ``` | |
| 93 or | |
| 94 ```julia | |
| 95 c = Chart(f, ps) | |
| 96 jacobian(c::typeof(c),ξ) = f′(ξ) | |
| 97 ``` | |
| 98 which will both allow calling `jacobian(c,ξ)`. | |
| 99 """ | |
| 100 jacobian(c::Chart, ξ) = jacobian(c.mapping, ξ) | |
| 101 | |
| 105 | 102 |
| 106 """ | 103 """ |
| 107 Atlas | 104 Atlas |
| 108 | 105 |
| 109 A collection of charts and their connections. | 106 A collection of charts and their connections. |
