def test_wall_time(n_runs=3, mrats=[ 10, ], generate=False, print_tab=True, rtol=rtol): setup = Setup(nr=default_nr * 10, mixing_ratios_g_kg=np.array(mrats)) table_data = {"opts": [], "values": []} for grid in grid_layout_set: for opts in opt_set: i = 0 minimum_values = [] while i < n_runs: result = make_data(setup, grid, opts) wall_times = result['wall_time'] minimal = np.nanmin(wall_times) minimum_values.append(minimal) i += 1 selected_value = np.min(minimum_values) if opts == {'n_iters': 1}: norm = selected_value table_data["opts"].append( str(opts) + "(" + grid.__class__.__name__ + ")") table_data["values"].append(round(selected_value / norm, 1)) make_textable(data=table_data, generate=generate, print_tab=print_tab) compare_refdata(data=table_data["values"], rtol=rtol, generate=generate)
def test_init(grid_layout, psi_coord, flux_corrected_transport): # Arrange opts = Options(flux_corrected_transport=flux_corrected_transport) setup = Setup() # Act simulation = Simulation(setup, grid_layout=grid_layout, GC_max=default_GC_max, psi_coord=psi_coord, opts=opts) simulation.step(1) # Asserts for array shapes assert simulation.n.shape[0] == setup.nr # Asserts for Jacobian G_with_halo = simulation.solver.g_factor.data assert np.isfinite(G_with_halo).all() if type(psi_coord) == type(grid_layout): np.testing.assert_array_almost_equal(np.diff(G_with_halo), 0) else: assert (np.diff(G_with_halo) >= 0).all() or (np.diff(G_with_halo) <= 0).all()
def compute_figure_data(*, nr, GC_max, psi_coord=x_id(), grid_layouts=(x_id(), x_p2(), x_log_of_pn(n=1)), opt_set=({ 'n_iters': 1 }, ), mixing_ratios_g_kg=default_mixing_ratios_g_kg): setup = Setup(nr=nr, mixing_ratios_g_kg=mixing_ratios_g_kg) with parallel_backend('threading', n_jobs=-2): results = Parallel(verbose=10)( delayed(analysis)(setup, grid_layout, psi_coord, options, GC_max) for grid_layout in grid_layouts for options in deepcopy(opt_set)) cases = {} for result in results: case = Case(result) if case.grid_layour_str not in cases: cases[case.grid_layour_str] = case
from MPyDATA_examples.Olesik_et_al_2020.simulation import Simulation from MPyDATA_examples.Olesik_et_al_2020.setup import Setup, default_nr, default_GC_max from MPyDATA_examples.Olesik_et_al_2020.coordinates import x_id, x_log_of_pn, x_p2 from MPyDATA_examples.Olesik_et_al_2020.analysis import compute_figure_data from MPyDATA.options import Options import pytest import numpy as np setup = Setup() grid_layout_set = (x_id(), x_p2(), x_log_of_pn(r0=1, n=1)) opt_set = ({ 'n_iters': 1 }, { 'n_iters': 2, 'flux_corrected_transport': True }, { 'n_iters': 3, 'third_order_terms': True, 'infinite_gauge': True, 'flux_corrected_transport': True }) @pytest.fixture(scope='module') def data(): result, _ = compute_figure_data(nr=default_nr, GC_max=default_GC_max, psi_coord=x_id(), grid_layouts=grid_layout_set, opt_set=opt_set) return result