@@ -961,7 +961,8 @@ def assign_intermediate_uncertainties(self, g_param_engine=None, k_param_engine=
961961 self .kinetic_intermediate_uncertainties .append (dlnkdq )
962962
963963 def sensitivity_analysis (self , initial_mole_fractions , sensitive_species , T , P , termination_time ,
964- sensitivity_threshold = 1e-3 , number = 10 , fileformat = '.png' ):
964+ sensitivity_threshold = 1e-3 , number = 10 , fileformat = '.png' , initial_surface_coverages = None ,
965+ surface_volume_ratio = None , surface_site_density = 2.72e-5 ):
965966 """
966967 Run sensitivity analysis using the RMG solver in a single ReactionSystem object
967968
@@ -970,20 +971,37 @@ def sensitivity_analysis(self, initial_mole_fractions, sensitive_species, T, P,
970971 number is the number of top species thermo or reaction kinetics desired to be plotted
971972 """
972973
973- from rmgpy .solver import SimpleReactor , TerminationTime
974+ from rmgpy .solver import SimpleReactor , SurfaceReactor , TerminationTime
974975 from rmgpy .quantity import Quantity
975976 from rmgpy .rmg .listener import SimulationProfileWriter , SimulationProfilePlotter
976977 from rmgpy .rmg .settings import ModelSettings , SimulatorSettings
977978 T = Quantity (T )
978979 P = Quantity (P )
979980 termination = [TerminationTime (Quantity (termination_time ))]
980981
981- reaction_system = SimpleReactor (T = T ,
982- P = P ,
983- initial_mole_fractions = initial_mole_fractions ,
984- termination = termination ,
985- sensitive_species = sensitive_species ,
986- sensitivity_threshold = sensitivity_threshold )
982+ surface_mech = any ([x .contains_surface_site () for x in self .species_list ])
983+ if surface_mech :
984+ assert surface_volume_ratio is not None , 'Must provide surface_volume_ratio for sensitivity analysis of surface mechanisms'
985+ surface_volume_ratio = Quantity (surface_volume_ratio )
986+
987+ if not surface_mech :
988+ reaction_system = SimpleReactor (T = T ,
989+ P = P ,
990+ initial_mole_fractions = initial_mole_fractions ,
991+ termination = termination ,
992+ sensitive_species = sensitive_species ,
993+ sensitivity_threshold = sensitivity_threshold )
994+ else :
995+ reaction_system = SurfaceReactor (T = T ,
996+ P_initial = P ,
997+ initial_gas_mole_fractions = initial_mole_fractions ,
998+ initial_surface_coverages = initial_surface_coverages ,
999+ surface_volume_ratio = surface_volume_ratio ,
1000+ surface_site_density = surface_site_density ,
1001+ n_sims = 1 ,
1002+ termination = termination ,
1003+ sensitive_species = sensitive_species ,
1004+ sensitivity_threshold = sensitivity_threshold )
9871005
9881006 # Create the csv worksheets for logging sensitivity
9891007 util .make_output_subdirectory (self .output_directory , 'solver' )
0 commit comments