|
3 | 3 | ####
|
4 | 4 |
|
5 | 5 | # This file implements everything related to vertical coordinates in Oceananigans.
|
6 |
| -# Vertical coordinates are independent of the underlying grid type as we support grids that are |
7 |
| -# "unstructured" or "curvilinear" only in the horizontal direction. |
8 |
| -# For this reason the vertical coodinate is _special_, and it can be implemented once for all grid types. |
| 6 | +# Vertical coordinates are independent of the underlying grid type since only grids that are |
| 7 | +# "unstructured" or "curvilinear" in the horizontal directions are supported in Oceananigans. |
| 8 | +# Thus the vertical coordinate is _special_, and it can be implemented once for all grid types. |
9 | 9 |
|
10 | 10 | abstract type AbstractVerticalCoordinate end
|
11 | 11 |
|
12 |
| -# Represents a static one-dimensional vertical coordinate. |
13 |
| -# |
14 |
| -# # Fields |
15 |
| -# - `cᶜ::C`: Cell-centered coordinate. |
16 |
| -# - `cᶠ::C`: Face-centered coordinate. |
17 |
| -# - `Δᶜ::D`: Cell-centered grid spacing. |
18 |
| -# - `Δᶠ::D`: Face-centered grid spacing. |
19 |
| -struct StaticVerticalCoordinate{C, D} <: AbstractVerticalCoordinate |
| 12 | +""" |
| 13 | + struct StaticVerticalCoordinate{C, D, E, F} <: AbstractVerticalCoordinate |
| 14 | +
|
| 15 | +Represent a static one-dimensional vertical coordinate. |
| 16 | +
|
| 17 | +Fields |
| 18 | +====== |
| 19 | +
|
| 20 | +- `cᶜ::C`: Cell-centered coordinate. |
| 21 | +- `cᶠ::D`: Face-centered coordinate. |
| 22 | +- `Δᶜ::E`: Cell-centered grid spacing. |
| 23 | +- `Δᶠ::F`: Face-centered grid spacing. |
| 24 | +""" |
| 25 | +struct StaticVerticalCoordinate{C, D, E, F} <: AbstractVerticalCoordinate |
20 | 26 | cᵃᵃᶠ :: C
|
21 |
| - cᵃᵃᶜ :: C |
22 |
| - Δᵃᵃᶠ :: D |
23 |
| - Δᵃᵃᶜ :: D |
| 27 | + cᵃᵃᶜ :: D |
| 28 | + Δᵃᵃᶠ :: E |
| 29 | + Δᵃᵃᶜ :: F |
24 | 30 | end
|
25 | 31 |
|
26 | 32 | ####
|
27 |
| -#### Some usefull aliases |
| 33 | +#### Some useful aliases |
28 | 34 | ####
|
29 | 35 |
|
30 |
| -const RegularVerticalCoordinate = StaticVerticalCoordinate{<:Any, <:Number} |
| 36 | +const RegularVerticalCoordinate = StaticVerticalCoordinate{<:Any, <:Any, <:Number, <:Number} |
31 | 37 | const RegularVerticalGrid = AbstractUnderlyingGrid{<:Any, <:Any, <:Any, <:Any, <:RegularVerticalCoordinate}
|
32 | 38 |
|
33 | 39 | ####
|
34 | 40 | #### Adapt and on_architecture
|
35 | 41 | ####
|
36 | 42 |
|
37 |
| -Adapt.adapt_structure(to, coord::StaticVerticalCoordinate) = |
38 |
| - StaticVerticalCoordinate(Adapt.adapt(to, coord.cᵃᵃᶠ), |
39 |
| - Adapt.adapt(to, coord.cᵃᵃᶜ), |
40 |
| - Adapt.adapt(to, coord.Δᵃᵃᶠ), |
41 |
| - Adapt.adapt(to, coord.Δᵃᵃᶜ)) |
| 43 | +Adapt.adapt_structure(to, coord::StaticVerticalCoordinate) = |
| 44 | + StaticVerticalCoordinate(Adapt.adapt(to, coord.cᵃᵃᶠ), |
| 45 | + Adapt.adapt(to, coord.cᵃᵃᶜ), |
| 46 | + Adapt.adapt(to, coord.Δᵃᵃᶠ), |
| 47 | + Adapt.adapt(to, coord.Δᵃᵃᶜ)) |
42 | 48 |
|
43 | 49 | on_architecture(arch, coord::StaticVerticalCoordinate) =
|
44 |
| - StaticVerticalCoordinate(on_architecture(arch, coord.cᵃᵃᶠ), |
45 |
| - on_architecture(arch, coord.cᵃᵃᶜ), |
46 |
| - on_architecture(arch, coord.Δᵃᵃᶠ), |
47 |
| - on_architecture(arch, coord.Δᵃᵃᶜ)) |
| 50 | + StaticVerticalCoordinate(on_architecture(arch, coord.cᵃᵃᶠ), |
| 51 | + on_architecture(arch, coord.cᵃᵃᶜ), |
| 52 | + on_architecture(arch, coord.Δᵃᵃᶠ), |
| 53 | + on_architecture(arch, coord.Δᵃᵃᶜ)) |
48 | 54 |
|
49 | 55 | #####
|
50 | 56 | ##### Nodes and spacings (common to every grid)...
|
|
0 commit comments