Skip to content

Commit c7c0984

Browse files
jlk9wsmosesglwagnernavidcy
authored
Update spacings calls to enable array operations. (#4691)
* [Reactant] Add recursive specialization for BinaryOperation * fmt * fix * fix * Removed erroneous end, updated compat to take Reactant 2.149 * Cosmetic upgrades * Update Project.toml Co-authored-by: Navid C. Constantinou <[email protected]> * Stacking spacings to fix some dimension mismatch errors in Reactant * Setting up array muls * Not a problem --------- Co-authored-by: William S. Moses <[email protected]> Co-authored-by: Billy Moses <[email protected]> Co-authored-by: Gregory Wagner <[email protected]> Co-authored-by: Navid C. Constantinou <[email protected]>
1 parent 9c3c4b8 commit c7c0984

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

src/Operators/spacings_and_areas_and_volumes.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ end
109109
@inline Δrᵃᵃᶠ(i, j, k, grid) = getspacing(k, grid.z.Δᵃᵃᶠ)
110110

111111
@inline Δzᵃᵃᶜ(i, j, k, grid) = getspacing(k, grid.z.Δᵃᵃᶜ)
112+
@inline Δzᵃᵃᶜ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid) = permutedims(Base.stack(collect(Base.stack(collect(getspacing(k, grid.z.Δᵃᵃᶜ) for _ in j)) for _ in i)), (3,2,1)) # one part
113+
112114
@inline Δzᵃᵃᶠ(i, j, k, grid) = getspacing(k, grid.z.Δᵃᵃᶠ)
113115

114116
#####
@@ -156,7 +158,9 @@ end
156158
@inline Δλᶠᵃᵃ(i, j, k, grid::LLGX) = @inbounds grid.Δλᶠᵃᵃ
157159

158160
@inline Δφᵃᶜᵃ(i, j, k, grid::LLG) = @inbounds grid.Δφᵃᶜᵃ[j]
161+
@inline Δφᵃᶜᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(collect(transpose(Base.stack(collect(Δφᵃᶜᵃ(1, j, 1, grid) for _ in i)))) for _ in k))
159162
@inline Δφᵃᶠᵃ(i, j, k, grid::LLG) = @inbounds grid.Δφᵃᶠᵃ[j]
163+
@inline Δφᵃᶠᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(collect(transpose(Base.stack(collect(Δφᵃᶠᵃ(1, j, 1, grid) for _ in i)))) for _ in k))
160164
@inline Δφᵃᶜᵃ(i, j, k, grid::LLGY) = @inbounds grid.Δφᵃᶜᵃ
161165
@inline Δφᵃᶠᵃ(i, j, k, grid::LLGY) = @inbounds grid.Δφᵃᶠᵃ
162166

@@ -165,9 +169,15 @@ end
165169
### Precomputed metrics
166170

167171
@inline Δyᵃᶜᵃ(i, j, k, grid::LLGY) = grid.Δyᶠᶜᵃ
172+
@inline Δyᵃᶜᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLGY) = Base.stack(collect(Base.stack(collect(Base.stack(collect(Δyᵃᶜᵃ(1, 1, 1, grid) for _ in i)) for _ in j)) for _ in k)) # other part
173+
168174
@inline Δyᵃᶠᵃ(i, j, k, grid::LLGY) = grid.Δyᶜᶠᵃ
175+
@inline Δyᵃᶠᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLGY) = Base.stack(collect(Base.stack(collect(Base.stack(collect(Δyᵃᶠᵃ(1, 1, 1, grid) for _ in i)) for _ in j)) for _ in k))
176+
169177
@inline Δyᵃᶜᵃ(i, j, k, grid::LLG) = @inbounds grid.Δyᶠᶜᵃ[j]
178+
#@inline Δyᵃᶜᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(collect(transpose(Base.stack(collect(Δyᵃᶜᵃ(1, j, 1, grid) for _ in i)))) for _ in k))
170179
@inline Δyᵃᶠᵃ(i, j, k, grid::LLG) = @inbounds grid.Δyᶜᶠᵃ[j]
180+
#@inline Δyᵃᶠᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(collect(transpose(Base.stack(collect(Δyᵃᶠᵃ(1, j, 1, grid) for _ in i)))) for _ in k))
171181

172182
### On-the-fly metrics
173183

@@ -189,9 +199,17 @@ end
189199
### Pre computed metrics
190200

191201
@inline Δxᶜᶠᵃ(i, j, k, grid::LLG) = @inbounds grid.Δxᶜᶠᵃ[i, j]
202+
@inline Δxᶜᶠᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(Δxᶜᶠᵃ(i, j, 1, grid) for _ in k))
203+
192204
@inline Δxᶠᶜᵃ(i, j, k, grid::LLG) = @inbounds grid.Δxᶠᶜᵃ[i, j]
205+
@inline Δxᶠᶜᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(Δxᶠᶜᵃ(i, j, 1, grid) for _ in k))
206+
193207
@inline Δxᶠᶠᵃ(i, j, k, grid::LLG) = @inbounds grid.Δxᶠᶠᵃ[i, j]
208+
@inline Δxᶠᶠᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(Δxᶠᶠᵃ(i, j, 1, grid) for _ in k))
209+
194210
@inline Δxᶜᶜᵃ(i, j, k, grid::LLG) = @inbounds grid.Δxᶜᶜᵃ[i, j]
211+
@inline Δxᶜᶜᵃ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid::LLG) = Base.stack(collect(Δxᶜᶜᵃ(i, j, 1, grid) for _ in k))
212+
195213

196214
### XRegularLLG with pre computed metrics
197215

@@ -306,7 +324,9 @@ for L1 in (:ᶜ, :ᶠ), L2 in (:ᶜ, :ᶠ)
306324

307325
@eval begin
308326
@inline $Axˡˡˡ(i, j, k, grid) = $Δyˡˡˡ(i, j, k, grid) * $Δzˡˡˡ(i, j, k, grid)
327+
@inline $Axˡˡˡ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid) = $Δyˡˡˡ(i, j, k, grid) .* $Δzˡˡˡ(i, j, k, grid)
309328
@inline $Ayˡˡˡ(i, j, k, grid) = $Δxˡˡˡ(i, j, k, grid) * $Δzˡˡˡ(i, j, k, grid)
329+
@inline $Ayˡˡˡ(i::AbstractArray, j::AbstractArray, k::AbstractArray, grid) = $Δxˡˡˡ(i, j, k, grid) .* $Δzˡˡˡ(i, j, k, grid)
310330

311331
# For the moment the horizontal area is independent of `z`. This might change if
312332
# we want to implement deep atmospheres where Az is a function of z

0 commit comments

Comments
 (0)