Add --show argument or navigate to: http://localhost:5006/interactive """ from collections import defaultdict from chempy import Reaction, ReactionSystem from chempy.kinetics.rates import MassAction from chempy.util.bkh import integration_with_sliders def get_rsys(): r1 = Reaction({'A'}, {'B'}, MassAction([4./100], unique_keys=['k1']), name='R1: A cons.') r2 = Reaction({'B', 'C'}, {'A', 'C'}, MassAction([1e4], unique_keys=['k2']), name='R2: A reform.') r3 = Reaction({'B': 2}, {'B', 'C'}, MassAction([3e7], unique_keys=['k3']), name='R3: C form.') return ReactionSystem([r1, r2, r3]) if __name__.startswith('bk_'): # TODO: better xlim, ylim, ranges for c0 from bokeh.io import curdoc curdoc().add_root(integration_with_sliders( get_rsys(), tend=1e3, c0=defaultdict(float, {'A': 1}), parameters={'k1': 4./100, 'k2': 1e4, 'k3': 3e7}, x_axis_type='log', y_axis_type='log', integrate_kwargs=dict(integrator='cvode') )) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
Start by runing: $ bokeh serve interactive.py Add --show argument or navigate to: http://localhost:5006/interactive """ from collections import defaultdict from chempy import Reaction, ReactionSystem from chempy.kinetics.rates import MassAction from chempy.util.bkh import integration_with_sliders def get_rsys(kf, kb): rf = MassAction([kf], unique_keys=['kf']) rb = MassAction([kb], unique_keys=['kb']) fw = Reaction({'Fe+3', 'SCN-'}, {'FeSCN+2'}, rf) bw = Reaction({'FeSCN+2'}, {'Fe+3', 'SCN-'}, rb) return ReactionSystem([fw, bw], 'Fe+3 SCN- FeSCN+2'.split()) if __name__.startswith('bk_'): from bokeh.io import curdoc curdoc().add_root(integration_with_sliders( get_rsys(3, .3), tend=3, c0=defaultdict(float, {'Fe+3': .9, 'SCN-': .7}), parameters={'kf': 3, 'kb': .3} )) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
$ bokeh serve interactive.py Add --show argument or navigate to: http://localhost:5006/interactive """ from collections import defaultdict import sys from chempy import Reaction, ReactionSystem from chempy.arrhenius import ArrheniusParam from chempy.util.bkh import integration_with_sliders def get_rsys(Af=1e16, Ab=1.5e15, Ea=72e3, Er=-12e3): fw = Reaction({'Fe+3', 'SCN-'}, {'FeSCN+2'}, ArrheniusParam(Af, Ea)) bw = Reaction({'FeSCN+2'}, {'Fe+3', 'SCN-'}, ArrheniusParam(Ab, Ea-Er)) return ReactionSystem([fw, bw], 'Fe+3 SCN- FeSCN+2'.split()) if __name__.startswith('bk_'): from bokeh.io import curdoc curdoc().add_root(integration_with_sliders( get_rsys(), tend=3, c0=defaultdict(float, {'Fe+3': 3e-3, 'SCN-': 1.5e-3, 'FeSCN+2': .1e-3}), parameters={'temperature': 298.15}, slider_kwargs={'temperature': dict(start=273.15, end=313.15, step=.05)} )) elif __name__ == '__main__': import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)
""" Interactive kinetics app with sliders (with units). Start by runing: $ bokeh serve interactive.py Add --show argument or navigate to: http://localhost:5006/interactive """ from collections import defaultdict from chempy.util.bkh import integration_with_sliders from chempy.units import SI_base_registry, default_units as u from bokeh_interactive import get_rsys if __name__.startswith('bk_'): from bokeh.io import curdoc kf, kb = 3/u.molar/u.s, .3/u.s curdoc().add_root(integration_with_sliders( get_rsys(kf, kb), tend=3*u.s, c0=defaultdict(lambda: 0*u.molar, {'Fe+3': .9*u.molar, 'SCN-': .7*u.molar}), parameters={'kf': kf, 'kb': kb}, unit_registry=SI_base_registry, output_conc_unit=u.molar, output_time_unit=u.second )) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
Add --show argument or navigate to: http://localhost:5006/interactive """ from collections import defaultdict import sys from chempy.util.bkh import integration_with_sliders from chempy.units import SI_base_registry, default_units as u from bokeh_interactive_arrhenius import get_rsys if __name__.startswith('bk_'): from bokeh.io import curdoc Af, Ab, Ea, Er = 1e16/u.molar/u.s, 1.5e15/u.s, 72e3*u.J/u.mol, -12e3*u.J/u.mol curdoc().add_root(integration_with_sliders( get_rsys(Af, Ab, Ea, Er), tend=3*u.s, c0=defaultdict(lambda: 0*u.molar, {'Fe+3': 3e-3*u.molar, 'SCN-': 1.5e-3*u.molar}), parameters={'temperature': 298.15*u.K}, slider_kwargs={'temperature': dict(start=273.15*u.K, end=313.15*u.K, step=.05*u.K)}, get_odesys_kw=dict( unit_registry=SI_base_registry, output_conc_unit=u.molar, output_time_unit=u.second ) )) elif __name__ == '__main__': import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)
from collections import defaultdict from chempy import Reaction, ReactionSystem from chempy.arrhenius import ArrheniusParam from chempy.util.bkh import integration_with_sliders def get_rsys(Af=1e16, Ab=1.5e15, Ea=72e3, Er=-12e3): fw = Reaction({'Fe+3', 'SCN-'}, {'FeSCN+2'}, ArrheniusParam(Af, Ea)) bw = Reaction({'FeSCN+2'}, {'Fe+3', 'SCN-'}, ArrheniusParam(Ab, Ea - Er)) return ReactionSystem([fw, bw], 'Fe+3 SCN- FeSCN+2'.split()) if __name__.startswith('bk_'): from bokeh.io import curdoc curdoc().add_root( integration_with_sliders(get_rsys(), tend=3, c0=defaultdict(float, { 'Fe+3': 3e-3, 'SCN-': 1.5e-3 }), parameters={'temperature': 298.15}, slider_kwargs={ 'temperature': dict(start=273.15, end=313.15, step=.05) })) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
from chempy.util.bkh import integration_with_sliders from chempy.units import SI_base_registry, default_units as u from bokeh_interactive_arrhenius import get_rsys if __name__.startswith('bk_'): from bokeh.io import curdoc Af, Ab, Ea, Er = 1e16 / u.molar / u.s, 1.5e15 / u.s, 72e3 * u.J / u.mol, -12e3 * u.J / u.mol curdoc().add_root( integration_with_sliders(get_rsys(Af, Ab, Ea, Er), tend=3 * u.s, c0=defaultdict( lambda: 0 * u.molar, { 'Fe+3': 3e-3 * u.molar, 'SCN-': 1.5e-3 * u.molar }), parameters={'temperature': 298.15 * u.K}, slider_kwargs={ 'temperature': dict(start=273.15 * u.K, end=313.15 * u.K, step=.05 * u.K) }, unit_registry=SI_base_registry, output_conc_unit=u.molar, output_time_unit=u.second)) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
from collections import defaultdict import sys from chempy.util.bkh import integration_with_sliders from chempy.units import SI_base_registry, default_units as u from bokeh_interactive import get_rsys if __name__.startswith('bk_'): from bokeh.io import curdoc kf, kb = 3 / u.molar / u.s, .3 / u.s curdoc().add_root( integration_with_sliders(get_rsys(kf, kb), tend=3 * u.s, c0=defaultdict(lambda: 0 * u.molar, { 'Fe+3': .9 * u.molar, 'SCN-': .7 * u.molar }), parameters={ 'kf': kf, 'kb': kb }, get_odesys_kw=dict( unit_registry=SI_base_registry, output_conc_unit=u.molar, output_time_unit=u.second))) elif __name__ == '__main__': import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)
{"A", "C"}, MassAction([1e4], unique_keys=["k2"]), name="R2: A reform.", ) r3 = Reaction( {"B": 2}, {"B", "C"}, MassAction([3e7], unique_keys=["k3"]), name="R3: C form." ) return ReactionSystem([r1, r2, r3]) if __name__.startswith("bk_"): # TODO: better xlim, ylim, ranges for c0 from bokeh.io import curdoc curdoc().add_root( integration_with_sliders( get_rsys(), tend=1e3, c0=defaultdict(float, {"A": 1}), parameters={"k1": 4.0 / 100, "k2": 1e4, "k3": 3e7}, x_axis_type="log", y_axis_type="log", integrate_kwargs=dict(integrator="cvode"), ) ) elif __name__ == "__main__": import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)
MassAction([4. / 100], unique_keys=['k1']), name='R1: A cons.') r2 = Reaction({'B', 'C'}, {'A', 'C'}, MassAction([1e4], unique_keys=['k2']), name='R2: A reform.') r3 = Reaction({'B': 2}, {'B', 'C'}, MassAction([3e7], unique_keys=['k3']), name='R3: C form.') return ReactionSystem([r1, r2, r3]) if __name__.startswith('bk_'): # TODO: better xlim, ylim, ranges for c0 from bokeh.io import curdoc curdoc().add_root( integration_with_sliders(get_rsys(), tend=1e3, c0=defaultdict(float, {'A': 1}), parameters={ 'k1': 4. / 100, 'k2': 1e4, 'k3': 3e7 }, x_axis_type='log', y_axis_type='log', integrate_kwargs=dict(integrator='cvode'))) elif __name__ == '__main__': import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)
from chempy import Reaction, ReactionSystem from chempy.kinetics.rates import MassAction from chempy.util.bkh import integration_with_sliders def get_rsys(kf, kb): rf = MassAction([kf], unique_keys=['kf']) rb = MassAction([kb], unique_keys=['kb']) fw = Reaction({'Fe+3', 'SCN-'}, {'FeSCN+2'}, rf) bw = Reaction({'FeSCN+2'}, {'Fe+3', 'SCN-'}, rb) return ReactionSystem([fw, bw], 'Fe+3 SCN- FeSCN+2'.split()) if __name__.startswith('bk_'): from bokeh.io import curdoc curdoc().add_root( integration_with_sliders(get_rsys(3, .3), tend=3, c0=defaultdict(float, { 'Fe+3': .9, 'SCN-': .7 }), parameters={ 'kf': 3, 'kb': .3 })) else: import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__)
Af, Ab, Ea, Er = ( 1e16 / u.molar / u.s, 1.5e15 / u.s, 72e3 * u.J / u.mol, -12e3 * u.J / u.mol, ) curdoc().add_root( integration_with_sliders( get_rsys(Af, Ab, Ea, Er), tend=3 * u.s, c0=defaultdict( lambda: 0 * u.molar, {"Fe+3": 3e-3 * u.molar, "SCN-": 1.5e-3 * u.molar} ), parameters={"temperature": 298.15 * u.K}, slider_kwargs={ "temperature": dict( start=273.15 * u.K, end=313.15 * u.K, step=0.05 * u.K ) }, get_odesys_kw=dict( unit_registry=SI_base_registry, output_conc_unit=u.molar, output_time_unit=u.second, ), ) ) elif __name__ == "__main__": import warnings warnings.warn("Run using 'bokeh serve %s'" % __file__) sys.exit(1)