예제 #1
0
def test_displacement(w_idx):
    # Arrange
    setup = Setup(w_avg=w_avgs[w_idx], N_STP=0, r_dry=1, mass_of_dry_air=1)
    setup.n_output = 50
    simulation = Simulation(setup)

    # Act
    output = simulation.run()

    # Assert
    np.testing.assert_almost_equal(min(output["z"]), 0, decimal=1)
    np.testing.assert_almost_equal(max(output["z"]), setup.z_half, decimal=1)
예제 #2
0
def test_energy_conservation(settings_idx, mass_of_dry_air):
    # Arrange
    settings = Settings(
        w_avg=setups[settings_idx].w_avg,
        N_STP=setups[settings_idx].N_STP,
        r_dry=setups[settings_idx].r_dry,
        mass_of_dry_air=mass_of_dry_air,
    )
    simulation = Simulation(settings)
    env = simulation.core.environment
    thd0 = env['thd']

    # Act
    simulation.run()

    # Assert
    np.testing.assert_approx_equal(thd0.to_ndarray(), env['thd'].to_ndarray())
예제 #3
0
def test_energy_conservation(setup_idx, mass_of_dry_air):
    # Arrange
    setup = Setup(
        w_avg=setups[setup_idx].w_avg,
        N_STP=setups[setup_idx].N_STP,
        r_dry=setups[setup_idx].r_dry,
        mass_of_dry_air=mass_of_dry_air,
    )
    simulation = Simulation(setup)
    env = simulation.particles.environment
    thd0 = env['thd']

    # Act
    simulation.run()

    # Assert
    np.testing.assert_approx_equal(thd0, env['thd'])
예제 #4
0
def test_water_mass_conservation(setup_idx, mass_of_dry_air, scheme):
    # Arrange
    setup = Setup(
        w_avg=setups[setup_idx].w_avg,
        N_STP=setups[setup_idx].N_STP,
        r_dry=setups[setup_idx].r_dry,
        mass_of_dry_air=mass_of_dry_air
    )
    setup.n_output = 50
    setup.scheme = scheme
    simulation = Simulation(setup)
    qt0 = setup.q0 + ql(simulation)

    # Act
    simulation.run()

    # Assert
    qt = simulation.particles.environment["qv"] + ql(simulation)
    np.testing.assert_approx_equal(qt, qt0, 14)  # TODO: was 15 at some point...
예제 #5
0
def test_water_mass_conservation(setup_idx, mass_of_dry_air, scheme):
    # Arrange
    setup = Setup(w_avg=setups[setup_idx].w_avg,
                  N_STP=setups[setup_idx].N_STP,
                  r_dry=setups[setup_idx].r_dry,
                  mass_of_dry_air=mass_of_dry_air)
    setup.n_output = 50
    setup.scheme = scheme
    simulation = Simulation(setup)
    qt0 = setup.q0 + ql(simulation)
    if scheme == 'BDF':
        bdf.patch_core(simulation.core)

    # Act
    simulation.run()

    # Assert
    qt = simulation.core.environment["qv"].to_ndarray() + ql(simulation)
    np.testing.assert_approx_equal(qt, qt0, 14)
예제 #6
0
def data(n_output, rtols, schemes, setups_num):
    resultant_data = {}
    for scheme in schemes:
        resultant_data[scheme] = {}
        if scheme == 'BDF':
            for rtol in rtols:
                resultant_data[scheme][rtol] = []
            for setup_idx in range(setups_num):
                setup = setups[setup_idx]
                setup.n_output = n_output
                simulation = Simulation(setup)
                bdf.patch_core(simulation.core, setup.coord, rtol=1e-4)
                results = simulation.run()
                for rtol in rtols:
                    resultant_data[scheme][rtol].append(results)
        else:
            for rtol in rtols:
                resultant_data[scheme][rtol] = []
                for setup_idx in range(setups_num):
                    setup = setups[setup_idx]
                    setup.scheme = scheme
                    setup.rtol_x = rtol
                    setup.rtol_thd = rtol
                    setup.n_output = n_output
                    simulation = Simulation(setup)
                    results = simulation.run()
                    resultant_data[scheme][rtol].append(results)
    return resultant_data
예제 #7
0
def data():
    # TODO: calculate BDF just once - as a reference solution
    data = {}
    for scheme in schemes:
        data[scheme] = {}
        for rtol in rtols:
            data[scheme][rtol] = []
            for setup_idx in range(setups_num):
                setup = setups[setup_idx]
                setup.scheme = scheme
                if scheme == 'default':
                    setup.rtol_x = rtol
                    setup.rtol_thd = rtol
                else:
                    setup.rtol_x = rtol
                    setup.rtol_thd = rtol
                setup.n_output = 20
                simulation = Simulation(setup)
                if scheme == 'BDF':
                    bdf.patch_particles(simulation.particles, setup.coord, rtol=1e-4)
                data[scheme][rtol].append(simulation.run())
    return data
예제 #8
0
def test_initialisation(setup_idx):
    # Arrange
    setup = setups[setup_idx]

    pv0 = setup.p0 / (1 + const.eps / setup.q0)
    pd0 = setup.p0 - pv0
    rhod0 = pd0 / const.Rd / setup.T0
    thd0 = phys.th_std(pd0, setup.T0)

    # Act
    simulation = Simulation(setup)

    # Assert
    env = simulation.particles.environment
    np.testing.assert_approx_equal(env['T'][:], setup.T0)
    np.testing.assert_approx_equal(env['RH'][:], pv0 / phys.pvs(setup.T0))
    np.testing.assert_approx_equal(env['p'][:], setup.p0)
    np.testing.assert_approx_equal(env['qv'][:], setup.q0)
    np.testing.assert_approx_equal(env['rhod'][:], rhod0)
    np.testing.assert_approx_equal(env['thd'][:], thd0)
예제 #9
0
def test_initialisation(settings_idx):
    # Arrange
    settings = setups[settings_idx]

    pv0 = settings.p0 / (1 + const.eps / settings.q0)
    pd0 = settings.p0 - pv0
    rhod0 = pd0 / const.Rd / settings.T0
    thd0 = phys.th_std(pd0, settings.T0)

    # Act
    simulation = Simulation(settings)

    # Assert
    env = simulation.core.environment
    np.testing.assert_approx_equal(env['T'].to_ndarray(), settings.T0)
    np.testing.assert_approx_equal(env['RH'].to_ndarray(),
                                   pv0 / phys.pvs(settings.T0))
    np.testing.assert_approx_equal(env['p'].to_ndarray(), settings.p0)
    np.testing.assert_approx_equal(env['qv'].to_ndarray(), settings.q0)
    np.testing.assert_approx_equal(env['rhod'].to_ndarray(), rhod0)
    np.testing.assert_approx_equal(env['thd'].to_ndarray(), thd0)
예제 #10
0
def main():
    for setup in setups:
        Simulation(setup).run()
예제 #11
0
def main():
    for settings in setups:
        Simulation(settings).run()