From ae9417ad461f3bf6598fa7a99a582b13e22f7aba Mon Sep 17 00:00:00 2001 From: Benjamin Rodenberg Date: Wed, 25 Oct 2023 18:22:15 +0200 Subject: [PATCH] Support subcycling, add metadata in result csv. --- .../doConvergenceStudy.py | 60 +++++++++++++------ .../precice-config-template.xml | 2 +- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/partitioned-heat-conduction/doConvergenceStudy.py b/partitioned-heat-conduction/doConvergenceStudy.py index 99e72a0f3..4dd810335 100644 --- a/partitioned-heat-conduction/doConvergenceStudy.py +++ b/partitioned-heat-conduction/doConvergenceStudy.py @@ -29,9 +29,12 @@ def render(precice_config_params): file.write(precice_config_template.render(precice_config_params)) -def do_run(dt, error_tol=10e-3, precice_config_params=default_precice_config_params): +def do_run(dt, n_substeps = 1, error_tol=10e-3, precice_config_params=default_precice_config_params): + time_window_size = dt + time_step_size = time_window_size / n_substeps + fenics = Path(__file__).parent.absolute() / "fenics" - precice_config_params['time_window_size'] = dt + precice_config_params['time_window_size'] = time_window_size render(precice_config_params) print(f"{datetime.datetime.now()}: Start run with parameters {precice_config_params}") print("Running...") @@ -51,7 +54,7 @@ def do_run(dt, error_tol=10e-3, precice_config_params=default_precice_config_par for participant in participants: with open(fenics / participant['logfile'], "w") as outfile: - p = subprocess.Popen(["python3", fenics / "heat.py", participant["cmd"], f"-e {error_tol}"], cwd=fenics, stdout=outfile) + p = subprocess.Popen(["python3", fenics / "heat.py", participant["cmd"], f"-e {error_tol}", f"-s {n_substeps}"], cwd=fenics, stdout=outfile) participant["proc"] = p for participant in participants: @@ -59,13 +62,14 @@ def do_run(dt, error_tol=10e-3, precice_config_params=default_precice_config_par for participant in participants: if participant["proc"].returncode != 0: - raise Exception(f'Experiment with dt={dt} failed. See logs {[p["logfile"] for p in participants]}') + raise Exception(f'Experiment failed. See logs {[p["logfile"] for p in participants]}') print("Done.") print("Postprocessing...") - summary = {"dt":dt} + summary = {"time window size": time_window_size} for participant in participants: df = pd.read_csv(fenics / f"errors-{participant['name']}.csv", comment="#") + summary[f"time step size {participant['name']}"] = time_step_size summary[f"error {participant['name']}"] = df["errors"].abs().max() print("Done.") @@ -76,30 +80,52 @@ def do_run(dt, error_tol=10e-3, precice_config_params=default_precice_config_par min_dt = 0.1 dts = [min_dt * 0.5**i for i in range(5)] - df = pd.DataFrame(columns=["dt", "error Dirichlet", "error Neumann"]) + df = pd.DataFrame() precice_config_params = { 'max_used_iterations': 10, 'time_windows_reused': 5, } - summary_file = f"convergence-studies/{uuid.uuid4()}.csv" + summary_file = Path("convergence-studies") / f"{uuid.uuid4()}.csv" for dt in dts: - summary = do_run(dt, error_tol=10e10, precice_config_params=precice_config_params) - df = pd.concat([df, pd.DataFrame(summary, index=[0])], ignore_index=True) + for n in [1]: + summary = do_run(dt, n_substeps=n, error_tol=10e10, precice_config_params=precice_config_params) + df = pd.concat([df, pd.DataFrame(summary, index=[0])], ignore_index=True) - print(f"Write preliminary output to {summary_file}") - df.to_csv(summary_file) + print(f"Write preliminary output to {summary_file}") + df.to_csv(summary_file) - term_size = os.get_terminal_size() - print('-' * term_size.columns) - print(df) - print('-' * term_size.columns) + term_size = os.get_terminal_size() + print('-' * term_size.columns) + print(df) + print('-' * term_size.columns) - df = df.set_index('dt') + df = df.set_index(['time window size', 'time step size Dirichlet', 'time step size Neumann']) print(f"Write final output to {summary_file}") - df.to_csv(summary_file) + + import git + + repo_base = Path(__file__).parent / ".." + repo = git.Repo(repo_base) + chash = str(repo.head.commit)[:7] + if repo.is_dirty(): + chash += "-dirty" + + metadata={ + "git repository": repo.remotes.origin.url, + "git commit": chash, + "precice_config_params": precice_config_params, + } + + summary_file.unlink() + + with open(summary_file, 'a') as f: + for key, value in metadata.items(): + f.write(f"# {key}:{value}\n") + df.to_csv(f) + print('-' * term_size.columns) print(df) print('-' * term_size.columns) \ No newline at end of file diff --git a/partitioned-heat-conduction/precice-config-template.xml b/partitioned-heat-conduction/precice-config-template.xml index 2173fa3d9..bfb5eb95b 100644 --- a/partitioned-heat-conduction/precice-config-template.xml +++ b/partitioned-heat-conduction/precice-config-template.xml @@ -67,8 +67,8 @@ + -