def running_full_shock_tube(self,processor=None, experiment_dictonary:dict={}, kineticSens = 1, physicalSens = 1, dk = .01, exp_number=1): shock_tube = st.shockTube(pressure = experiment_dictonary['pressure'], temperature = experiment_dictonary['temperature'], observables = experiment_dictonary['observables'], kineticSens = kineticSens, physicalSens = physicalSens, conditions = experiment_dictonary['conditions'], initialTime = experiment_dictonary['initialTime'], finalTime = experiment_dictonary['finalTime'], thermalBoundary = experiment_dictonary['thermalBoundary'], mechanicalBoundary = experiment_dictonary['mechanicalBoundary'], processor = processor, save_timeHistories = 1, save_physSensHistories = 1, moleFractionObservables = experiment_dictonary['moleFractionObservables'], concentrationObservables = experiment_dictonary['concentrationObservables'], fullParsedYamlFile = experiment_dictonary) csv_paths = [x for x in experiment_dictonary['moleFractionCsvFiles'] + experiment_dictonary['concentrationCsvFiles'] if x is not None] exp_data = shock_tube.importExperimentalData(csv_paths) shock_tube.run() ######################################################################## #check this tomorrow ################################################################################ int_ksens_exp_mapped= shock_tube.map_and_interp_ksens()#ksens is wiped on rerun so int it before shock_tube.sensitivity_adjustment(temp_del = dk) shock_tube.sensitivity_adjustment(pres_del = dk) shock_tube.species_adjustment(dk) ############################################### check to make sure these aren't effected int_tp_psen_against_experimental = shock_tube.interpolate_experimental([shock_tube.interpolate_physical_sensitivities(index=1), shock_tube.interpolate_physical_sensitivities(index=2)]) int_spec_psen_against_experimental = shock_tube.interpolate_experimental(pre_interpolated=shock_tube.interpolate_species_sensitivities()) ###############saving the shock tube experimental interpolated time history single_data = shock_tube.interpolate_experimental(single=shock_tube.timeHistories[0]) shock_tube.savingInterpTimeHistoryAgainstExp(single_data) #tab starting here tomorrow shock_tube.interpolatePressureandTempToExperiment(shock_tube,exp_data) ############### ############### experiment = self.build_single_exp_dict(exp_number, shock_tube, int_ksens_exp_mapped, int_tp_psen_against_experimental, int_spec_psen_against_experimental, experimental_data = exp_data) #write test case and check if we can get as far as just returnign the experiment return experiment
) #get rid of this at some point with central test script or when package is built os.chdir('../../') import MSI.simulations.instruments.shock_tube as st import MSI.cti_core.cti_processor as pr import cantera as ct test_p = pr.Processor('MSI/data/test_data/FFCM1.cti') test_tube = st.shockTube(pressure=1.74, temperature=1880, observables=['OH', 'H2O'], kineticSens=1, physicalSens=0, conditions={ 'H2O': .013, 'O2': .0099, 'H': .0000007, 'Ar': 0.9770993 }, initialTime=0, finalTime=0.1, thermalBoundary='Adiabatic', mechanicalBoundary='constant pressure', processor=test_p, save_timeHistories=1) test_tube.run() test_tube.sensitivity_adjustment(temp_del=.01) test_tube.species_adjustment(spec_del=.01) print(test_tube.timeHistories) test_tube.write_time_histories()
for ii,specie in enumerate(species_list): if specie !=0.0: conditions_dict[species_string[ii]] = specie if species_string[ii] != 'Ar': temp_uncertainty.append(uncertainty_string[ii]) temp_uncertainty_species.append(species_string[ii]) print(conditions_dict) test_tube = st.shockTube(pressure=Press, temperature=Temp, observables=['OH'], kineticSens=0, physicalSens=0, conditions=conditions_dict, initialTime=0, finalTime=0.02, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p, save_timeHistories=1, save_physSensHistories=1) test_tube.run() time_History = test_tube.timeHistory fall_off = time_History['H'][0]/time_History['H'] temp=None for j,value in enumerate(fall_off): if value>5: temp = j-1
# processor=test_p, # save_timeHistories=1, # save_physSensHistories=1) test_p = pr.Processor('MSI/data/test_data/FFCM1.cti') test_tube = st.shockTube(pressure=0.986923, temperature=295, observables=['CH3', 'OH', 'HO2'], kineticSens=1, physicalSens=0, conditions={ 'CH3': 1.2094157562676408e-06, 'HO2': 7.614839946870331e-07, 'OH': 3.041863871824672e-06, 'H2O2': 0.0001531112203220986, 'CH4': 0.0007737003154574132, 'H2O': 0.9990681757005978 }, initialTime=0, finalTime=0.003, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p, save_timeHistories=1, save_physSensHistories=1) test_tube.run() k_sens = test_tube.kineticSensitivities reactions = test_tube.processor.solution.reaction_equations()
def run_shocktube(self, ksens_marker: int = 1, psens_marker: int = 1): ''' Function calls and runs a shock tube simulation with the appropriate ksens_marker and psens_marker depending on the situation. Parameters ---------- ksens_marker : int, optional If 1 kinetic sensitivity on, if 0 off. The default is 1. psens_marker : TYPE, optional If 1 physical sensitivity on, if 0 off. The default is 1. Returns ------- shock_tube : shock_tube_object Shock tube simulation and all variables, functions and object it contains. ''' if ksens_marker == 0 and psens_marker == 0: shock_tube = st.shockTube( pressure=self.pressure, temperature=self.temperature, observables=self.observables, kineticSens=0, physicalSens=0, conditions=self.conditions, initialTime=self.initialTime, finalTime=self.finalTime, thermalBoundary=self.thermalBoundary, mechanicalBoundary=self.mechanicalBoundary, processor=self.processor, save_timeHistories=1, save_physSensHistories=0, moleFractionObservables=self.moleFractionObservables, concentrationObservables=self.concentrationObservables, fullParsedYamlFile=self.fullParsedYamlFile, time_shift_value=self.timeshift) shock_tube.run() return shock_tube elif ksens_marker == 1 and psens_marker == 0: shock_tube = st.shockTube( pressure=self.pressure, temperature=self.temperature, observables=self.observables, kineticSens=1, physicalSens=0, conditions=self.conditions, initialTime=self.initialTime, finalTime=self.finalTime, thermalBoundary=self.thermalBoundary, mechanicalBoundary=self.mechanicalBoundary, processor=self.processor, save_timeHistories=1, save_physSensHistories=0, moleFractionObservables=self.moleFractionObservables, concentrationObservables=self.concentrationObservables, fullParsedYamlFile=self.fullParsedYamlFile, time_shift_value=self.timeshift) shock_tube.run() return shock_tube elif ksens_marker == 0 and psens_marker == 1: shock_tube = st.shockTube( pressure=self.pressure, temperature=self.temperature, observables=self.observables, kineticSens=0, physicalSens=1, conditions=self.conditions, initialTime=self.initialTime, finalTime=self.finalTime, thermalBoundary=self.thermalBoundary, mechanicalBoundary=self.mechanicalBoundary, processor=self.processor, save_timeHistories=1, save_physSensHistories=0, moleFractionObservables=self.moleFractionObservables, concentrationObservables=self.concentrationObservables, fullParsedYamlFile=self.fullParsedYamlFile, time_shift_value=self.timeshift) shock_tube.run() return shock_tube elif ksens_marker == 1 and psens_marker == 1: shock_tube = st.shockTube( pressure=self.pressure, temperature=self.temperature, observables=self.observables, kineticSens=1, physicalSens=1, conditions=self.conditions, initialTime=self.initialTime, finalTime=self.finalTime, thermalBoundary=self.thermalBoundary, mechanicalBoundary=self.mechanicalBoundary, processor=self.processor, save_timeHistories=1, save_physSensHistories=0, moleFractionObservables=self.moleFractionObservables, concentrationObservables=self.concentrationObservables, fullParsedYamlFile=self.fullParsedYamlFile, time_shift_value=self.timeshift) shock_tube.run() return shock_tube
# test_tube.run() # #test_tube.printVars() # time_History = test_tube.timeHistory test_p = pr.Processor( '/Users/carlylagrotta/Dropbox/Columbia/MSI/data/branching_reaction_study/FFCM1_custom_cheb_extra_zeros_new_extra_reactions_precursor.cti' ) test_tube = st.shockTube(pressure=0.6008089141308347, temperature=1925, observables=['OH'], kineticSens=0, physicalSens=0, conditions={ 'CH3OH': 0.000023898, 'Ar': 0.999976102 }, initialTime=0, finalTime=.002, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p, save_timeHistories=1, save_physSensHistories=1) test_tube.run() #test_tube.printVars() time_History = test_tube.timeHistory # plt.plot(time_History['time'],time_History['pressure']/100000) # plt.ylim(0,140) # plt.figure() # plt.plot(time_History['time'],time_History['temperature'])
def running_shock_tube_absorption_only(self,processor=None, experiment_dictonary:dict={}, absorbance_yaml_file_path = '', kineticSens = 1, physicalSens = 1, dk = .01, exp_number=1): shock_tube = st.shockTube(pressure = experiment_dictonary['pressure'], temperature = experiment_dictonary['temperature'], observables = experiment_dictonary['observables'], kineticSens = kineticSens, physicalSens = physicalSens, conditions = experiment_dictonary['conditions'], initialTime = experiment_dictonary['initialTime'], finalTime = experiment_dictonary['finalTime'], thermalBoundary = experiment_dictonary['thermalBoundary'], mechanicalBoundary = experiment_dictonary['mechanicalBoundary'], processor = processor, save_timeHistories = 1, save_physSensHistories = 1, moleFractionObservables = experiment_dictonary['moleFractionObservables'], absorbanceObservables = experiment_dictonary['absorbanceObservables'], concentrationObservables = experiment_dictonary['concentrationObservables'], fullParsedYamlFile = experiment_dictonary) shock_tube.run() abs_instance = csp.Absorb() parser = yp.Parser() abs_loaded = parser.load_to_obj(absorbance_yaml_file_path) abs_data = abs_instance.superimpose_shock_tube(shock_tube,abs_loaded,experiment_dictonary['pathLength'], kinetic_sens=kineticSens) #print(abs_data) perturbed_coef = abs_instance.perturb_abs_coef(dk, shock_tube, abs_loaded, experiment_dictonary['pathLength'], summed_data = abs_data[0]) shock_tube.sensitivity_adjustment(temp_del = dk) shock_tube.sensitivity_adjustment(pres_del = dk) shock_tube.species_adjustment(dk) abs_phys_sens = abs_instance.absorb_phys_sensitivities(shock_tube,abs_data[0],abs_loaded, experiment_dictonary['pathLength'], dk = dk) #int_ksens_exp_mapped= shock_tube.map_and_interp_ksens() loaded_experimental_data_absorbance = abs_instance.import_experimental_data(experiment_dictonary['absorbanceCsvFiles']) interp_abs_exp= abs_instance.interpolate_experimental(shock_tube,loaded_experimental_data_absorbance, original_summed_absorption=abs_data[0], abs_kinetic_sens = abs_data[1], abs_phys_sens = abs_phys_sens, abs_coef_sens = perturbed_coef) time_history_interp_against_experiment_dict = abs_instance.interpolate_experimental(shock_tube, loaded_experimental_data_absorbance, time_history = shock_tube.timeHistories[0]) experiment = self.build_single_exp_dict(exp_number, shock_tube, None, None, None, interpolated_absorbance=interp_abs_exp, absorbance_experimental_data = loaded_experimental_data_absorbance, time_history_interpolated_against_absorbance_experiment = time_history_interp_against_experiment_dict) return experiment
def running_full_shock_tube_absorption(self,processor=None, experiment_dictonary:dict={}, absorbance_yaml_file_path = '', kineticSens = 1, physicalSens = 1, dk = .01, exp_number=1): shock_tube = st.shockTube(pressure = experiment_dictonary['pressure'], temperature = experiment_dictonary['temperature'], observables = experiment_dictonary['observables'], kineticSens = kineticSens, physicalSens = physicalSens, conditions = experiment_dictonary['conditions'], initialTime = experiment_dictonary['initialTime'], finalTime = experiment_dictonary['finalTime'], thermalBoundary = experiment_dictonary['thermalBoundary'], mechanicalBoundary = experiment_dictonary['mechanicalBoundary'], processor = processor, save_timeHistories = 1, save_physSensHistories = 1, moleFractionObservables = experiment_dictonary['moleFractionObservables'], absorbanceObservables = experiment_dictonary['absorbanceObservables'], concentrationObservables = experiment_dictonary['concentrationObservables'], fullParsedYamlFile = experiment_dictonary) csv_paths = [x for x in experiment_dictonary['moleFractionCsvFiles'] + experiment_dictonary['concentrationCsvFiles'] if x is not None] exp_data = shock_tube.importExperimentalData(csv_paths) shock_tube.run() #this might be in the wrong spot int_ksens_exp_mapped= shock_tube.map_and_interp_ksens() abs_instance = csp.Absorb() parser = yp.Parser() abs_loaded = parser.load_to_obj(absorbance_yaml_file_path) abs_data = abs_instance.superimpose_shock_tube(shock_tube,abs_loaded,experiment_dictonary['pathLength'], kinetic_sens=kineticSens) perturbed_coef = abs_instance.perturb_abs_coef(dk, shock_tube, abs_loaded, experiment_dictonary['pathLength'], summed_data = abs_data[0]) shock_tube.sensitivity_adjustment(temp_del = dk) shock_tube.sensitivity_adjustment(pres_del = dk) shock_tube.species_adjustment(dk) int_tp_psen_against_experimental = shock_tube.interpolate_experimental([shock_tube.interpolate_physical_sensitivities(index=1), shock_tube.interpolate_physical_sensitivities(index=2)]) int_spec_psen_against_experimental = shock_tube.interpolate_experimental(pre_interpolated=shock_tube.interpolate_species_sensitivities()) abs_phys_sens = abs_instance.absorb_phys_sensitivities(shock_tube,abs_data[0],abs_loaded, experiment_dictonary['pathLength'], dk = dk) loaded_experimental_data_absorbance = abs_instance.import_experimental_data(experiment_dictonary['absorbanceCsvFiles']) interp_abs_exp= abs_instance.interpolate_experimental(shock_tube,loaded_experimental_data_absorbance, original_summed_absorption=abs_data[0], abs_kinetic_sens = abs_data[1], abs_phys_sens = abs_phys_sens, abs_coef_sens = perturbed_coef) time_history_interp_against_experiment_dict = abs_instance.interpolate_experimental(shock_tube, loaded_experimental_data_absorbance, time_history = shock_tube.timeHistories[0]) ################################################################################# single_data = shock_tube.interpolate_experimental(single=shock_tube.timeHistories[0]) shock_tube.savingInterpTimeHistoryAgainstExp(single_data) shock_tube.interpolatePressureandTempToExperiment(shock_tube,exp_data) #################################################################################### experiment = self.build_single_exp_dict(exp_number, shock_tube, int_ksens_exp_mapped, int_tp_psen_against_experimental, int_spec_psen_against_experimental, interpolated_absorbance=interp_abs_exp, experimental_data = exp_data, absorbance_experimental_data = loaded_experimental_data_absorbance, time_history_interpolated_against_absorbance_experiment = time_history_interp_against_experiment_dict ) return experiment
import MSI.simulations.instruments.shock_tube as st import MSI.cti_core.cti_processor as pr import MSI.simulations.absorbance.curve_superimpose as csp import MSI.simulations.yaml_parser as yp import cantera as ct test_p = pr.Processor('MSI/data/test_data/optimized_burke.cti') test_tube = st.shockTube(pressure=3.44187, temperature=1079, observables=['OH','H2O'], kineticSens=1, physicalSens=0, conditions={'H2O2':0.00195373,'Ar':0.99804627}, initialTime=0, finalTime=0.0014, thermalBoundary='Adiabatic', mechanicalBoundary='constant pressure', processor=test_p, save_timeHistories=1, save_physSensHistories=1) test_tube.run() parser = yp.Parser() abs_instance = csp.Absorb() exp_loaded = parser.load_to_obj('MSI/data/test_data/Troe_6.yaml') abs_loaded = parser.load_to_obj('MSI/data/test_data/Troe_6_abs.yaml') abs_data = abs_instance.superimpose_shock_tube(test_tube,abs_loaded,30,kinetic_sens=0) print(abs_data)
import pandas as pd import matplotlib.pyplot as plt test_p = pr.Processor( 'MSI/data/hong_H2O2_fake_data/Hong_new_full_temperature_dep_new_approach_high_temperature.cti' ) test_tube = st.shockTube(pressure=1.635, temperature=1283, observables=['OH', 'H2O'], kineticSens=0, physicalSens=0, conditions={ 'H2O2': 0.003049, 'H2O': 0.001113, 'O2': 0.000556, 'Ar': 0.995212 }, initialTime=0, finalTime=0.001, thermalBoundary='Adiabatic', mechanicalBoundary='constant pressure', processor=test_p, save_timeHistories=1, save_physSensHistories=1) #test_p2 = pr.Processor('MSI/data/hong_H2O2_fake_data/Hong_new_half_temperature_dep.cti') #test_tube2 = st.shockTube(pressure=1.676, # temperature=1182, # observables=['OH','H2O'], # kineticSens=0, # physicalSens=0,
import numpy as np import MSI.simulations.instruments.shock_tube as st import MSI.cti_core.cti_processor as pr import cantera as ct test_p2 = pr.Processor('MSI/data/chebyshev_data/FFCM1_custom_cheb_test.cti') test_tube = st.shockTube(pressure=1.909, temperature=1398, observables=['OH', 'H2O'], kineticSens=1, physicalSens=0, conditions={ 'O2': 0.00062, 'H2O': 0.001234, 'H2O2': 0.00254, 'Ar': 0.9974968858350951 }, initialTime=0, finalTime=.0002, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p2, save_timeHistories=1, save_physSensHistories=1) csv_paths = [ 'MSI/data/test_data/hong_oh_0_time_dependent.csv', 'MSI/data/test_data/hong_h2o_0_time_dependent.csv' ] exp_data = test_tube.importExperimentalData(csv_paths) test_tube.run()
print(temperature2) print(conditions2) test_p = pr.Processor( 'MSI/data/klip_optimization_with_raw_data/FFCM1_custom_extra_reaction_updated.cti' ) #HONG YAML FILES AND CONDITIONS test_tube = st.shockTube(pressure=pressure, temperature=temperature, observables=['OH', 'H2O', 'H2O2'], kineticSens=0, physicalSens=0, conditions=conditions, initialTime=0, finalTime=0.0035, thermalBoundary='Adiabatic', mechanicalBoundary='constant pressure', processor=test_p, save_timeHistories=1, save_physSensHistories=1) test_p2 = pr.Processor( 'MSI/data/klip_optimization_comparison/Hong_new_temp_dependent_reactions.cti' ) #test_p2 = pr.Processor('MSI/data/hong_H2O2_fake_data/Hong_new_original_reactions.cti') test_tube2 = st.shockTube(pressure=pressure2, temperature=temperature2, observables=['OH', 'H2O'],
import pandas as pd import matplotlib.pyplot as plt test_p = pr.Processor( 'MSI/data/branching_reaction_study/FFCM1_custom_cheb_extra_zeros_new_extra_reactions_precursor.cti' ) test_tube = st.shockTube(pressure=0.772, temperature=2188, observables=['OH'], kineticSens=0, physicalSens=0, conditions={ 'CH3I': 0.000009954, 'CH3OH': 0.000006016, 'Ar': .999984 }, initialTime=0, finalTime=0.004, thermalBoundary='Adiabatic', mechanicalBoundary='constant pressure', processor=test_p, save_timeHistories=1, save_physSensHistories=1) #test_p2 = pr.Processor('MSI/data/hong_H2O2_fake_data/Hong_new_half_temperature_dep.cti') #test_tube2 = st.shockTube(pressure=1.676, # temperature=1182, # observables=['OH','H2O'], # kineticSens=0, # physicalSens=0,
#, #'N2O':0.0007737003154574132, # test_p = pr.Processor('MSI/data/test_data/FFCM1_custom.cti') test_p = pr.Processor('gri30.cti') test_tube = st.shockTube(pressure=.98692, temperature=295, observables=['HO2','CH3'], kineticSens=1, physicalSens=0, conditions={'CH3': 0.0000012094157562676408, 'HO2': 0.0000007614839946870331, 'OH': 0.000003041863871824672, 'H2O2':0.0001531112203220986, 'CH4':0.0174693387016437, 'H2O':0.014293095301344845, 'N2O':0.0007737003154574132, 'Ar':0.9990681757005978 }, initialTime=0, finalTime=0.003, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p, save_timeHistories=1, save_physSensHistories=1) #test_tube = st.shockTube(pressure=1.635, # temperature=1283,
import MSI.simulations.instruments.shock_tube as st import MSI.cti_core.cti_processor as pr import cantera as ct import matplotlib.pyplot as plt test_p = pr.Processor('MSI/data/H_O2/one_reaction.cti') test_tube = st.shockTube(pressure=0.35757249605664937, temperature=1387, observables=['OH'], kineticSens=0, physicalSens=0, conditions={ 'O2': 0.001238, 'H2O': 0.001263, 'H': 0.0000010570824524312896, 'OH': 0.0000010570824524312896, 'Ar': 0.9974968858350951 }, initialTime=0, finalTime=0.02, thermalBoundary='Adiabatic', mechanicalBoundary='constant volume', processor=test_p, save_timeHistories=1, save_physSensHistories=1) #test_tube = st.shockTube(pressure=0.35757249605664937, # temperature=1387, # observables=['OH'], # kineticSens=0, # physicalSens=0,