Commit 2a891147 by Ashwin V. Mohanan

### Add a script to demonstrate different Burgers solvers

`Following up on #83`
parent 860cc9ebb811
Pipeline #22793 passed with stage
in 15 minutes and 32 seconds
 #!/usr/bin/env python #!/usr/bin/env python """Simulate Burgers equation with a sine-wave as an initial condition. Notes ----- - A stark difference in the final energy is observed between the convective and skew symmetric Burgers solver is evident a nx=101 is chosen. - This contrast is less evident if nx=64, 128 etc. which is indeed puzzling. - As suggested in the reference below the foolproof solution is to apply dealiasing which guarantees energy conservation. .. seealso: https://kth-nek5000.github.io/kthNekBook/_notebooks/burgers.html """ import click import click import numpy as np import numpy as np import matplotlib.pyplot as plt import matplotlib.pyplot as plt def solve(Simul, coef_dealiasing): def solve(Simul, nx, coef_dealiasing): params = Simul.create_default_params() params = Simul.create_default_params() params.output.sub_directory = "bench_skew_sym" params.output.sub_directory = "bench_skew_sym" params.output.periods_save.phys_fields = 1.0 params.output.periods_save.phys_fields = 1.0 params.short_name_type_run = f"test_coef_dealias={coef_dealiasing:.2f}" params.short_name_type_run = f"test_coef_dealias={coef_dealiasing:.2f}" params.oper.Lx = 2 * np.pi params.oper.Lx = 2 * np.pi params.oper.nx = 128 params.oper.nx = nx params.oper.coef_dealiasing = coef_dealiasing params.oper.coef_dealiasing = coef_dealiasing params.nu_2 = 0.0 params.nu_2 = 0.0 params.time_stepping.USE_CFL = False params.time_stepping.USE_CFL = False ... @@ -47,14 +60,15 @@ def solve(Simul, coef_dealiasing): ... @@ -47,14 +60,15 @@ def solve(Simul, coef_dealiasing): @click.command() @click.command() @click.option("--solver", type=click.Choice(["conv", "skew_sym"])) @click.option("--solver", type=click.Choice(["conv", "skew_sym"])) @click.option("--nx", type=int, default=101) @click.option("--dealias/--no-dealias", type=bool, default=False) @click.option("--dealias/--no-dealias", type=bool, default=False) def run(solver, dealias): def run(solver, nx, dealias): if solver == "conv": if solver == "conv": from fluidsim.solvers.burgers1d.solver import Simul from fluidsim.solvers.burgers1d.solver import Simul else: else: from fluidsim.solvers.burgers1d.skew_sym.solver import Simul from fluidsim.solvers.burgers1d.skew_sym.solver import Simul solve(Simul, 2./3 if dealias else 1.0) solve(Simul, nx, 2./3 if dealias else 1.0) if __name__ == "__main__": if __name__ == "__main__": ... ...
 ... @@ -10,10 +10,21 @@ Provides: ... @@ -10,10 +10,21 @@ Provides: """ """ from fluidsim.base.setofvariables import SetOfVariables from fluidsim.base.setofvariables import SetOfVariables from ..solver import Simul as SimulBurgers from ..solver import Simul as SimulBurgers, InfoSolver as InfoSolverBurgers class InfoSolver(InfoSolverBurgers): def _init_root(self): super()._init_root() package = "fluidsim.solvers.burgers1d.skew_sym" self.module_name = package + ".solver" self.class_name = "Simul" self.short_name = "BurgersSkewSym1D" class Simul(SimulBurgers): class Simul(SimulBurgers): InfoSolver = InfoSolver def tendencies_nonlin(self, state_spect=None, old=None): def tendencies_nonlin(self, state_spect=None, old=None): ... ...
 ... @@ -43,7 +43,7 @@ class InfoSolver(InfoSolverPseudoSpectral): ... @@ -43,7 +43,7 @@ class InfoSolver(InfoSolverPseudoSpectral): package = "fluidsim.solvers.burgers1d" package = "fluidsim.solvers.burgers1d" self.module_name = package + ".solver" self.module_name = package + ".solver" self.class_name = "Simul" self.class_name = "Simul" self.short_name = "AD1D" self.short_name = "Burgers1D" classes = self.classes classes = self.classes ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!