else: raise ValueError('Invalid format for wall time; should be HH:MM:SS.') except ValueError, e: raise ValueError('Invalid format for wall time; should be HH:MM:SS.') # Save initialization time settings.initializationTime = time.time() # Set up log (uses stdout and a file) logging.initialize(options.verbose, os.path.join(settings.outputDirectory,'RMG.log')) # Log start timestamp logging.info('RMG execution initiated at ' + time.asctime() + '\n') # Print out RMG header logging.logHeader() # Make output subdirectories plotDir = os.path.join(settings.outputDirectory, 'plot') if os.path.exists(plotDir): for f in os.listdir(plotDir): os.remove(plotDir + '/' + f) os.rmdir(plotDir) os.mkdir(plotDir) specDir = os.path.join(settings.outputDirectory, 'species') if os.path.exists(specDir): for f in os.listdir(specDir): os.remove(specDir + '/' + f) os.rmdir(specDir) os.mkdir(specDir)
def execute(inputFile, options): # Set directories settings.libraryDirectory = options.libraryDirectory # Set up log (uses stdout and a file) logging.initialize(options.verbose, os.path.join(settings.outputDirectory,'RMG.log')) # Log start timestamp logging.info('RMG execution initiated at ' + time.asctime() + '\n') # Print out RMG header logging.logHeader() # Read input file network, Tlist, Plist, grainSize, numGrains, method, model = io.readInputFile(inputFile) # Shift network such that lowest-energy isomer has a ground state of 0.0 logging.info('Zeroing lowest energy isomer...') network.shiftToZeroEnergy() # Determine energy grains logging.info('Determining energy grains...') Elist = network.determineEnergyGrains(grainSize, numGrains, max(Tlist)) # Calculate density of states for all isomers in network logging.info('Calculating densities of states...') network.calculateDensitiesOfStates(Elist) # # DEBUG: Plot densities of states # import pylab # legend = [] # for isomer in network.isomers: # if isomer.densStates is not None: # pylab.semilogy(Elist / 1000.0, isomer.densStates, '-') # #legend.append(str(isomer)) # pylab.xlabel('Energy (kJ/mol)') # pylab.ylabel('Density of states (mol/J)') # #pylab.legend(legend, loc=4) # pylab.show() # Determine phenomenological rate coefficients logging.info('Calculating phenomenological rate coefficients...') K = network.calculateRateCoefficients(Tlist, Plist, Elist, method) # Create net reaction objects network.netReactions = [] index = 0 for i, reactantIsomer in enumerate(network.isomers): for j, productIsomer in enumerate(network.isomers[0:i]): netReaction = reaction.PDepReaction(reactantIsomer.species, productIsomer.species, network, None) netReaction.id = 'netReaction%i' % (index+1) index += 1 network.netReactions.append(netReaction) # Fit interpolation model if model[0].lower() == 'chebyshev': modelType, degreeT, degreeP = model chebyshev = kinetics.ChebyshevKinetics() chebyshev.fitToData(Tlist, Plist, K[:,:,j,i], degreeT, degreeP) netReaction.kinetics = [chebyshev] elif model.lower() == 'pdeparrhenius': pDepArrhenius = kinetics.PDepArrheniusKinetics() pDepArrhenius.fitToData(Tlist, Plist, K[:,:,j,i]) netReaction.kinetics = [pDepArrhenius] else: pass # Save results to file logging.info('Saving results...') outputFile = os.path.join(os.path.dirname(inputFile), 'output.xml') io.writeOutputFile(outputFile, network, Tlist, Plist, Elist, method, model) logging.info('') # Log end timestamp logging.info('RMG execution terminated at ' + time.asctime())