Beispiel #1
0
def test_frost_number_initialize_sets_year():
    """ help ensure proper initialization by checking for first year value """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_oneyear_filename)

    # Assert the values from the cfg file
    assert fn.model.year == 2000
Beispiel #2
0
def test_frost_number_implements_finalize():
    """ Test BMI-required finalize() routine """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    fn.update_until(fn.model.end_year)
    fn.finalize()
    files_to_remove.append(fn.model.fn_out_filename)
Beispiel #3
0
def test_frost_number_update_increments_year():
    """ Test update increments time """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)

    fn.update()
    assert fn.model.year == fn.model.start_year + fn.model.dt
    assert fn.model.year != fn.model.start_year
Beispiel #4
0
def test_frost_number_initialize_sets_air_min_and_max():
    """ Verify initialied values """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_oneyear_filename)

    # Assert the values from the cfg file
    assert fn.model.T_air_min == -20.0
    assert fn.model.T_air_max == 10.0
Beispiel #5
0
def test_frostnumber_set_value_with_scalars(tmpdir):
    """Test set_values changes the frost number to the correct value."""
    with tmpdir.as_cwd():
        write_config_file("frost_number.cfg", t_air_max=10.)

        fn = bmi_frost_number.BmiFrostnumberMethod()
        fn.initialize(cfg_file="frost_number.cfg")
        fn.update()
        expected_value = fn.get_value("frostnumber__air")

        write_config_file("frost_number.cfg", t_air_max=999.)
        fn = bmi_frost_number.BmiFrostnumberMethod()
        fn.initialize(cfg_file="frost_number.cfg")
        fn.update()

        fn.set_value("atmosphere_bottom_air__time_max_of_temperature", 10)
        fn.update()
        assert fn.get_value("frostnumber__air") == approx(expected_value)
Beispiel #6
0
def test_frostnumber_get_attribute():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    # Check an attribute that exists
    this_att = fn.get_attribute('time_units')
    assert_equal(this_att, 'years')

    # Check an attribute that doesn't exist
    assert_raises(KeyError, fn.get_attribute, 'not_an_attribute')
Beispiel #7
0
def test_frost_number_update_changes_air_frost_number():
    """ Test that value changes with update """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)

    fn.update()
    afn0 = fn.model.air_frost_number
    fn.update()
    afn1 = fn.model.air_frost_number
    assert afn0 != afn1
Beispiel #8
0
def test_frostnumber_updating_with_scalars(tmpdir):
    """Test updating past one year with scalars."""
    start_year, end_year = 2000, 2010
    with tmpdir.as_cwd():
        write_config_file("frost_number.cfg",
                          start_year=start_year,
                          end_year=end_year)

        fn = bmi_frost_number.BmiFrostnumberMethod()
        fn.initialize(cfg_file="frost_number.cfg")
        for year in range(start_year, end_year):
            assert fn.get_value("frostnumber__air") == approx(0.5)
            assert fn.get_current_time() == (year - start_year)
            fn.update()
Beispiel #9
0
def test_frost_number_runs_several_years():
    """ Test that frostnumber advances over several years """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)

    while fn.model.year < fn.model.end_year:
        fn.update()

    assert fn.model.output is not None

    # Ensure that each year exists in the output dictionary
    year = fn.model.start_year
    while year < fn.model.end_year:
        assert year in fn.model.output.keys()
        year += 1
Beispiel #10
0
def test_frost_number_has_initialize():
    """ Test that the BMI frost number module has initialize() """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_oneyear_filename)
Beispiel #11
0
def test_bmi_fn_get_var_units():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    assert 'deg' in fn.get_var_units(
        'atmosphere_bottom_air__time_min_of_temperature')
Beispiel #12
0
def test_bmi_fn_get_var_name():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    assert 'air_frost_number' in fn.get_var_name('frostnumber__air')
Beispiel #13
0
def test_frostnumber_update_frac():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    fn.update_frac(2)
Beispiel #14
0
def test_frost_number_implements_update_until():
    """ Test that can update to arbitrary time """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)

    fn.update_until(fn.model.end_year)
Beispiel #15
0
def test_bmi_fn_get_output_var_names():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    assert_in('frostnumber__air', fn.get_output_var_names())
Beispiel #16
0
def test_bmi_fn_get_input_var_names():
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    assert_in('atmosphere_bottom_air__temperature', fn.get_input_var_names())
Beispiel #17
0
def test_frost_number_get_end_time_returns_scalar_float():
    """ Test that end time is floating point """
    fn = bmi_frost_number.BmiFrostnumberMethod()
    fn.initialize(cfg_file=onesite_multiyear_filename)
    end_time = fn.get_end_time()
    assert isinstance(end_time, float)
Beispiel #18
0
Usage:
    python try_fn.py

"""

import os
from permamodel.components import frost_number
from permamodel.components import bmi_frost_number
from permamodel import examples_directory

# Set the file names for the example cfg files
onesite_singleyear_filename = \
        os.path.join(examples_directory,
                     'Frostnumber_example_singlesite_singleyear.cfg')
onesite_multiyear_filename = \
        os.path.join(examples_directory,
                     'Frostnumber_example_singlesite_multiyear.cfg')

fn = bmi_frost_number.BmiFrostnumberMethod()
fn.initialize(cfg_file=onesite_singleyear_filename)
fn.update_until(fn.get_end_time())
fn.finalize()
print('Successfully finished running singleyear FrostNumber component')

fn = bmi_frost_number.BmiFrostnumberMethod()
fn.initialize(cfg_file=onesite_multiyear_filename)
fn.update_until(fn.get_end_time())
fn.finalize()
print('Successfully finished running multiyear FrostNumber component')