Path: blob/main/src/callbacks_step/averaging_dg.jl
2055 views
# By default, Julia/LLVM does not use fused multiply-add operations (FMAs).1# Since these FMAs can increase the performance of many numerical algorithms,2# we need to opt-in explicitly.3# See https://ranocha.de/blog/Optimizing_EC_Trixi for further details.4@muladd begin5#! format: noindent67function save_averaging_file(averaging_callback, mesh::TreeMesh, equations, dg::DGSEM,8cache)9@unpack output_directory, filename, mean_values = averaging_callback10h5open(joinpath(output_directory, filename), "w") do file11# Add context information12attributes(file)["ndims"] = ndims(mesh)13attributes(file)["polydeg"] = polydeg(dg)14attributes(file)["n_elements"] = nelements(dg, cache)1516# Store all mean variables as multi-dimensional arrays17for field in fieldnames(typeof(mean_values))18name = string(field)19data = getfield(mean_values, field)20file[name] = data21end22end2324return filename25end2627function load_averaging_file(averaging_file, mesh::TreeMesh, equations, dg::DGSEM,28cache)29# Read and check mesh and solver info30h5open(averaging_file, "r") do file31n_dims = read(attributes(file)["ndims"])32n_nodes = read(attributes(file)["polydeg"]) + 133n_elements = read(attributes(file)["n_elements"])3435@assert n_dims==ndims(mesh) "ndims differs from value in averaging file"36@assert n_nodes - 1==polydeg(dg) "polynomial degree in solver differs from value in averaging file"37@assert n_elements==nelements(dg, cache) "nelements in solver differs from value in averaging file"38end3940# Read and return mean values41v_mean, c_mean, rho_mean, vorticity_mean = h5open(averaging_file, "r") do file42return read(file["v_mean"]),43read(file["c_mean"]),44read(file["rho_mean"]),45read(file["vorticity_mean"])46end4748return (; v_mean, c_mean, rho_mean, vorticity_mean)49end50end # @muladd515253