Skip to content

Commit a1306fc

Browse files
committed
Added script for running experiment to RBC project
1 parent f4086a7 commit a1306fc

File tree

4 files changed

+95
-8
lines changed

4 files changed

+95
-8
lines changed

pySDC/projects/RayleighBenard/analysis_scripts/RBC3D_order.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import pickle
33
import numpy as np
44
from pySDC.helpers.fieldsIO import FieldsIO
5-
from pySDC.projects.GPU.configs.base_config import get_config
5+
from pySDC.projects.RayleighBenard.RBC3D_configs import get_config
66
from pySDC.implementations.problem_classes.RayleighBenard3D import RayleighBenard3D
77
from mpi4py import MPI
88
import matplotlib.pyplot as plt
@@ -103,7 +103,7 @@ def compare_order(Ra): # pragma: no cover
103103

104104

105105
def run(args, dt, Tend):
106-
from pySDC.projects.GPU.run_experiment import run_experiment
106+
from pySDC.projects.RayleighBenard.run_experiment import run_experiment
107107
from pySDC.core.errors import ConvergenceError
108108

109109
args['mode'] = 'run'
@@ -134,7 +134,7 @@ def run(args, dt, Tend):
134134

135135

136136
if __name__ == '__main__':
137-
from pySDC.projects.GPU.run_experiment import parse_args
137+
from pySDC.projects.RayleighBenard.run_experiment import parse_args
138138

139139
args = parse_args()
140140

pySDC/projects/RayleighBenard/analysis_scripts/process_RBC3D_data.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from pySDC.projects.GPU.configs.base_config import get_config
2-
from pySDC.projects.GPU.run_experiment import parse_args
1+
from pySDC.projects.RayleighBenard.RBC3D_configs import get_config
2+
from pySDC.projects.RayleighBenard.run_experiment import parse_args
33
from pySDC.helpers.fieldsIO import FieldsIO
44
import matplotlib.pyplot as plt
55
from tqdm import tqdm
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
def parse_args():
2+
import argparse
3+
4+
def cast_to_bool(me):
5+
return False if me in ['False', '0', 0] else True
6+
7+
def str_to_procs(me):
8+
procs = me.split('/')
9+
assert len(procs) == 3
10+
return [int(p) for p in procs]
11+
12+
parser = argparse.ArgumentParser()
13+
parser.add_argument('--useGPU', type=cast_to_bool, help='Toggle for GPUs', default=False)
14+
parser.add_argument(
15+
'--mode',
16+
type=str,
17+
help='Mode for this script',
18+
default='run',
19+
choices=['run'],
20+
)
21+
parser.add_argument('--config', type=str, help='Configuration to load', default=None)
22+
parser.add_argument('--restart_idx', type=int, help='Restart from file by index', default=0)
23+
parser.add_argument('--procs', type=str_to_procs, help='Processes in steps/sweeper/space', default='1/1/1')
24+
parser.add_argument('--res', type=int, help='Space resolution along first axis', default=-1)
25+
parser.add_argument('--dt', type=float, help='(Starting) Step size', default=-1)
26+
parser.add_argument(
27+
'--logger_level', type=int, help='Logger level on the first rank in space and in the sweeper', default=15
28+
)
29+
parser.add_argument('-o', type=str, help='output path', default='./')
30+
31+
return vars(parser.parse_args())
32+
33+
34+
def run_experiment(args, config, **kwargs):
35+
import pickle
36+
import os
37+
38+
from pySDC.implementations.controller_classes.controller_nonMPI import controller_nonMPI
39+
from pySDC.helpers.stats_helper import filter_stats
40+
41+
type(config).base_path = args['o']
42+
os.makedirs(f'{args["o"]}/data', exist_ok=True)
43+
44+
description = config.get_description(
45+
useGPU=args['useGPU'], MPIsweeper=args['procs'][1] > 1, res=args['res'], dt=args['dt'], **kwargs
46+
)
47+
controller_params = config.get_controller_params(logger_level=args['logger_level'])
48+
49+
if args['useGPU']:
50+
from pySDC.implementations.hooks.log_timings import GPUTimings
51+
52+
controller_params['hook_class'].append(GPUTimings)
53+
54+
assert (
55+
config.comms[0].size == 1
56+
), 'Have not figured out how to do MPI controller with GPUs yet because I need NCCL for that!'
57+
controller = controller_nonMPI(num_procs=1, controller_params=controller_params, description=description)
58+
prob = controller.MS[0].levels[0].prob
59+
60+
u0, t0 = config.get_initial_condition(prob, restart_idx=args['restart_idx'])
61+
62+
config.prepare_caches(prob)
63+
64+
uend, stats = controller.run(u0=u0, t0=t0, Tend=config.Tend)
65+
66+
combined_stats = filter_stats(stats, comm=config.comm_world)
67+
68+
if config.comm_world.rank == config.comm_world.size - 1:
69+
path = f'{config.base_path}/data/{config.get_path()}-stats-whole-run.pickle'
70+
with open(path, 'wb') as file:
71+
pickle.dump(combined_stats, file)
72+
print(f'Stored stats in {path}', flush=True)
73+
74+
return uend
75+
76+
77+
if __name__ == '__main__':
78+
from pySDC.projects.RayleighBenard.RBC3D_configs import get_config
79+
80+
args = parse_args()
81+
82+
config = get_config(args)
83+
84+
if args['mode'] == 'run':
85+
run_experiment(args, config)
86+
else:
87+
raise NotImplementedError

pySDC/projects/RayleighBenard/tests/test_RBC_3D_analysis.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def get_args(path):
1818

1919

2020
def get_config(args):
21-
from pySDC.projects.GPU.configs.base_config import get_config
21+
from pySDC.projects.RayleighBenard.RBC3D_configs import get_config
2222

2323
config = get_config(args)
2424
config.Tend = 1
@@ -27,7 +27,7 @@ def get_config(args):
2727

2828

2929
def generate_simulation_file(path, args=None):
30-
from pySDC.projects.GPU.run_experiment import run_experiment
30+
from pySDC.projects.RayleighBenard.run_experiment import run_experiment
3131

3232
args = {**get_args(path), **args} if args is not None else get_args(path)
3333
config = get_config(args)
@@ -56,7 +56,7 @@ def tmp_processed_data(tmp_sim_data, tmp_path):
5656

5757

5858
def test_ic_interpolation(tmp_sim_data, tmp_path):
59-
from pySDC.projects.GPU.run_experiment import run_experiment
59+
from pySDC.projects.RayleighBenard.run_experiment import run_experiment
6060

6161
args = get_args(tmp_path)
6262

0 commit comments

Comments
 (0)