def find_important_reactions(rmg, tolerance): """ This function: - loops over all the species involved in a specific reaction - decides whether the specific reaction is important for the species. Whenever it is found that a reaction is important for a species, we break the species loop, and keep the reaction in the model. Returns: a list of rxns that can be removed. """ global reactions # run the simulation, creating concentration profiles for each reaction system defined in input. simdata = simulate_all(rmg) reduce_reactions = [ReductionReaction(rxn) for rxn in reactions] """ Tolerance to decide whether a reaction is unimportant for the formation/destruction of a species Tolerance is a floating point value between 0 and 1. A high tolerance means that many reactions will be deemed unimportant, and the reduced model will be drastically smaller. A low tolerance means that few reactions will be deemed unimportant, and the reduced model will only differ from the full model by a few reactions. """ CHUNKSIZE = 40 boolean_array = [] for chunk in chunks(reduce_reactions,CHUNKSIZE): N = len(chunk) partial_results = list(map_(WorkerWrapper(assess_reaction), chunk, [rmg.reactionSystems] * N, [tolerance] * N, [simdata] * N)) boolean_array.extend(partial_results) important_rxns = [] for isImport, rxn in zip(boolean_array, reduce_reactions): logging.debug('Is rxn {rxn} important? {isImport}'.format(**locals())) if isImport: important_rxns.append(rxn) return [rxn.rmg_reaction for rxn in important_rxns]
def find_important_reactions(rmg, tolerance): """ This function: - loops over all the species involved in a specific reaction - decides whether the specific reaction is important for the species. Whenever it is found that a reaction is important for a species, we break the species loop, and keep the reaction in the model. Returns: a list of rxns that can be removed. """ global reactions # run the simulation, creating concentration profiles for each reaction system defined in input. simdata = simulate_all(rmg) reduce_reactions = [ReductionReaction(rxn) for rxn in reactions] """ Tolerance to decide whether a reaction is unimportant for the formation/destruction of a species Tolerance is a floating point value between 0 and 1. A high tolerance means that many reactions will be deemed unimportant, and the reduced model will be drastically smaller. A low tolerance means that few reactions will be deemed unimportant, and the reduced model will only differ from the full model by a few reactions. """ CHUNKSIZE = 40 boolean_array = [] for chunk in chunks(reduce_reactions, CHUNKSIZE): N = len(chunk) partial_results = list( map_(WorkerWrapper(assess_reaction), chunk, [rmg.reactionSystems] * N, [tolerance] * N, [simdata] * N)) boolean_array.extend(partial_results) important_rxns = [] for isImport, rxn in zip(boolean_array, reduce_reactions): logging.debug('Is rxn {rxn} important? {isImport}'.format(**locals())) if isImport: important_rxns.append(rxn) return [rxn.rmg_reaction for rxn in important_rxns]
# it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # SCOOP is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with SCOOP. If not, see <http://www.gnu.org/licenses/>. # """ Shows how to develop a program working with or without scoop launched providing serial map fallback. This example works even if SCOOP isn't installed. """ try: from scoop.futures import map as map_ except ImportError: map_ = map def helloWorld(value): return "Hello World from Future #{0}".format(value) if __name__ == "__main__": returnValues = list(map_(helloWorld, range(16))) print("\n".join(returnValues))
# # SCOOP is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 3 of # the License, or (at your option) any later version. # # SCOOP is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with SCOOP. If not, see <http://www.gnu.org/licenses/>. # """ Shows how to develop a program working with or without scoop launched providing serial map fallback. This example works even if SCOOP isn't installed. """ try: from scoop.futures import map as map_ except ImportError: map_ = map def helloWorld(value): return "Hello World from Future #{0}".format(value) if __name__ == "__main__": returnValues = list(map_(helloWorld, range(16))) print("\n".join(returnValues))