-
Amaury Bilocq authoredAmaury Bilocq authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
solver.py 2.76 KiB
import numpy as np
from pyTurbulence.syntheticTurbulence import compute_solenoidal_velocities, compute_solenoidal_pressure, compute_thermodynamic_fields
from pyTurbulence.spectrum import compute_tke_spectrum, plot_spectrum, energy_spectrum
import time
import os
def solve(params, results_dir):
# Read the params dictionary
nbModes = params["nbModes"]
Mt = params["Mt"]
mean_pressure = params["Pressure"]
mean_temperature = params["Temperature"]
mean_density = mean_pressure / mean_temperature
gamma = params["gamma"]
celerity = np.sqrt(gamma * mean_pressure / mean_density)
Ek = 0.5 * (Mt * celerity) ** 2
urms = np.sqrt(2. * Ek / 3.)
k0 = params["k0"]
domain_size = params["domain_size"]
domain_resolution = params["domain_resolution"]
xi = gamma * Mt ** 2
spectrum = params["Spectrum"]
# Generate the solenoidal velocity field
start = time.time()
u, v, w, wmax = compute_solenoidal_velocities(spectrum, nbModes, urms, k0, domain_size, domain_resolution, seed=params["seed"])
TKE = np.mean(0.5 * (u.reshape(-1) ** 2 + v.reshape(-1) ** 2 + w.reshape(-1) ** 2))
end = time.time()
solenoidal_time = end - start
# Generate the incompressible pressure fluctuations
start = time.time()
incompressible_pressure_fluctuations = compute_solenoidal_pressure(u, v, w, domain_resolution, domain_size)
end = time.time()
pressure_time = end - start
# Compute the thermodynamic fields
start = time.time()
density, pressure, temperature = compute_thermodynamic_fields(mean_density, mean_pressure, mean_temperature, incompressible_pressure_fluctuations, gamma, Mt, params["case"])
end = time.time()
thermodynamic_time = end - start
# Plot the spectrum
start = time.time()
knyquist, wave_numbers, tke_spectrum = compute_tke_spectrum(u, v, w, domain_size[0], domain_size[1], domain_size[2])
real_spectrum = energy_spectrum(spectrum, wave_numbers, urms, k0)
spectrum_path = os.path.join(results_dir, "spectrum.png")
plot_spectrum(wmax, wave_numbers, tke_spectrum, real_spectrum=real_spectrum, save_path=spectrum_path)
end = time.time()
spectrum_time = end - start
# Save the data
start = time.time()
u.tofile(os.path.join(results_dir, "u.dat"))
v.tofile(os.path.join(results_dir, "v.dat"))
w.tofile(os.path.join(results_dir, "w.dat"))
pressure.tofile(os.path.join(results_dir, "p.dat"))
temperature.tofile(os.path.join(results_dir, "T.dat"))
end = time.time()
save_time = end - start
return {
"TKE": TKE,
"Ek": Ek,
"solenoidal_time": solenoidal_time,
"pressure_time": pressure_time,
"thermodynamic_time": thermodynamic_time,
"spectrum_time": spectrum_time,
"save_time": save_time
}