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
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
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
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
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
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
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
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
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
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
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