예제 #1
0
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)
예제 #2
0
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()
예제 #3
0
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
예제 #4
0
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