Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/src/callbacks_step/averaging_dg.jl
2055 views
1
# By default, Julia/LLVM does not use fused multiply-add operations (FMAs).
2
# Since these FMAs can increase the performance of many numerical algorithms,
3
# we need to opt-in explicitly.
4
# See https://ranocha.de/blog/Optimizing_EC_Trixi for further details.
5
@muladd begin
6
#! format: noindent
7
8
function save_averaging_file(averaging_callback, mesh::TreeMesh, equations, dg::DGSEM,
9
cache)
10
@unpack output_directory, filename, mean_values = averaging_callback
11
h5open(joinpath(output_directory, filename), "w") do file
12
# Add context information
13
attributes(file)["ndims"] = ndims(mesh)
14
attributes(file)["polydeg"] = polydeg(dg)
15
attributes(file)["n_elements"] = nelements(dg, cache)
16
17
# Store all mean variables as multi-dimensional arrays
18
for field in fieldnames(typeof(mean_values))
19
name = string(field)
20
data = getfield(mean_values, field)
21
file[name] = data
22
end
23
end
24
25
return filename
26
end
27
28
function load_averaging_file(averaging_file, mesh::TreeMesh, equations, dg::DGSEM,
29
cache)
30
# Read and check mesh and solver info
31
h5open(averaging_file, "r") do file
32
n_dims = read(attributes(file)["ndims"])
33
n_nodes = read(attributes(file)["polydeg"]) + 1
34
n_elements = read(attributes(file)["n_elements"])
35
36
@assert n_dims==ndims(mesh) "ndims differs from value in averaging file"
37
@assert n_nodes - 1==polydeg(dg) "polynomial degree in solver differs from value in averaging file"
38
@assert n_elements==nelements(dg, cache) "nelements in solver differs from value in averaging file"
39
end
40
41
# Read and return mean values
42
v_mean, c_mean, rho_mean, vorticity_mean = h5open(averaging_file, "r") do file
43
return read(file["v_mean"]),
44
read(file["c_mean"]),
45
read(file["rho_mean"]),
46
read(file["vorticity_mean"])
47
end
48
49
return (; v_mean, c_mean, rho_mean, vorticity_mean)
50
end
51
end # @muladd
52
53