Skip to content

Commit 632c7b3

Browse files
committed
fix: update for arrays
1 parent 2cf3b22 commit 632c7b3

File tree

5 files changed

+34
-61
lines changed

5 files changed

+34
-61
lines changed

lib/NeuralClosure/src/closure.jl

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,14 @@
11
"""
22
Wrap closure model and parameters so that it can be used in the solver.
33
"""
4-
function wrappedclosure(m, setup)
5-
(; dimension, Iu) = setup.grid
6-
D = dimension()
7-
# function neuralclosure(u)
8-
# u = stack(ntuple(α -> u[α][Iu[α]], D))
9-
# u = reshape(u, size(u)..., 1) # One sample
10-
# mu = m(u, θ)
11-
# mu = pad_circular(mu, 1)
12-
# sz..., _ = size(mu)
13-
# i = ntuple(Returns(:), D)
14-
# mu = ntuple(α -> mu[i..., α, 1], D)
15-
# end
16-
neuralclosure(u, θ) =
17-
if D == 2
18-
u = cat(u[1][Iu[1]], u[2][Iu[2]]; dims = 3)
19-
u = reshape(u, size(u)..., 1) # One sample
20-
# u = collocate(u)
21-
mu = m(u, θ)
22-
# mu = decollocate(mu)
23-
mu = pad_circular(mu, 1)
24-
mu = (mu[:, :, 1, 1], mu[:, :, 2, 1])
25-
elseif D == 3
26-
u = cat(u[1][Iu[1]], u[2][Iu[2]], u[3][Iu[3]]; dims = 4)
27-
u = reshape(u, size(u)..., 1) # One sample
28-
# u = collocate(u)
29-
mu = m(u, θ)
30-
# mu = decollocate(mu)
31-
mu = pad_circular(mu, 1)
32-
mu = (mu[:, :, :, 1, 1], mu[:, :, :, 2, 1], mu[:, :, :, 3, 1])
33-
end
34-
end
4+
wrappedclosure(m) =
5+
function neuralclosure(u, θ)
6+
s = size(u)
7+
u = reshape(u, s..., 1) # Add sample dim
8+
mu = m(u, θ)
9+
mu = pad_circular(mu, 1)
10+
mu = reshape(mu, s) # Remove sample dim
11+
end
3512

3613
"""
3714
Create neural closure model from layers.

lib/NeuralClosure/src/cnn.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function cnn(;
1212
rng = Random.default_rng(),
1313
)
1414
r, c, σ, b = radii, channels, activations, use_bias
15-
(; grid, boundary_conditions) = setup
15+
(; grid) = setup
1616
(; dimension, x) = grid
1717
D = dimension()
1818
T = eltype(x[1])

lib/NeuralClosure/src/data_generation.jl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ function lesdatagen(dnsobs, Φ, les, compression, psolver)
3838
= vectorfield(les)
3939
ΦF = vectorfield(les)
4040
c = vectorfield(les)
41-
results = (; u = fill(Array.(Φu), 0), c = fill(Array.(c), 0))
41+
results = (; u = fill(Array(Φu), 0), c = fill(Array(c), 0))
4242
temp = nothing
4343
on(dnsobs) do (; u, F, t)
4444
Φ(Φu, u, les, compression)
@@ -47,11 +47,9 @@ function lesdatagen(dnsobs, Φ, les, compression, psolver)
4747
momentum!(FΦ, Φu, temp, t, les)
4848
apply_bc_u!(FΦ, t, les; dudt = true)
4949
project!(FΦ, les; psolver, p)
50-
for α = 1:length(u)
51-
c[α] .= ΦF[α] .- FΦ[α]
52-
end
53-
push!(results.u, Array.(Φu))
54-
push!(results.c, Array.(c))
50+
@. c = ΦF -
51+
push!(results.u, Array(Φu))
52+
push!(results.c, Array(c))
5553
end
5654
results
5755
end
@@ -226,7 +224,7 @@ function create_io_arrays(data, setup)
226224
for it = 1:nt, α = 1:D
227225
copyto!(
228226
view(u, colons..., α, it),
229-
view(getfield(trajectory, usym)[it][α], Iu[α]),
227+
view(getfield(trajectory, usym)[it], Iu[α], α),
230228
)
231229
end
232230
u

lib/NeuralClosure/src/filter.jl

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,31 @@ struct VolumeAverage <: AbstractFilter end
2424
Φ(vectorfield(setup_les), u, setup_les, compression)
2525

2626
function (::FaceAverage)(v, u, setup_les, comp)
27-
(; grid, workgroupsize) = setup_les
27+
(; grid, backend, workgroupsize) = setup_les
2828
(; Nu, Iu) = grid
2929
D = length(u)
3030
@kernel function Φ!(v, u, ::Val{α}, face, I0) where {α}
3131
I = @index(Global, Cartesian)
3232
J = I0 + comp * (I - oneunit(I))
33-
s = zero(eltype(v[α]))
33+
s = zero(eltype(v))
3434
for i in face
35-
s += u[α][J+i]
35+
s += u[J+i, α]
3636
end
37-
v[α][I0+I] = s / comp^(D - 1)
37+
v[I0+I, α] = s / comp^(D - 1)
3838
end
3939
for α = 1:D
4040
ndrange = Nu[α]
41-
I0 = first(Iu[α])
42-
I0 -= oneunit(I0)
41+
I0 = getoffset(Iu[α])
4342
face = CartesianIndices(ntuple-> β == α ? (comp:comp) : (1:comp), D))
44-
Φ!(get_backend(v[1]), workgroupsize)(v, u, Val(α), face, I0; ndrange)
43+
Φ!(backend, workgroupsize)(v, u, Val(α), face, I0; ndrange)
4544
end
4645
v
4746
end
4847

4948
"Reconstruct DNS velocity `u` from LES velocity `v`."
5049
function reconstruct!(u, v, setup_dns, setup_les, comp)
51-
(; grid, boundary_conditions, workgroupsize) = setup_les
52-
(; N, Iu) = grid
50+
(; grid, boundary_conditions, backend, workgroupsize) = setup_les
51+
(; N) = grid
5352
D = length(u)
5453
e = Offset(D)
5554
@assert all(bc -> bc[1] isa PeriodicBC && bc[2] isa PeriodicBC, boundary_conditions)
@@ -61,15 +60,15 @@ function reconstruct!(u, v, setup_dns, setup_les, comp)
6160
Jleft.I[α] == 1 && (Jleft += (N[α] - 2) * e(α))
6261
for i in volume
6362
s = zero(eltype(v[α]))
64-
s += (comp - i.I[α]) * v[α][J]
65-
s += i.I[α] * v[α][Jleft]
66-
u[α][I-i] = s / comp
63+
s += (comp - i.I[α]) * v[J, α]
64+
s += i.I[α] * v[Jleft, α]
65+
u[I-i, α] = s / comp
6766
end
6867
end
6968
for α = 1:D
7069
ndrange = N .- 2
7170
volume = CartesianIndices(ntuple-> 0:comp-1, D))
72-
R!(get_backend(v[1]), workgroupsize)(u, v, Val(α), volume; ndrange)
71+
R!(backend, workgroupsize)(u, v, Val(α), volume; ndrange)
7372
end
7473
u
7574
end
@@ -79,7 +78,7 @@ reconstruct(v, setup_dns, setup_les, comp) =
7978
reconstruct!(vectorfield(setup_dns), v, setup_dns, setup_les, comp)
8079

8180
function (::VolumeAverage)(v, u, setup_les, comp)
82-
(; grid, boundary_conditions, workgroupsize) = setup_les
81+
(; grid, boundary_conditions, backend, workgroupsize) = setup_les
8382
(; N, Nu, Iu) = grid
8483
D = length(u)
8584
@assert all(bc -> bc[1] isa PeriodicBC && bc[2] isa PeriodicBC, boundary_conditions)
@@ -93,16 +92,15 @@ function (::VolumeAverage)(v, u, setup_les, comp)
9392
K = J + i
9493
K = mod1.(K.I, comp .* (N .- 2))
9594
K = CartesianIndex(K)
96-
s += u[α][K]
95+
s += u[K, α]
9796
# n += 1
9897
end
9998
n = (iseven(comp) ? comp + 1 : comp) * comp^(D - 1)
100-
v[α][I0+I] = s / n
99+
v[I0+I, α] = s / n
101100
end
102101
for α = 1:D
103102
ndrange = Nu[α]
104-
I0 = first(Iu[α])
105-
I0 -= oneunit(I0)
103+
I0 = getoffset(Iu[α])
106104
volume = CartesianIndices(
107105
ntuple(
108106
β ->
@@ -112,7 +110,7 @@ function (::VolumeAverage)(v, u, setup_les, comp)
112110
D,
113111
),
114112
)
115-
Φ!(get_backend(v[1]), workgroupsize)(v, u, Val(α), volume, I0; ndrange)
113+
Φ!(backend, workgroupsize)(v, u, Val(α), volume, I0; ndrange)
116114
end
117115
v
118116
end

src/IncompressibleNavierStokes.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ using DocStringExtensions
1515
using FFTW
1616
using IterativeSolvers
1717
using KernelAbstractions
18-
using KernelAbstractions.Extras.LoopInfo: @unroll
1918
using LinearAlgebra
2019
using Makie
2120
using NNlib
@@ -73,6 +72,8 @@ include("utils.jl")
7372
include("time_steppers/methods.jl")
7473
include("time_steppers/time_stepper_caches.jl")
7574
include("time_steppers/step.jl")
75+
include("time_steppers/isexplicit.jl")
76+
include("time_steppers/lambda_max.jl")
7677
include("time_steppers/RKMethods.jl")
7778

7879
# Precompile workflow
@@ -94,7 +95,6 @@ export fieldplot, energy_history_plot, energy_spectrum_plot
9495

9596
# Setup
9697
export Setup, temperature_equation, scalarfield, vectorfield
97-
export CPU # TODO: This annoys Documenter, need to include this docstring somehow
9898

9999
# 1D grids
100100
export stretched_grid, cosine_grid, tanh_grid
@@ -109,7 +109,7 @@ export solve_unsteady, timestep, create_stepper
109109
export velocityfield, temperaturefield, random_field
110110

111111
# Utils
112-
export splitseed, plotgrid, save_vtk, get_lims
112+
export getoffset, splitseed, plotgrid, save_vtk, get_lims
113113

114114
# ODE methods
115115
export AdamsBashforthCrankNicolsonMethod, OneLegMethod, RKMethods, LMWray3

0 commit comments

Comments
 (0)