Ejemplo n.º 1
0
def test_get_sa_coefficients():
    """
    Run RMG's minimal example with SA.
    Then run the `get_sa_coefficients()` method to test that the adapter correctly parses the bsol object
    to obtain sa_dict.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    observable_list = ['OH', 'H']
    rms_simulator_adapter = RMSConstantHP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=observable_list,
        sa_atol=t3.t3['sensitivity']['atol'],
        sa_rtol=t3.t3['sensitivity']['rtol'],
    )
    rms_simulator_adapter.simulate()
    sa_dict = rms_simulator_adapter.get_sa_coefficients()

    # check that there are over 20 time steps (as an arbitrary number) to indicate that the solver completed
    assert len(sa_dict['time']) > 20
    # check that there are SA data for the 2 requested species
    assert len(sa_dict['kinetics']) == 2
    assert len(sa_dict['thermo']) == 2
Ejemplo n.º 2
0
def test_get_species_by_label():
    """Test getting species by label"""
    t3 = run_minimal(
        project_directory=os.path.join(DATA_BASE_PATH, 'minimal_data'),
        iteration=1,
        set_paths=True,
    )
    rmg_species, rmg_reactions = t3.load_species_and_reactions_from_chemkin_file(
    )
    label = 'H2O'
    species = common.get_species_by_label(label, rmg_species)
    assert species.label == label
    assert species.index == 7
Ejemplo n.º 3
0
def test_find_equilibrium():
    """
    Find equilibrium mole fractions of RMG's minimal example.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    cantera_simulator_adapter = CanteraConstantHP(t3=t3.t3,
                                                  rmg=t3.rmg,
                                                  paths=t3.paths,
                                                  logger=t3.logger,
                                                  atol=t3.rmg['model']['atol'],
                                                  rtol=t3.rmg['model']['rtol'],
                                                  observable_list=list(),
                                                  )
    cantera_simulator_adapter.conditions
    equilibrium_dictionaries = cantera_simulator_adapter.find_equilibrium('TP')
    assert len(equilibrium_dictionaries[0].keys()) == 8
Ejemplo n.º 4
0
def test_get_t50():
    """
    Find half life of give species from RMG's minimal example.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    cantera_simulator_adapter = CanteraConstantHP(t3=t3.t3,
                                                  rmg=t3.rmg,
                                                  paths=t3.paths,
                                                  logger=t3.logger,
                                                  atol=t3.rmg['model']['atol'],
                                                  rtol=t3.rmg['model']['rtol'],
                                                  observable_list=list(),
                                                  )
    cantera_simulator_adapter.simulate()
    t50_list = cantera_simulator_adapter.get_t50('H2(1)')
    assert len(t50_list) == 1
Ejemplo n.º 5
0
def test_get_idt_by_T():
    """
    Calculate the ignition delay time for RMG's minimal example. Check that the dictionary found an idt.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    cantera_simulator_adapter = CanteraConstantHP(t3=t3.t3,
                                                  rmg=t3.rmg,
                                                  paths=t3.paths,
                                                  logger=t3.logger,
                                                  atol=t3.rmg['model']['atol'],
                                                  rtol=t3.rmg['model']['rtol'],
                                                  observable_list=list(),
                                                  )
    cantera_simulator_adapter.simulate()
    idt_dict = cantera_simulator_adapter.get_idt_by_T()
    assert len(idt_dict['idt']) == 1
    assert len(idt_dict['idt_index']) == 1
Ejemplo n.º 6
0
def test_set_up_no_sa():
    """
    Simulate RMG's minimal example without SA. By setting observable_list = list(), no SA is run.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    cantera_simulator_adapter = CanteraConstantHP(t3=t3.t3,
                                                  rmg=t3.rmg,
                                                  paths=t3.paths,
                                                  logger=t3.logger,
                                                  atol=t3.rmg['model']['atol'],
                                                  rtol=t3.rmg['model']['rtol'],
                                                  observable_list=list(),
                                                  )
    cantera_simulator_adapter.simulate()
    # check that there are over 20 time steps (as an arbitrary number) to indicate that the solver completed
    time = cantera_simulator_adapter.all_data[0][0].data
    assert len(time) > 20
Ejemplo n.º 7
0
def test_get_idt_by_T():
    """
    Calculate the ignition delay time for RMG's minimal example.
    Since this adapter simulates at constant T, this method returns a dictionary whose values are empty lists.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    rmg_simulator_adapter = RMGConstantTP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=list(),
    )
    rmg_simulator_adapter.simulate()
    idt_dict = rmg_simulator_adapter.get_idt_by_T()
    assert len(idt_dict['idt']) == 0
    assert len(idt_dict['idt_index']) == 0
Ejemplo n.º 8
0
def test_set_up_no_sa():
    """
    Run RMG's minimal example without SA by testing the `set_up` method within the RMSSimulator init method.
    By setting observable_list = list(), no SA is run. Instead, RMS is used to just simulate the mechanism.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()

    rms_simulator_adapter = RMSConstantHP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=list(),
    )
    rms_simulator_adapter.simulate()
    # check that there are over 20 time steps (as an arbitrary number) to indicate that the solver completed
    assert len(rms_simulator_adapter.sol.t) > 20
Ejemplo n.º 9
0
def test_get_idt_by_T():
    """
    Calculate the ignition delay time for RMG's minimal example.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    rms_simulator_adapter = RMSConstantHP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=list(),
        sa_atol=t3.t3['sensitivity']['atol'],
        sa_rtol=t3.t3['sensitivity']['rtol'],
    )
    rms_simulator_adapter.simulate()
    idt_dict = rms_simulator_adapter.get_idt_by_T()
    assert len(idt_dict['idt']) == 1
    assert len(idt_dict['idt_index']) == 1
Ejemplo n.º 10
0
def test_get_sa_coefficients():
    """
    Run RMG's minimal example with SA by testing the `set_up` method within the RMGConstantTP init method.
    Then run the `get_sa_coefficients()` method to test that RMGConstantTP correctly parses the SA csv files
    to obtain sa_dict.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()
    observable_list = ['OH', 'H']
    rmg_simulator_adapter = RMGConstantTP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=observable_list,
        sa_atol=t3.t3['sensitivity']['atol'],
        sa_rtol=t3.t3['sensitivity']['rtol'],
    )
    rmg_simulator_adapter.simulate()
    # check that RMG ran SA
    performed_sa = os.path.isdir(t3.paths['SA'])
    assert performed_sa
    # check that RMG produced the corresponding csv files
    files = [
        'sensitivity_1_SPC_3.csv', 'sensitivity_1_SPC_4.csv',
        'simulation_1_12.csv'
    ]
    for file in files:
        exist = os.path.isfile(os.path.join(t3.paths['SA solver'], file))
        assert exist
    # check that RMG can correctly parse the csv files to product the SA dictionary
    sa_dict = rmg_simulator_adapter.get_sa_coefficients()
    # check that there are over 100 time steps (as an arbitrary number) to indicate that the solver completed
    assert len(sa_dict['time']) > 100
    # check that there are SA data for the 2 requested species
    assert len(sa_dict['kinetics']) == 2
    assert len(sa_dict['thermo']) == 2
Ejemplo n.º 11
0
def test_set_up_no_sa():
    """
    Run RMG's minimal example without SA by testing the `set_up` method within the RMGSimulator init method.
    By setting observable_list = list(), no SA is run. Instead, RMG is just used to simulate the mechanism.
    """
    t3 = run_minimal(project_directory=TEST_DIR)
    t3.set_paths()

    rmg_simulator_adapter = RMGConstantTP(
        t3=t3.t3,
        rmg=t3.rmg,
        paths=t3.paths,
        logger=t3.logger,
        atol=t3.rmg['model']['atol'],
        rtol=t3.rmg['model']['rtol'],
        observable_list=list(),
    )
    rmg_simulator_adapter.simulate()
    # check that RMG produced the concentration profiles
    concentration_profiles = os.path.isfile(
        os.path.join(t3.paths['RMG'], 'solver', 'simulation_1_12.csv'))
    assert concentration_profiles