Git Product home page Git Product logo

suncat-center / catmap Goto Github PK

View Code? Open in Web Editor NEW
87.0 20.0 99.0 9.92 MB

Catalyst Micro-kinetic Analysis Package for automated creation of micro-kinetic models used in catalyst screening

License: GNU General Public License v3.0

Python 98.01% Jupyter Notebook 1.99%
chemical-engineering chemical-kinetics catalyst materials-science materials-informatics python catmap materials-screening materials-design

catmap's Introduction

Build Status Software License Documentation Status

CatMAP

INSTALLATION

pip/setup.py

CatMap can be installed directly via pip:

pip install --upgrade https://github.com/SUNCAT-Center/catmap/zipball/master

or download/clone the repository and run

python setup.py install

as of the repository root folder.

via add-to Path

To use the package add this directory to the PYTHONPATH, e.g. in bash shell:

export PYTHONPATH=$HOME/THIS_FOLDER_PATH:$PYTHONPATH

or in cshell:

setenv PYTHONPATH $HOME/THIS_FOLDER_PATH:$PYTHONPATH

You will need to ensure that you are running python version 2.5 or greater, and that the mpmath, numpy, scipy, ase, and matplotlib python libraries are installed. A significant speed increase can also be obtained by including the gmpy package.

The installation can be verified by starting python and typing the following commands:

import numpy
import mpmath
import matplotlib
import catmap

See the documentation for more details and tutorials.

Cite

If you find CatMAP useful to your research, please cite:

Medford, A. J., Shi, C., Hoffmann, M. J., Lausche, A. C., Fitzgibbon, S. R., Bligaard, T., & Nørskov, J. K. (2015). CatMAP: a software package for descriptor-based microkinetic mapping of catalytic trends. Catalysis Letters, 145, 794-807.

If you are using the current version of CatMAP, please also cite:

Vijay, S., H. Heenen, H., Singh, A. R., Chan, K., & Voss, J. (2024). Number of sites‐based solver for determining coverages from steady‐state mean‐field micro‐kinetic models. Journal of Computational Chemistry, 45(9), 546-551.

which details the implementation of the numbers solver, the current default solver used by CatMAP for improved numerical stability. The behavior of previous catmap versions ( <=v0.3.2 ) can be reproduced via use_numbers_solver = False

catmap's People

Contributors

adityasavara avatar ajmedford avatar chuanshi avatar gusmaogabriels avatar karen-chan avatar mhangaard avatar mhoffman avatar mieand avatar montoyjh avatar spelliz avatar sudarshanv01 avatar vossjo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

catmap's Issues

Type error

When I run catmap on either linux or Mac I get a type error. The program expects a float and gets an array. It seems as though the problem is in enthalpy_entropy.py in the function get_frequency_cutoff. It returns an array with one element while e.g. the function call in harmonic_adsorbate suggests that a float is wanted. Picking the first element of get_frequency_cutoff and returning it allows the program to run seemingly without error.

Add 1-dimensional analysis

Allow the use of single descriptors. This includes writing/modifing the MinResidMapper class and the MapPlot classes (at least). Should be easy in principle.

Documentation Improvements

Documentation is currently available at catmap.readthedocs.org, but a number of issues still exist. Feel free to break some of these out into separate issues if you want to work on them.

Add docstrings to all functions

  • If you are working on documenting a file please make sure other developers know to avoid overlap.

Fix conversion of tutorials, topics from markdown to rst for readthedocs:

  • Links are broken in tutorials
  • Some images are missing in topics

Add new tutorials and topics:

  • Plotting free energy diagrams
  • Plotting scaling relations
  • Discussion of situation where there are multiple and/or trivial solutions that must be removed

Add "Examples" section:

  • Place to collect examples, similar to Matplotlib gallery. Users (and developers) can include the .mkm file, energy input table, and .py file used to generate various activity/selectivity maps. Include citations so that people can properly cite your work.

Scaling relations from 1 surface

I'm looking at the oxidation of CO on Pd(100). I am using as my two descriptors the binding energy of carbon monoxide (E_CO) and the binding energy of oxygen (E_O). Scaling relationships are found through linear regression to solve a set of equations. In this case, the equations are E_TS,i = a_(E_CO,i) + b_(E_O,i) + c. In general, to solve for three unknowns, three equations are required. A unique surface gives a unique equation. It seems that CatMAP should require input energetics of at least three surfaces (number of descriptors + 1) to solve the model. However, CatMAP seems qualitatively predictive even if only a single surface is fully defined energetically. How can CatMAP determine all three linear regression parameters from the information present in just 1 surface's energetics?

-Kevin Hurlbutt

Improve handling of "trivial solutions"

It is common for the rate equations to have a "trivial solution" where a zero value for one coverage leads to a valid steady-state solution regardless of the values of other coverages (this is typically a symptom of an unphysical or incomplete reaction mechanism). The system will have other, non-trivial, solutions, but the current solver is usually unable to find them. There are a few remedies here, in order of least to most work:

  1. add a "check_trivial_solutions" function which either runs automatically, or perhaps if some flag is set to true. The function could run once before the mapper starts and iterate through trial solutions of [0,1,1,...,1], [1,0,1,...,1],[1,1,0,...,1], etc. and see if any of them are valid. If so, CatMAP can throw an error and alert the user that a trivial solution has been detected when the coverage of adsorbate X is 0.

  2. add a tutorial discussing when and why trivial solutions occur, and how to fix them.

  3. implement a more robust solver that is capable of avoiding trivial solutions.

irreversible elementary step

How can an irreversible elementary step be added in the mkm file?
I know that certain reaction do not happen on pure transition metals at low temperature but CatMAP do not capture it correctly, how I can direct CatMAP to products observed in experimentally?

Rate constant expressions from kinetic gas theory

I would like to use rate constants from kinetic gas theory in a model (i.e.

 p_i*A_ij/sqrt(2*pi*m_i*kboltzmann*T)

as a rate constant for an adsorption.[1] As far as I can tell in catmap/data/templates.py[2] all rate constants have to be of the form

prefactor_list[i]*mpexp(-G_af[i]/(kB*T))

Am I therefore correctly assuming that one would have to enter the first expression into the prefactor? If so: I see that h and kB are explicitly passed into the template at the beginning of def rate_constants ...., is there some other proxy/vehicle where one could pass those other parameters (m_i, A_ij, s_i) ?

Any pointers are greatly appreciated.

[1] Actually I would also like to take this expression and multiply it with another exponent for the reverse (desorption).

[2] https://github.com/ajmedford/catmap/blob/master/catmap/data/templates.py#L106

Improve continuous integration testing

The infrastructure for Travis CI testing has been added, and a very crude testing system which runs the tutorials and ensures that there are no crashes at each commit. However, this could be significantly improved by:

  1. streamlining the testing process to run a single script which automatically looks for new tutorials, etc.
  2. checking that the output of the tutorials matches what is expected, in addition to ensuring that they do not crash
  3. adding more tests. In general there should be some standards for developers who add new functionality to create a test/tutorial that ensures their new function does not get broken in future commits.

Сan't save the pickle file while reading *.log file (python 2.7 and python 3.6)

I'm doing the mkm with considering of adsorbate-adsorbate interactions via incrementally
increasing the interaction parameters (by incrementally increasing the "interaction_strength").
I don't have problems when I run code with *.mkm, energies.txt and mkm_job.py as input files.
When I try to run the code with *.log and *.pkl as input files:

mkm_file = 'NO_oxidation.log'
model = ReactionModel(setup_file=mkm_file)

I have an error: "header_evaluation: fail - could not save pickle".
So, pickle file is not updated. Because of this problem, an incremental increase of "interaction_strength" doesn't have an effect. This error occurs with both Python 2.7 and 3.6.
What should I do to solve this problem?

1

Improve user-friendliness and defaults for scaling constraints

Scaling constraint defaults often lead to unstable results (e.g. trying to scale a transition-state with a gas-phase energy). The code needs a more consistent way of accepting various scaling strategies, along with better error-checking to warn users when they are doing something that is likely to be unphysical.

Species specific thermo modes

If species_definitions['A'] = {'adsorbate_thermo_mode':'zero_point_adsorbate'} is specified then species 'A' should be treated as a "zero_point_adsorbate" regardless of the "adsorbate_thermo_mode" specified for the entire model. It may also be worth separating thermo corrections for adsorbates and transition states since these could be different. This is a tough problem due to the structure of ThermoCorrections, and may require some re-structuring. Putting it off for now.

Add "stand alone" scripts as an output

It should be possible to have the model output a "stand alone" script after it runs. This script would be capable of reading in the output as an "initial guess" and either re-solving the model with a more serial workflow or at least checking the residuals to provide a sanity check. If one sets the attribute "create_standalone = True" then an experimental "stand_alone.py" file will be output which contains all of the auto-generated functions. In principle this could be combined with something similar to the "simplekinetics" module in order to create a full stand alone.

examples can not run with python 3.6

I have run the example in Generating an Input File and I got this error.

Traceback (most recent call last):
File "D:/Jupyter-notebook/ASE/test.py", line 123, in
parser.parse()
File "D:\catmap\catmap\parsers\table_parser.py", line 60, in parse
self._baseparse()
File "D:\catmap\catmap\parsers\parser_base.py", line 41, in _baseparse
self.transition_state_names+self.site_names+tuple(self._gas_sites)):
TypeError: can only concatenate list (not "NoneType") to list

'strerror' while perofmring Degree of rate of control analysis

image
catmap

Hi; This is Malik.
well, I am working on the NOx reduction reaction system. While performing the DRC analysis by using catmap. I am facing some error " NameError: name 'strerror' is not defined " please anyone can help me out how to fix that. For my system, the rest of the plots are generated very well. I mean production rate coverage etc. I am just facing some problem for DRC analysis part. Please suggest some solution to overcome this issue. Thanks
Regards;

Malik Waqar
Graduate Student

Official CatMAP logo

I cannot find the CatMAP logo anywhere for download? Is there one available for use in presentations and such?

Positional order of intermediate terms

One question regarding the positional order of intermediate terms: when you define a reaction expression like (A <-> B -> C)
and each intermediate involves exactly two sites (say a1_s1 + a2_s2 <-> b1_s1 + b2_s2 -> c1_s1 + c2_s2), then is it correct to assume that CatMAP models are defined such that the order between intermediate terms is consistent? Even if s1 == s2?

For example if the CatMAP input contains 'CO_s + O_s -> CO-O_s + *_s', does that imply that after the step has occurred the CO-O species will sit where the CO species used to be? Or is that a wrong assumption?

CatMAP can't determine the self/cross-interaction parameters (Python 3.6)

I want Catmap to determine self/cross-interaction parameters from a set of coverage.
In my energies.txt file I have differential adsorption energies with corresponding coverage value. My parameters of the interaction model in *.mkm file:

interaction_fitting_mode = ['numerical_differential']
numerical_delta_theta = 0.25
interaction_strength = 1.0
adsorbate_interaction_model = 'second_order'
interaction_response_function = 'smooth_piecewise_linear'

When I run the code with Python 3.6, I have an error:
"RuntimeError: dictionary changed size during iteration ".

At the same time, this code works successfully with Python 2.7 (interaction parameters are well determined).

2

Fix #HACK's

Nasty "quick fixes" are tagged with #HACK. Ideally all these should be changed to something more beautiful.

TYPE_ERROR

When i run the model, i recieve this error:
Traceback (most recent call last):
File "mkm_job.py", line 3, in
model = ReactionModel(setup_file=mkm_file)
File "/home/alvaro/catmap/catmap/model.py", line 124, in init
self.load(self.setup_file)
File "/home/alvaro/catmap/catmap/model.py", line 422, in load
self.parse() #Automatically parse in data.
File "/home/alvaro/catmap/catmap/model.py", line 455, in parse
self.parser.parse(*args, **kwargs)
File "/home/alvaro/catmap/catmap/parsers/table_parser.py", line 60, in parse
self._baseparse()
File "/home/alvaro/catmap/catmap/parsers/parser_base.py", line 41, in _baseparse
self.transition_state_names+self.site_names+tuple(self._gas_sites)):
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
Is it a problem with the input file?

Add "hybrid" scaler

Add a scaler which uses one existing scaler for one descriptor, and a different scaler for the other. This would allow mapping activity with e.g. the binding energy of an adsorbate on the x-axis and temperature on the y-axis.

can't use catmap

Which one can give me an more complex example of input file of catmap?

Thank you very much

Please Update Tutorial& TableParser._separator

I‘m new to the catmap, and I try to run catmap with the input file in "Creating a Microkinetic Model". I just copy the "energies.txt" and "CO_oxidation.mkm" , but err occured:

File "/~/catmap/parsers/table_parser.py", line 66, in parse
raise ValueError('Required headers are missing! '+
ValueError: Required headers are missing! Please be sure that all headers are specified: species_name surface_name site_name formation_energy frequencies reference

when I see the source code of "table_parser.py", I see the code like:

self._separator = '\t'
headers = lines.pop(0).split(self._separator)
L.split(self._separator, len(headers))

however, the energies.txt on the website subsitute "\t" with " ". In fact, "string string".split() with no argument is enough, so please stop using split("\t") and use split() instead. I'm not sure if things are different in earlier python version for I have nerver used py2, but i think ... it really makes no sense

Error Handling

Write custom error classes for handling convergence errors, input errors, etc.

Standardize Code

Adding doc strings to functions, make all lines shorter than 80 characters, hunt down CamelCase variable names, clean up any other instances of laziness on AJ's part.

Version dependency of python3 and related packages

Hi,

I installed python3(ver. 3.6.9) through source code compilation. And I installed packages
matplotlib 3.1.1
numpy 1.13.3
scipy 1.16.4
mpmath 1.1.0
ase 3.17.0
gmpy 1.17

However, I tried to run the example in this environment, it didn't work.

tgmadmin@UOS-YOO` 3-refining_microkinetic_model]$ python3 mkm_job.py

Traceback (most recent call last):
File "mkm_job.py", line 1, in
from catmap import ReactionModel
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/site-packages/python_catmap-0.3.1-py3.6.egg/catmap/init.py", line 33, in
from matplotlib.mlab import griddata as mlab_griddata
ImportError: cannot import name 'griddata'

So I solved this "griddata call" problem by lowering the version of matplotlib (3.1.1 -> 2.2.4)
The example worked well and the results were good.

[tgmadmin@UOS-YOO 3-refining_microkinetic_model]$ ls -al
total 2372
drwxr-xr-x 2 tgmadmin users 184 Jul 20 03:30 .
drwxrwxrwt 28 root root 4096 Jul 20 03:29 ..
-rw-r--r-- 1 tgmadmin users 342323 Jul 20 03:30 CO_oxidation.log
-rw-r--r-- 1 tgmadmin users 2503 Jul 18 12:53 CO_oxidation.mkm
-rw-r--r-- 1 tgmadmin users 1966805 Jul 20 03:30 CO_oxidation.pkl
-rw-r--r-- 1 tgmadmin users 5036 Jul 18 12:53 energies.txt
-rw-r--r-- 1 tgmadmin users 42650 Jul 20 03:30 FED.png
-rw-r--r-- 1 tgmadmin users 1462 Jul 18 13:41 mkm_job.py
-rw-r--r-- 1 tgmadmin users 36466 Jul 20 03:30 pretty_production_rate.pdf
-rw-r--r-- 1 tgmadmin users 8802 Jul 20 03:30 summary.tex

But, I tried to run CO_oxidation.log file as input in mkm_job.py but it did not work.

--- mkm_job.py file ---
from catmap import ReactionModel

#mkm_file = 'CO_oxidation.mkm'
mkm_file = 'CO_oxidation.log'
model = ReactionModel(setup_file=mkm_file)
...
--- mkm_job.py file done ---

[tgmadmin@UOS-YOO 3-refining_microkinetic_model]$ python3 mkm_job.py
Traceback (most recent call last):
File "mkm_job.py", line 5, in
model = ReactionModel(setup_file=mkm_file)
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/site-packages/python_catmap-0.3.1-py3.6.egg/catmap/model.py", line 125, in init
self.load(self.setup_file)
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/site-packages/python_catmap-0.3.1-py3.6.egg/catmap/model.py", line 383, in load
exec(compile(open(setup_file, 'r').read(), '', 'exec'), globs, locs)
File "", line 22, in
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

It seems to be a version dependency of python3 and related packages used by catmap. I need help.
Thanks.

Use descriptor via "dummy" site does not work

Hi,

When I tried to use a O_s as descriptor for Ethylene Glycol decomposition, CatMap give a error message as
"AttributeError: Descriptor O_s does not appear in reaction network. Add descriptor to network via "dummy" site, or use an adsorbate from the network as a descriptor."
However, even if I add the O_s as a dummpy site by add rxn expression " O* -> O*", the model end with "mapper_iteration_2: fail - no solution at 225 points."
This error can be regenerated in the CO oxidation model of Tutorial 2 by adding the following line to energies.txt.

Ru	111	C	1.3	fcc	[]	[]	test
Rh	111	C	1.34	fcc	[]	[]	test
Pd	111	C	1.55	fcc	[]	[]	test
Ni	111	C	1.63	fcc	[]	[]	test
Pt	111	C	1.7	fcc	[]	[]	test
Cu	111	C	2.58	fcc	[]	[]	test
Ag	111	C	2.99	fcc	[]	[]	test
Au	111	C	3.04	fcc	[]	[]	test

add chagne line 13 to 21 into

              'CO* +  O* <-> O-CO* + * -> CO2_g + 2*',
               'C* -> C*'

                   ]


surface_names = ['Pt', 'Ag', 'Cu','Rh','Pd','Au','Ru','Ni'] #surfaces to include in scaling (need to have descriptors defined for each)

descriptor_names= ['O_s','C_s'] #descriptor names

descriptor_ranges = [[-1,3],[-0.5,4]]

Is this a bug or my understanding of "dummy" site is wrong?

Thanks.

Add reactor model

Add the ability to have e.g. plug flow equations governing boundary conditions.

Create tutorial for custom gas species

We need a tutorial explaining how to add gas species that are not included in catmap/data/parameter_data.py. The tutorial should cover:

*How to add custom ideal gasses (e.g. creating a new entry in the atoms_dict property)
*How to add custom Shomate parameters using the "fit_shomate" function in catmap/thermodynamics/enthalpy_entropy.py
*How to verify the Shomate fit vs. the input data (see examples at end of enthalpy_entropy.py)
*When it is appropriate to submit Shomate data or ideal gas structure for inclusion in the source code of parameter_data.py

The last point is somewhat arbitrary, but I would say that we should only accept Shomate parameters that have been fit to well-established thermodynamic data (e.g. NIST or CRC). Ideal gas structures should probably be consistent with the ase.structure.molecule function (PBE geometries, I believe).

Single point calculation/parity analysis

Add the ability to calculate output_variables at an arbitrary point (and use any existing information to get convergence). This would make it easy to calculate rates at some point in descriptor space with/without scaling.

Electrochemical Descriptors

Add the ability to use potential/pH (at least within the computational hydrogen electrode) as descriptors.

mkm_job.py recursive process fail

Hi,

I met another problem like this in tutorial (3-refining_microkinetic_model)

[tgmadmin@UOS-YOO 3-refining_microkinetic_model]$ python3 mkm_job.py
Traceback (most recent call last):
File "mkm_job.py", line 5, in
model = ReactionModel(setup_file=mkm_file)
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/site-packages/catmap/model.py", line 125, in init
self.load(self.setup_file)
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/site-packages/catmap/model.py", line 384, in load
exec(compile(open(setup_file, 'r').read(), '', 'exec'), globs, locs)
File "", line 22, in
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte


This error-message looks like an error I've seen before. I think it seems to be a problem of reading PKL file.


[tgmadmin@UOS-YOO 3-refining_microkinetic_model]$ python3 CO_oxidation.log
Traceback (most recent call last):
File "CO_oxidation.log", line 22, in
binary_data = pickle.load(open("CO_oxidation.pkl"))
File "/TGM/Apps/PYTHON/3.6.9_for_CatMAP_20190718/lib/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

Thank you.
Best regards,
Jinwoo Park

3_ref_results.tar.gz

Correct for free energy of sites

Add the ability to specify vibrational frequencies for free sites and include the free energy of free sites in calculation of rate/equilibrium constants.

Feature request: reference website

For 'advanced beginners' it would be really useful to have a single website for an as complete as possible class, function, and attribute level documentation on a single reference website. I'll just throw this example out there as how this could look like. The advantage of this is that one can simply Ctrl+F for a certain feature and immediately glean from it in which file or submodule to look.

Keeping such a reference is made easy both initially and maintaining it as well. And I briefly outline the steps required:

  1. open an account on https://readthedocs.org/accounts/signup/
  2. create stub files for each submodule in a documentation folder for sphinx.autodoc
  3. create a webhook inside the github repository which triggers in generation of the HTML documentation on each merge into e.g. the master branch.

If @ajmedford would initiate step 1. & 3. I will be more than happy to contribute step 2., maybe next Wednesday?

Add ProbabilityMapper or EnsembleMapper

Add the ability to calculate outputs for an "ensemble" of input files, then convert these outputs into "probability maps" showing e.g. how probable it is that the rate and/or selectivity to be higher than some specified threshold.

Error in running the CATMAP ReactionModel

Hello,

I received the following error, which doesn't seem to be based on the mkm file setup. Specifically on the last line of J[0][0] in , it points to the following section:

4*s[1]theta[0]*theta[0]*theta[0])*theta[3]*theta[3] - (krkBT[2])*dEr[2]
^
I'm honestly not sure why this is happening. I'd be happy to provide more information if necessary.
Thanks in advance, find the full error below.

Traceback (most recent call last):
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydev_run_in_console.py", line 52, in run_file
pydev_imports.execfile(file, globals, locals) # execute the script
File "/Applications/PyCharm CE.app/Contents/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/Users/lukejohnson/Desktop/Research/Scripts/runmicro.py", line 8, in
model.run()
File "/Users/lukejohnson/catmap/catmap/model.py", line 253, in run
self.descriptor_space_analysis()
File "/Users/lukejohnson/catmap/catmap/model.py", line 314, in descriptor_space_analysis
self.mapper.get_output_map(self.descriptor_ranges,self.resolution)
File "/Users/lukejohnson/catmap/mappers/mapper_base.py", line 89, in get_output_map
self.solver.compile()
File "/Users/lukejohnson/catmap/solvers/steady_state_solver.py", line 429, in compile
self.generate_static_functions()
File "/Users/lukejohnson/catmap/catmap/model.py", line 347, in generate_static_functions
exec(func_string, globals(), locs)
File "", line 154
J[0][0] = 0 + 6*(-6*kf[1]*p[0]*p[0]*p[0]*s[1]*s[1]*s[1]*s[1]*s[1] + (kfkBT[1])*dEf[1][0]*p[0]*p[0]*p[0]*s[1]*s[1]*s[1]*s[1]*s[1]s[1] - 6kr[1]*theta[0]*theta[0]*theta[0]*theta[0]*theta[0] - (krkBT[1])*dEr[1][0]*theta[0]*theta[0]*theta[0]*theta[0]theta[0]theta[0]) + -6(6kf[2]*theta[4]*theta[4]*theta[0]*theta[0]*theta[0]*theta[0]*theta[0] + (kfkBT[2])*dEf[2][0]*theta[4]*theta[4]*theta[0]*theta[0]*theta[0]*theta[0]theta[0]theta[0] - kr[2](-2theta[0]s[1] + 4s[1]theta[0]*theta[0]*theta[0])*theta[3]*theta[3] - (krkBT[2])*dEr[2][0]*theta[3]*theta[3]*theta[0]*theta[0]*theta[0]theta[0]s[1]s[1]) + -4(kf[3](-2theta[0]s[1] + 4s[1]theta[0]*theta[0]*theta[0])*theta[3]*theta[3] + (kfkBT[3])*dEf[3][0]*theta[3]*theta[3]*theta[0]*theta[0]*theta[0]*theta[0]s[1]s[1] - kr[3](-4theta[0]*s[1]*s[1]s[1] + 2s[1]theta[0])*theta[1]*theta[1] - (krkBT[3])*dEr[3][0]*theta[1]*theta[1]*theta[0]*theta[0]*s[1]s[1]s[1]s[1]) + -2(kf[4](-4theta[0]*s[1]*s[1]s[1] + 2s[1]theta[0])*theta[1]*theta[1] + (kfkBT[4])*dEf[4][0]*theta[1]*theta[1]*theta[0]*theta[0]*s[1]*s[1]*s[1]s[1] - -6kr[4]*theta[2]*theta[2]*s[1]*s[1]*s[1]*s[1]*s[1] - (krkBT[4])*dEr[4][0]*theta[2]*theta[2]*s[1]*s[1]*s[1]*s[1]*s[1]*s[1])
^
SyntaxError: invalid syntax

CatMAP is not compatible with ASE 3.17.0

ase.atoms.string2symbols has been moved to ase.symbols.string2symbols. This causes an import error when CatMAP is initialized.

The below pull request fixes this:
#113

After that, CatMAP will no longer be compatible with ASE below 3.17.0.
CatMAP 0.3.0 was just released, compatible with older ASE. We can make another stable release soon for newer ASE (see releases for the draft, if you are a developer).

Add restart capability

Allow user to specify interval; dump data into pickle file every interval to allow restarts.

how to write reaction mechanism with co-adsorption

How to write the reaction mechanism in .mkm file if the reaction species are co-adsorbed. For example, for water dissociation forming OH and H on the surface, it has species of adsorbed water (H2O*), the transition state energy (H-OH*), and the adsorbed OH and H together ((H+OH)*) on the surface. The OH and H are co-adsorbed on the same surface. How to write this reaction mechanism?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.