sa_dict['thermo'][observable][label].append(rms.getconcentrationsensitivity( self.bsol, observable, label, t)) # get kinetics SA coefficients sa_dict['kinetics'][observable] = dict() for rxn_number in range(num_rxns): sa_dict['kinetics'][observable][rxn_number] = list() for t in sa_dict['time']: sa_dict['kinetics'][observable][rxn_number].append(rms.getconcentrationsensitivity( self.bsol, observable, rxn_number, t)) return sa_dict def get_idt_by_T(self): """ Finds the ignition point by approximating dT/dt as a first order forward difference and then finds the point of maximum slope. Since this adapter simulates at constant T, this method returns a dictionary whose values are empty lists. Returns: idt_dict (dict): Dictionary whose keys include 'idt' and 'idt_index' and whose values are lists of the ignition delay time in seconds and index at which idt occurs respectively. """ idt_dict = {'idt': list(), 'idt_index': list(), } return idt_dict register_simulate_adapter("RMSConstantTP", RMSConstantTP)
V0 = None self.reinitialize_simulation( T0=T0, P0=P0, X0=condition.mol_frac, V0=V0, ) if criteria == 'mol_frac': x0 = self.model.X[spc_index] elif criteria == 'mass_frac': x0 = self.model.mass_fraction_dict()[species] else: raise ValueError(f'Invalid criteria: {criteria}') while True: self.cantera_simulation.step() if criteria == 'mol_frac': x1 = self.model.X[spc_index] else: x1 = self.model.mass_fraction_dict()[species] if x1 < x0 * 0.5: break t50_list.append(self.cantera_simulation.time) return t50_list register_simulate_adapter("CanteraConstantUV", CanteraConstantUV)
P0 = condition.P0.value_si V0 = None self.reinitialize_simulation(T0=T0, P0=P0, X0=condition.mol_frac, V0=V0, ) if criteria == 'mol_frac': x0 = self.model.X[spc_index] elif criteria == 'mass_frac': x0 = self.model.mass_fraction_dict()[species] else: raise ValueError(f'Invalid criteria: {criteria}') while True: self.cantera_simulation.step() if criteria == 'mol_frac': x1 = self.model.X[spc_index] else: x1 = self.model.mass_fraction_dict()[species] if x1 < x0 * 0.5: break t50_list.append(self.cantera_simulation.time) return t50_list register_simulate_adapter("CanteraConstantTP", CanteraConstantTP)
sa_dict['kinetics'][observable][rxn_number] = list() for t in sa_dict['time']: sa_dict['kinetics'][observable][rxn_number].append( rms.getconcentrationsensitivity( self.bsol, observable, rxn_number, t)) return sa_dict def get_idt_by_T(self): """ Finds the ignition point by approximating dT/dt as a first order forward difference and then finds the point of maximum slope. Returns: idt_dict (dict): Dictionary whose keys include 'idt' and 'idt_index' and whose values are lists of the ignition delay time in seconds and index at which idt occurs respectively. """ idt_dict = { 'idt': list(), 'idt_index': list(), } time = self.sol.t temperature = np.array([self.sol(t)[-2] for t in self.sol.t]) dTdt = np.diff(temperature) / np.diff(time) idt_dict['idt_index'].append(int(np.argmax(dTdt))) idt_dict['idt'].append(time[idt_dict['idt_index'][0]]) return idt_dict register_simulate_adapter("RMSConstantUV", RMSConstantUV)