Compare commits

..

No commits in common. 'gh-pages' and 'master' have entirely different histories.

  1. 21
      LICENSE
  2. 83
      README.md
  3. 66
      cantera/README.md
  4. 39
      cantera/cantera_test_ethylene.py
  5. 85
      cantera/species_rxn_rates.py
  6. 5
      cantera_data/README.md
  7. 0
      d3_data/species_rxn_rates.json
  8. 108
      hello/index.html
  9. BIN
      images/speciesconrank.png
  10. BIN
      images/speciesgenrank.png
  11. 156
      index.html
  12. 52
      pelican/angular/hello.html
  13. 101
      pelican/angular/index.html
  14. 1
      pelican/angular/speciesgenrates/speciesconrates.css
  15. 47
      pelican/angular/speciesgenrates/speciesconrates.html
  16. 0
      pelican/angular/speciesgenrates/speciesconrates.json
  17. 16
      pelican/angular/speciesgenrates/speciesconrates.md
  18. 1
      pelican/angular/speciesgenrates/speciesconrates_directives.js
  19. 1
      pelican/angular/speciesgenrates/speciesconrates_modcontrol.js
  20. 1
      pelican/angular/speciesgenrates/speciesgenrates.css
  21. 47
      pelican/angular/speciesgenrates/speciesgenrates.html
  22. 1
      pelican/angular/speciesgenrates/speciesgenrates.json
  23. 16
      pelican/angular/speciesgenrates/speciesgenrates.md
  24. 1
      pelican/angular/speciesgenrates/speciesgenrates_directives.js
  25. 1
      pelican/angular/speciesgenrates/speciesgenrates_modcontrol.js
  26. 0
      pelican/content/images/doublebar.png
  27. 0
      pelican/content/images/multibar.png
  28. 0
      pelican/content/images/simplebar.png
  29. 0
      pelican/content/images/sortablemultibar.png
  30. BIN
      pelican/content/images/speciesconrank.png
  31. BIN
      pelican/content/images/speciesgenrank.png
  32. 60
      pelican/pelicanconf.py
  33. 0
      pelican/simpleangular/static/css/bootstrap.css
  34. 0
      pelican/simpleangular/static/css/cosmo.css
  35. 0
      pelican/simpleangular/static/css/darkly.css
  36. 0
      pelican/simpleangular/static/css/font-awesome.css
  37. 0
      pelican/simpleangular/static/css/leaflet.css
  38. 0
      pelican/simpleangular/static/css/main.css
  39. 0
      pelican/simpleangular/static/css/pygment.css
  40. 0
      pelican/simpleangular/static/css/sandstone.css
  41. 0
      pelican/simpleangular/static/fonts/fontawesome-webfont.ttf
  42. 0
      pelican/simpleangular/static/fonts/fontawesome-webfont.woff
  43. 0
      pelican/simpleangular/static/fonts/fontawesome-webfont.woff2
  44. 0
      pelican/simpleangular/static/images/bird_32_gray.png
  45. 0
      pelican/simpleangular/static/images/bird_32_gray_fail.png
  46. 0
      pelican/simpleangular/static/images/code_bg.png
  47. 0
      pelican/simpleangular/static/images/dotted-border.png
  48. 0
      pelican/simpleangular/static/images/email.png
  49. 0
      pelican/simpleangular/static/images/line-tile.png
  50. 0
      pelican/simpleangular/static/images/noise.png
  51. 0
      pelican/simpleangular/static/images/rss.png
  52. 0
      pelican/simpleangular/static/images/search.png
  53. 0
      pelican/simpleangular/static/js/angular-1.3.15.js
  54. 0
      pelican/simpleangular/static/js/bootstrap-3.3.4.js
  55. 0
      pelican/simpleangular/static/js/d3-3.5.5.js
  56. 0
      pelican/simpleangular/static/js/jquery-1.11.2.js
  57. 0
      pelican/simpleangular/static/js/leaflet-0.7.3.js
  58. 0
      pelican/simpleangular/static/js/leaflet.ajax.min.js
  59. 4
      pelican/simpleangular/templates/_index.html
  60. 0
      pelican/simpleangular/templates/archives.html
  61. 29
      pelican/simpleangular/templates/article.html
  62. 0
      pelican/simpleangular/templates/author.html
  63. 13
      pelican/simpleangular/templates/authors.html
  64. 37
      pelican/simpleangular/templates/base.html
  65. 0
      pelican/simpleangular/templates/categories.html
  66. 0
      pelican/simpleangular/templates/category.html
  67. 5
      pelican/simpleangular/templates/page.html
  68. 0
      pelican/simpleangular/templates/pagination.html
  69. 0
      pelican/simpleangular/templates/period_archives.html
  70. 0
      pelican/simpleangular/templates/tag.html
  71. 0
      pelican/simpleangular/templates/tags.html
  72. 0
      pelican/simpleangular/templates/translations.html
  73. 16
      postprocessing/README.md
  74. 116
      speciesconrates.html
  75. 116
      speciesgenrates.html

21
LICENSE

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Charles Reid
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

83
README.md

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
# graphene
Using Cantera and graphs to explore chemical reactions.
Graphene is a repository with scripts for simulating chemical reactions using [Cantera](http://cantera.org/docs/sphinx/html/index.html),
extracting information about those reactions, and visualizing that information
using the [D3.js](https://d3js.org/) library.
## Directories
`cantera/` - Scripts to run Cantera to create a tabulated list of gas states for a particular reaction scenario.
`cantera_data/` - Contains (sample) Cantera data.
`postprocessing/` - Scripts to post-process Cantera data using Python. This takes the gas states in the `cantera_data/` directory and creates JSON data for D3.
`d3_data/` - Contains JSON data for D3 visualizations.
`pelican/` - Contains the contents of the Github pages site, which uses Pelican to turn Javascript/HTML/Markdown into a website.
## Cantera
Scripts for creating reactors, running simulations, and saving the state of the gas at specified intervals for post-processing.
Data does not go here; data goes into the `data/` directory.
(Currently, the example script that is hacked together outputs a D3-ready JSON file directly from the script running Cantera simulations.
This method is faster, but skips intermediate steps and is less extensible/limited to simpler stuff.
Doing this in a better way will require supporting structure in the form of object-oriented extensions to Cantera.
That's where the <a href="https://charlesreid1.github.io/pantera">Pantera</a> library comes in. Pantera is not implemented in graphene yet.)
## Cantera Data
TODO
This is the data folder. It contains example reaction data, so that you can get up and running with Graphene without the need for Cantera.
It also contains data output by the scripts in `create/`, which create reactors and generate reaction data.
Data files in this directory are read in and processed by various Python post-processing scripts.
These dump out JSON data that is readable by D3.
(Also being skipped by a more straightforward Cantera-D3 process.)
## Postprocessing
TODO
Contains Python scripts for post-processing Cantera data in `cantera_data/` directory
and turning it into JSON data for D3 in the `d3_data/` directory.
(Also being skipped by a more straightforward Cantera-D3 process.)
## Pelican
The Pelican site hosts all of the D3 visualizations. Once a D3 data set has been generated in the `d3_data` directory,
the D3 visualization that uses it are developed in the D3 directory, where Pelican can readily turn them into static HTML pages.
# D3 visualizations
## Species Generation Rates
The first D3 viz I did was to illustrate how to extend the simple bar chart Block into an Angular.js app.
While this is not exciting, and requires much more code and much more labor than, say, a Matplotlib code,
it is also extendable to other, more complex visualizations - such as the bubble chart version of species
generation rates.
These charts, in turn, can be embedded in pages with other charts and cross-linked, or made interactive by adding
a panel to display information about elements that are clicked. While a single, static, simple bar chart may not
be utilizing all the amazing powers of D3, it does show how to work out some of the details, before moving on
to more complex visualizations.

66
cantera/README.md

@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
# Cantera
These scripts will run Cantera, create reactors with the specified conditions, and operate them.
The resulting data winds up in `cantera_data/`. It consists of a set of simulation times and corresponding objects
representing the gas's thermochemical state (specified completely by specifying TPX, temperature pressure composition).
With this list, post-processing scripts can create a Cantera gas object and set it to the exact condition of the gas
in that reaction scenario.
Let's walk through a simple Cantera reactor setup - useful to test out whether Cantera works.
The sequence of steps needed is as follows:
* Create a gas
* Set the initial gas state (TPX)
* Create a reactor
* Fill the reactor with the gas
* Create a reactor network
* Set specified parameters (timestep, total time, etc.)
* Advance the reactor network
* Save and plot results, if desired
Let's consider a mixture of ethylene and air autoigniting, simulated using the GRIMech 3.0 combustion mechanism.
The above steps are performed for this ethylene air mixture in the `EthyleneTest.py` script.
```
import cantera as ct
# Set the timestep and total simulation time
dt = 0.001
ttotal = 2.0
# Use GRI Mech 3.0
g = ct.Solution('gri30.xml')
# Set the initial state of the gas
g.TPX = 298.15 + 900, ct.one_atm, "CH4:4.0, O2:1.0, N2:3.762, H:0.00001"
# Create a reactor, and a reactor network to simulate it.
r = ct.Reactor(g)
n = ct.ReactorNet([r])
# This loop advances the reactor until we've reached the final time.
c = 0
t = dt
time_data = []
temp_data = []
while True:
n.advance(t)
time_data.append(t)
temp_data.append(r.T)
t = t + dt
if(c % 10==0):
print "Current reactor time:",t
if t > ttotal:
break
import matplotlib.pyplot as plt
plt.plot(time_data,temp_data)
plt.draw()
plt.show()
```

39
cantera/cantera_test_ethylene.py

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
import cantera as ct
# Set the timestep and total simulation time
dt = 0.001
ttotal = 2.0
# Use GRI Mech 3.0
g = ct.Solution('gri30.xml')
# Set the initial state of the gas
g.TPX = 298.15 + 900, ct.one_atm, "CH4:4.0, O2:1.0, N2:3.762, H:0.00001"
# Create a reactor, and a reactor network to simulate it.
r = ct.Reactor(g)
n = ct.ReactorNet([r])
# This loop advances the reactor until we've reached the final time.
c = 0
t = dt
time_data = []
temp_data = []
while True:
n.advance(t)
time_data.append(t)
temp_data.append(r.T)
t = t + dt
if(c % 10==0):
print "Current reactor time:",t
if t > ttotal:
break
import matplotlib.pyplot as plt
plt.plot(time_data,temp_data)
plt.draw()
plt.show()

85
cantera/species_rxn_rates.py

@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
import cantera as ct
import json
'''
Species reaction rate data
This script exports species reaction rate data directly to JSON format - no postprocessing intermediate.
This simulates ethylene autoignition for 1 second.
However, because we're hacking this, and not doing postprocessing,
this will only output the state of the gas at one instant in time.
Specifically, t = 0.2 s.
The JSON format is as follows:
[
{ 'species': 'C2H4', 'fwd_rxn_rate': 0.10, 'rev_rxn_rate': 0.25}
{ 'species': 'O2', 'fwd_rxn_rate': 1.93, 'rev_rxn_rate': 0.00}
]
A generic JSON data set looks like this:
[
{ 'letter': 'A', 'frequency': 0.08},
{ 'letter': 'B', 'frequency': 0.05}
]
'''
# Set the timestep and total simulation time
dt = 0.001
ttotal = 0.5
# Use GRI Mech 3.0
g = ct.Solution('gri30.xml')
# Set the initial state of the gas
g.TPX = 298.15 + 900, ct.one_atm, "CH4:4.0, O2:1.0, N2:3.762, H:0.00001"
# Create a reactor, and a reactor network to simulate it.
r = ct.Reactor(g)
n = ct.ReactorNet([r])
# This loop advances the reactor until we've reached the final time.
c = 0
t = dt
json_data = []
while True:
n.advance(t)
if(c==200):
# Create species reaction data
fr = g.forward_rates_of_progress
rr = g.reverse_rates_of_progress
for sp in g.species_names:
i = g.species_index(sp)
dat = {}
dat['species'] = sp
dat['fwd_rxn_rate'] = fr[i]
dat['rev_rxn_rate'] = rr[i]
json_data.append(dat)
t = t + dt
c = c + 1
if(c % 10==0):
print "Current reactor time:",t
if t > ttotal:
break
# Note that we're writing data into d3_data/, not cantera_data/,
# because we're skipping the usual Python postprocessing.
# Pantera classes and simple reactor and reactonet wrappers
# will clean this whole thing up. For now, jump into D3:
# that's what we're really interested in, anyway.
with open('../d3_data/species_rxn_rates.json','w') as f:
json.dump(json_data,f)
#import matplotlib.pyplot as plt
#plt.plot(time_data,temp_data)
#plt.draw()
#plt.show()

5
cantera_data/README.md

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
# data
Contains the output of the Cantera programs. As mentioned above, this data consists of a list of simulation times,
and a corresponding list of objects that will allow the thermochemical state of the gas to be completely specified.

0
speciesconrates.json → d3_data/species_rxn_rates.json

108
hello/index.html

@ -1,108 +0,0 @@ @@ -1,108 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/graphene/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/graphene/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
<script type="text/javascript" src="/graphene/theme/js/angular-1.3.15.js"></script>
-->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/graphene/">graphene <strong></strong></a></h1>
<hr />
<div ng-app="myApp">
<div ng-controller="HelloController">
<p>
Angular has something to say: [[message]]
</p>
<button class="btn btn-large btn-primary" ng-click="changeMessage()">
Change Message
</button>
</div>
</div>
<script type="text/javascript">
(function() {
function HelloController($scope) {
$scope.message = "Hello Cruel Angular World!";
$scope.changeMessage = function() {
$scope.message = "Goodbye Cruel Angular World!";
};
};
var a = angular.module("myApp", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var c = a.controller("HelloController", ["$scope", HelloController]);
})();
</script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>),
Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://cantera.org/docs/sphinx/html/index.html">Cantera</a>,
<a href="http://matplotlib.org">Matplotlib</a>).
</p>
<!--
<script type="text/javascript" src="/graphene/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/graphene/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/graphene/theme/js/d3-3.5.5.js"></script>
-->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<!--
<script type="text/javascript" src="/graphene/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/graphene/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

BIN
images/speciesconrank.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

BIN
images/speciesgenrank.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

156
index.html

@ -1,156 +0,0 @@ @@ -1,156 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>graphene</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/graphene/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/graphene/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
<script type="text/javascript" src="/graphene/theme/js/angular-1.3.15.js"></script>
-->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/graphene/">graphene <strong></strong></a></h1>
<hr />
<style>
img.index_img {
width: 500px;
border-style: solid;
border-color: #ddd;
border-width: thin;
}
a.index_btn {
margin-top: 10px;
}
div.row {
margin-top: 25px;
margin-bottom: 25px;
}
</style>
<div class="container">
<div class="row">
<h2><b>welcome to graphene!</b></h2>
<p class="lead">Graphene is a project to create D3.js graphs for thermodynamic and kinetic simulations
performed with Cantera. Graphene is currently underway.
</p>
<p class="lead">Graphene utilizes the following languages, libraries, and utilities:
<ul>
<li><b>Cantera (C++ and Python)</b> for running thermodynamic and kinetic models to create rich data sets.</li>
<li><b>Advanced object-oriented Python</b> for post-processing data</li>
<li><b>D3.js (Javascript)</b> for visualizing data</li>
<li><b>Angular.js (Javascript)</b> for stitching the pages, page elements, and graphs together.</li>
<li><b>Pelican (Pelican)</b> for managing page content and generating static HTML/JS/CSS content from markup files and Javascript code.</li>
<li><b>vim</b> is the best text editor
</ul>
</p>
<p>&nbsp;</p>
<p class="lead">Before we get started, let's just demonstrate how Angular works, with a simple Angular.js Hello World app.
This app is a lot more complicated on the backend than on the frontend, but it shows how to make a sekeleton Angular app.
We'll be using Angular apps to make D3.js charts. Click the button below to visit the Hello Angular World test app:</p>
<p><a class="index_btn btn btn-large btn-primary" href="hello/">Hello Angular World</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="row">
<p>&nbsp;</p>
<h2><b>Species Generation Rates Rank Chart</b></h2>
<p class="lead">Species are listed and ranked according to their generation rates.
</p>
<p>
<img src="/graphene/images/speciesgenrank.png" class="index_img img-responsive" />
</p>
<p>
<a class="index_btn btn btn-large btn-primary"
href="speciesgenrates.html">Species Generation Rates</a></p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="row">
<p>&nbsp;</p>
<h2><b>Species Consumption Rates Rank Chart</b></h2>
<p class="lead">Species are listed and ranked according to their consumption rates.
</p>
<p>
<img src="/graphene/images/speciesconrank.png" class="index_img img-responsive" />
</p>
<p>
<a class="index_btn btn btn-large btn-primary"
href="speciesconrates.html">Species Consumption Rates</a></p>
</div>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>),
Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://cantera.org/docs/sphinx/html/index.html">Cantera</a>,
<a href="http://matplotlib.org">Matplotlib</a>).
</p>
<!--
<script type="text/javascript" src="/graphene/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/graphene/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/graphene/theme/js/d3-3.5.5.js"></script>
-->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<!--
<script type="text/javascript" src="/graphene/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/graphene/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

52
pelican/angular/hello.html

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
{% extends 'base.html' %}
{% set mytitle="Hello" %}
{# ----------- title -------------- #}
{% block title %}{{ mytitle }}{% endblock %}
{# ----------- content ------------- #}
{% block content %}
<div ng-app="myApp">
<div ng-controller="HelloController">
<p>
Angular has something to say: [[message]]
</p>
<button class="btn btn-large btn-primary" ng-click="changeMessage()">
Change Message
</button>
</div>
</div>
<script type="text/javascript">
(function() {
function HelloController($scope) {
$scope.message = "Hello Cruel Angular World!";
$scope.changeMessage = function() {
$scope.message = "Goodbye Cruel Angular World!";
};
};
var a = angular.module("myApp", [], function($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}
);
var c = a.controller("HelloController", ["$scope", HelloController]);
})();
</script>
{% endblock %}

101
pelican/angular/index.html

@ -0,0 +1,101 @@ @@ -0,0 +1,101 @@
{% extends 'base.html' %}
{% set mytitle="graphene" %}
{# ----------- title -------------- #}
{% block title %}{{ mytitle }}{% endblock %}
{# ----------- content ------------- #}
{% block content %}
<style>
img.index_img {
width: 500px;
border-style: solid;
border-color: #ddd;
border-width: thin;
}
a.index_btn {
margin-top: 10px;
}
div.row {
margin-top: 25px;
margin-bottom: 25px;
}
</style>
<div class="container">
<div class="row">
<h2><b>welcome to graphene!</b></h2>
<p class="lead">Graphene is a project to create D3.js graphs for thermodynamic and kinetic simulations
performed with Cantera. Graphene is currently underway.
</p>
<p class="lead">Graphene utilizes the following languages, libraries, and utilities:
<ul>
<li><b>Cantera (C++ and Python)</b> for running thermodynamic and kinetic models to create rich data sets.</li>
<li><b>Advanced object-oriented Python</b> for post-processing data</li>
<li><b>D3.js (Javascript)</b> for visualizing data</li>
<li><b>Angular.js (Javascript)</b> for stitching the pages, page elements, and graphs together.</li>
<li><b>Pelican (Pelican)</b> for managing page content and generating static HTML/JS/CSS content from markup files and Javascript code.</li>
<li><b>vim</b> is the best text editor
</ul>
</p>
<p>&nbsp;</p>
<p class="lead">Before we get started, let's just demonstrate how Angular works, with a simple Angular.js Hello World app.
This app is a lot more complicated on the backend than on the frontend, but it shows how to make a sekeleton Angular app.
We'll be using Angular apps to make D3.js charts. Click the button below to visit the Hello Angular World test app:</p>
<p><a class="index_btn btn btn-large btn-primary" href="hello/">Hello Angular World</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="row">
<p>&nbsp;</p>
<h2><b>Species Generation Rates Rank Chart</b></h2>
<p class="lead">Species are listed and ranked according to their generation rates.
</p>
<p>
<img src="{{SITEURL}}/images/speciesgenrank.png" class="index_img img-responsive" />
</p>
<p>
<a class="index_btn btn btn-large btn-primary"
href="speciesgenrates.html">Species Generation Rates</a></p>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
<div class="row">
<p>&nbsp;</p>
<h2><b>Species Consumption Rates Rank Chart</b></h2>
<p class="lead">Species are listed and ranked according to their consumption rates.
</p>
<p>
<img src="{{SITEURL}}/images/speciesconrank.png" class="index_img img-responsive" />
</p>
<p>
<a class="index_btn btn btn-large btn-primary"
href="speciesconrates.html">Species Consumption Rates</a></p>
</div>
{% endblock %}

1
speciesconrates.css → pelican/angular/speciesgenrates/speciesconrates.css

@ -24,3 +24,4 @@ @@ -24,3 +24,4 @@
.x.axis path {
display: none;
}

47
pelican/angular/speciesgenrates/speciesconrates.html

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
{% extends 'base.html' %}
{% set mytitle="Species Generation Rates Rank Chart" %}
{# ----------- title -------------- #}
{% block title %}{{ mytitle }}{% endblock %}
{# ----------- content ------------- #}
{% block content %}
<link href="{{ SITEURL }}/speciesconrates.css" rel="stylesheet" stype="text/css" />
<div ng-app="speciesconratesApp">
<div ng-controller="speciesconratesController" ng-init="initialize()">
<div class="row">
<div class="col-md-12" id="head">
<speciesconrates-head></speciesconrates-head>
</div>
</div>
<div class="row">
<div class="col-md-12" id="chart">
<speciesconrates-chart></speciesconrates-chart>
</div>
</div>
<div class="row">
<div class="col-md-12" id="text">
{% include 'speciesconrates.md' %}
</div>
</div>
</div>
</div>
<script type="text/javascript" src="{{ SITEURL }}/speciesconrates_modcontrol.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/speciesconrates_directives.js"></script>
{% endblock %}

0
speciesgenrates.json → pelican/angular/speciesgenrates/speciesconrates.json

16
pelican/angular/speciesgenrates/speciesconrates.md

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
This chart is based on a
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>.
<p>&nbsp;</p>
<h2>Ethylene-Air Flame</h2>
<p>The bar chart above shows consumption rates of various species as predicted from
a Cantera simulation of an idealized ethylene-air mixture. The species are ranked in order
of decreasing consumption rates.
</p>
<p>The reaction rate is given in units of [mol/s].
</p>

1
speciesconrates_directives.js → pelican/angular/speciesgenrates/speciesconrates_directives.js vendored

@ -187,3 +187,4 @@ ng = a.directive('speciesconratesChart', function($compile) { @@ -187,3 +187,4 @@ ng = a.directive('speciesconratesChart', function($compile) {
dir.push(ng);

1
speciesconrates_modcontrol.js → pelican/angular/speciesgenrates/speciesconrates_modcontrol.js vendored

@ -70,3 +70,4 @@ function speciesconratesController($scope,myfactory) { @@ -70,3 +70,4 @@ function speciesconratesController($scope,myfactory) {
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to HelloController
var c = a.controller("speciesconratesController", ["$scope", "myfactory", speciesconratesController]);

1
speciesgenrates.css → pelican/angular/speciesgenrates/speciesgenrates.css

@ -24,3 +24,4 @@ @@ -24,3 +24,4 @@
.x.axis path {
display: none;
}

47
pelican/angular/speciesgenrates/speciesgenrates.html

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
{% extends 'base.html' %}
{% set mytitle="Species Generation Rates Rank Chart" %}
{# ----------- title -------------- #}
{% block title %}{{ mytitle }}{% endblock %}
{# ----------- content ------------- #}
{% block content %}
<link href="{{ SITEURL }}/speciesgenrates.css" rel="stylesheet" stype="text/css" />
<div ng-app="speciesgenratesApp">
<div ng-controller="speciesgenratesController" ng-init="initialize()">
<div class="row">
<div class="col-md-12" id="head">
<speciesgenrates-head></speciesgenrates-head>
</div>
</div>
<div class="row">
<div class="col-md-12" id="chart">
<speciesgenrates-chart></speciesgenrates-chart>
</div>
</div>
<div class="row">
<div class="col-md-12" id="text">
{% include 'speciesgenrates.md' %}
</div>
</div>
</div>
</div>
<script type="text/javascript" src="{{ SITEURL }}/speciesgenrates_modcontrol.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/speciesgenrates_directives.js"></script>
{% endblock %}

1
pelican/angular/speciesgenrates/speciesgenrates.json

File diff suppressed because one or more lines are too long

16
pelican/angular/speciesgenrates/speciesgenrates.md

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
This chart is based on a
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>.
<p>&nbsp;</p>
<h2>Ethylene-Air Flame</h2>
<p>The bar chart above shows consumption rates of various species as predicted from
a Cantera simulation of an idealized ethylene-air mixture. The species are ranked in order
of decreasing consumption rates.
</p>
<p>The reaction rate is given in units of [mol/s].
</p>

1
speciesgenrates_directives.js → pelican/angular/speciesgenrates/speciesgenrates_directives.js vendored

@ -187,3 +187,4 @@ ng = a.directive('speciesgenratesChart', function($compile) { @@ -187,3 +187,4 @@ ng = a.directive('speciesgenratesChart', function($compile) {
dir.push(ng);

1
speciesgenrates_modcontrol.js → pelican/angular/speciesgenrates/speciesgenrates_modcontrol.js vendored

@ -70,3 +70,4 @@ function speciesgenratesController($scope,myfactory) { @@ -70,3 +70,4 @@ function speciesgenratesController($scope,myfactory) {
// the first few arguments of the list should correspond to the Angular-namespace stuff to feed to HelloController
var c = a.controller("speciesgenratesController", ["$scope", "myfactory", speciesgenratesController]);

0
images/doublebar.png → pelican/content/images/doublebar.png

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

0
images/multibar.png → pelican/content/images/multibar.png

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

0
images/simplebar.png → pelican/content/images/simplebar.png

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

0
images/sortablemultibar.png → pelican/content/images/sortablemultibar.png

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

BIN
pelican/content/images/speciesconrank.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
pelican/content/images/speciesgenrank.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

60
pelican/pelicanconf.py

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import re
import os
#SITEURL = ''
AUTHOR = u'charlesreid1'
SITENAME = u'graphene'
SITEURL = '/graphene' ### DO IT LIVE
PATH = 'content'
TIMEZONE = 'America/Los_Angeles'
DEFAULT_LANG = u'en'
# the theme
THEME = 'simpleangular'
# template locations
EXTRA_TEMPLATES_PATHS = ['angular/',
'angular/speciesgenrates']
# template files
TEMPLATE_PAGES = {}
# our custom index page
TEMPLATE_PAGES['index.html'] = 'index.html'
# hello angular world is at /hello/ --> /hello/index.html
TEMPLATE_PAGES['hello.html'] = 'hello/index.html'
# species rxn rates
TEMPLATE_PAGES['speciesgenrates.html'] = 'speciesgenrates.html'
TEMPLATE_PAGES['speciesgenrates.css'] = 'speciesgenrates.css'
TEMPLATE_PAGES['speciesgenrates_modcontrol.js'] = 'speciesgenrates_modcontrol.js'
TEMPLATE_PAGES['speciesgenrates_directives.js'] = 'speciesgenrates_directives.js'
TEMPLATE_PAGES['speciesgenrates.json'] = 'speciesgenrates.json'
TEMPLATE_PAGES['speciesconrates.html'] = 'speciesconrates.html'
TEMPLATE_PAGES['speciesconrates.css'] = 'speciesconrates.css'
TEMPLATE_PAGES['speciesconrates_modcontrol.js'] = 'speciesconrates_modcontrol.js'
TEMPLATE_PAGES['speciesconrates_directives.js'] = 'speciesconrates_directives.js'
TEMPLATE_PAGES['speciesconrates.json'] = 'speciesconrates.json'
# --------------8<---------------------
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
DEFAULT_PAGINATION = False
# Uncomment following line if you want document-relative URLs when developing
#RELATIVE_URLS = True

0
theme/css/bootstrap.css → pelican/simpleangular/static/css/bootstrap.css vendored

0
theme/css/cosmo.css → pelican/simpleangular/static/css/cosmo.css

0
theme/css/darkly.css → pelican/simpleangular/static/css/darkly.css

0
theme/css/font-awesome.css → pelican/simpleangular/static/css/font-awesome.css vendored

0
theme/css/leaflet.css → pelican/simpleangular/static/css/leaflet.css

0
theme/css/main.css → pelican/simpleangular/static/css/main.css

0
theme/css/pygment.css → pelican/simpleangular/static/css/pygment.css

0
theme/css/sandstone.css → pelican/simpleangular/static/css/sandstone.css

0
theme/fonts/fontawesome-webfont.ttf → pelican/simpleangular/static/fonts/fontawesome-webfont.ttf

0
theme/fonts/fontawesome-webfont.woff → pelican/simpleangular/static/fonts/fontawesome-webfont.woff

0
theme/fonts/fontawesome-webfont.woff2 → pelican/simpleangular/static/fonts/fontawesome-webfont.woff2

0
theme/images/bird_32_gray.png → pelican/simpleangular/static/images/bird_32_gray.png

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
theme/images/bird_32_gray_fail.png → pelican/simpleangular/static/images/bird_32_gray_fail.png

Before

Width:  |  Height:  |  Size: 615 B

After

Width:  |  Height:  |  Size: 615 B

0
theme/images/code_bg.png → pelican/simpleangular/static/images/code_bg.png

Before

Width:  |  Height:  |  Size: 239 B

After

Width:  |  Height:  |  Size: 239 B

0
theme/images/dotted-border.png → pelican/simpleangular/static/images/dotted-border.png

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 99 B

0
theme/images/email.png → pelican/simpleangular/static/images/email.png

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 301 B

0
theme/images/line-tile.png → pelican/simpleangular/static/images/line-tile.png

Before

Width:  |  Height:  |  Size: 636 B

After

Width:  |  Height:  |  Size: 636 B

0
theme/images/noise.png → pelican/simpleangular/static/images/noise.png

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

0
theme/images/rss.png → pelican/simpleangular/static/images/rss.png

Before

Width:  |  Height:  |  Size: 490 B

After

Width:  |  Height:  |  Size: 490 B

0
theme/images/search.png → pelican/simpleangular/static/images/search.png

Before

Width:  |  Height:  |  Size: 333 B

After

Width:  |  Height:  |  Size: 333 B

0
theme/js/angular-1.3.15.js → pelican/simpleangular/static/js/angular-1.3.15.js

0
theme/js/bootstrap-3.3.4.js → pelican/simpleangular/static/js/bootstrap-3.3.4.js

0
theme/js/d3-3.5.5.js → pelican/simpleangular/static/js/d3-3.5.5.js

0
theme/js/jquery-1.11.2.js → pelican/simpleangular/static/js/jquery-1.11.2.js vendored

0
theme/js/leaflet-0.7.3.js → pelican/simpleangular/static/js/leaflet-0.7.3.js

0
theme/js/leaflet.ajax.min.js → pelican/simpleangular/static/js/leaflet.ajax.min.js vendored

4
pelican/simpleangular/templates/_index.html

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
{% extends "base.html" %}
{% block content %}
<h2>welcome to the reluctant index <small>a page which is only here because it has to be</small></h2>
{% endblock content %}

0
archives.html → pelican/simpleangular/templates/archives.html

29
pelican/simpleangular/templates/article.html

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
{% extends "base.html" %}
{% block head %}
{{ super() }}
{% for keyword in article.keywords %}
<meta name="keywords" contents="{{keyword}}" />
{% endfor %}
{% for description in article.description %}
<meta name="description" contents="{{description}}" />
{% endfor %}
{% for tag in article.tags %}
<meta name="tags" contents="{{tag}}" />
{% endfor %}
{% endblock %}
{% block content %}
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h2>
</header>
<div class="entry-content">
{{ article.content }}
</div><!-- /.entry-content -->
</section>
{% endblock %}

0
categories.html → pelican/simpleangular/templates/author.html

13
pelican/simpleangular/templates/authors.html

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block title %}{{ SITENAME }} - Authors{% endblock %}
{% block content %}
<h1>Authors on {{ SITENAME }}</h1>
<ul>
{%- for author, articles in authors|sort %}
<li><a href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a> ({{ articles|count }})</li>
{% endfor %}
</ul>
{% endblock %}

37
authors.html → pelican/simpleangular/templates/base.html

@ -1,35 +1,36 @@ @@ -1,35 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<html lang="{{ DEFAULT_LANG }}">
<head>
<title>graphene - Authors</title>
{% block head %}
<title>{% block title %}{{ SITENAME }}{% endblock title %}</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/graphene/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="{{ SITEURL }}/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="{{ SITEURL }}/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/graphene/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<link href="{{ SITEURL }}/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="{{ SITEURL }}/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="{{ SITEURL }}/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
<script type="text/javascript" src="/graphene/theme/js/angular-1.3.15.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/angular-1.3.15.js"></script>
-->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.min.js"></script>
{% endblock head %}
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/graphene/">graphene <strong></strong></a></h1>
<h1><a href="{{SITEURL}}/">{{ SITENAME }} <strong>{{ SITESUBTITLE }}</strong></a></h1>
<hr />
<h1>Authors on graphene</h1>
<ul> </ul>
{% block content %}
{% endblock %}
</div>
<footer id="contentinfo" class="body">
@ -55,18 +56,18 @@ @@ -55,18 +56,18 @@
</p>
<!--
<script type="text/javascript" src="/graphene/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/graphene/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/graphene/theme/js/d3-3.5.5.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/d3-3.5.5.js"></script>
-->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<!--
<script type="text/javascript" src="/graphene/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/graphene/theme/js/leaflet.ajax.min.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>
</html>

0
tags.html → pelican/simpleangular/templates/categories.html

0
pelican/simpleangular/templates/category.html

5
pelican/simpleangular/templates/page.html

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{%endblock%}
{% block content %}
{{ page.content }}
{% endblock %}

0
pelican/simpleangular/templates/pagination.html

0
pelican/simpleangular/templates/period_archives.html

0
pelican/simpleangular/templates/tag.html

0
pelican/simpleangular/templates/tags.html

0
pelican/simpleangular/templates/translations.html

16
postprocessing/README.md

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
# postprocessing
These postprocessing scripts will process the Cantera data listed above and turn it into usable JSON data sets
that D3 can read and use to build pretty charts.
Just to illustrate, we can look at a simple example. Suppose we run a simulation of a mixture of ethylene and air combusting.
We set up a Cantera script that creates a gas, a reactor, and a reactornet. It then dumps out the state of the gas,
along with the time, at fixed intervals. At this point, we may still have no idea what we're going to visualize.
In the Python postprocessing script, we start to make decisions about our variables: what are the independent and dependent variables?
What kind of relationship exists between them? What kind of information are we trying to show with a visualization?
What D3 chart type would lend itself to visualizing this information? We decide what information we want to extract
(for example, we may be interested in species reaction rates for one chart, and reaction enthalpies for another chart.)
The information we can visualize is only limited by what Cantera can compute - and that's a LOT.

116
speciesconrates.html

@ -1,116 +0,0 @@ @@ -1,116 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Species Generation Rates Rank Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/graphene/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/graphene/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
<script type="text/javascript" src="/graphene/theme/js/angular-1.3.15.js"></script>
-->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/graphene/">graphene <strong></strong></a></h1>
<hr />
<link href="/graphene/speciesconrates.css" rel="stylesheet" stype="text/css" />
<div ng-app="speciesconratesApp">
<div ng-controller="speciesconratesController" ng-init="initialize()">
<div class="row">
<div class="col-md-12" id="head">
<speciesconrates-head></speciesconrates-head>
</div>
</div>
<div class="row">
<div class="col-md-12" id="chart">
<speciesconrates-chart></speciesconrates-chart>
</div>
</div>
<div class="row">
<div class="col-md-12" id="text">
This chart is based on a
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>.
<p>&nbsp;</p>
<h2>Ethylene-Air Flame</h2>
<p>The bar chart above shows consumption rates of various species as predicted from
a Cantera simulation of an idealized ethylene-air mixture. The species are ranked in order
of decreasing consumption rates.
</p>
<p>The reaction rate is given in units of [mol/s].
</p>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="/graphene/speciesconrates_modcontrol.js"></script>
<script type="text/javascript" src="/graphene/speciesconrates_directives.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>),
Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://cantera.org/docs/sphinx/html/index.html">Cantera</a>,
<a href="http://matplotlib.org">Matplotlib</a>).
</p>
<!--
<script type="text/javascript" src="/graphene/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/graphene/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/graphene/theme/js/d3-3.5.5.js"></script>
-->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<!--
<script type="text/javascript" src="/graphene/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/graphene/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>

116
speciesgenrates.html

@ -1,116 +0,0 @@ @@ -1,116 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Species Generation Rates Rank Chart</title>
<meta charset="utf-8" />
<!--
my CSS styles
-->
<link href="/graphene/theme/css/bootstrap.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/main.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/cosmo.css" rel="stylesheet" type="text/css">
<link href="/graphene/theme/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="/graphene/theme/css/pygment.css" rel="stylesheet" type="text/css"/>
<!--
include Angular first
<script type="text/javascript" src="/graphene/theme/js/angular-1.3.15.js"></script>
-->
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.20/angular.min.js"></script>
</head>
<body id="index" class="home">
<div class="container">
<h1><a href="/graphene/">graphene <strong></strong></a></h1>
<hr />
<link href="/graphene/speciesgenrates.css" rel="stylesheet" stype="text/css" />
<div ng-app="speciesgenratesApp">
<div ng-controller="speciesgenratesController" ng-init="initialize()">
<div class="row">
<div class="col-md-12" id="head">
<speciesgenrates-head></speciesgenrates-head>
</div>
</div>
<div class="row">
<div class="col-md-12" id="chart">
<speciesgenrates-chart></speciesgenrates-chart>
</div>
</div>
<div class="row">
<div class="col-md-12" id="text">
This chart is based on a
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>.
<p>&nbsp;</p>
<h2>Ethylene-Air Flame</h2>
<p>The bar chart above shows consumption rates of various species as predicted from
a Cantera simulation of an idealized ethylene-air mixture. The species are ranked in order
of decreasing consumption rates.
</p>
<p>The reaction rate is given in units of [mol/s].
</p>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="/graphene/speciesgenrates_modcontrol.js"></script>
<script type="text/javascript" src="/graphene/speciesgenrates_directives.js"></script>
</div>
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a>.
</p>
<p style="text-align: center;">Made with HTML (
<a href="http://http://bootstrap.org/">Bootstrap</a>),
Javascript (
<a href="http://http://d3js.org/">D3.js</a>,
<a href=https://angularjs.org/">Angular.js</a>),
Python (
<a href="http://getpelican.com">Pelican</a>,
<a href="http://cantera.org/docs/sphinx/html/index.html">Cantera</a>,
<a href="http://matplotlib.org">Matplotlib</a>).
</p>
<!--
<script type="text/javascript" src="/graphene/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/graphene/theme/js/bootstrap-3.3.4.js"></script>
<script type="text/javascript" src="/graphene/theme/js/d3-3.5.5.js"></script>
-->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
<!--
<script type="text/javascript" src="/graphene/theme/js/leaflet-0.7.3.js"></script>
<script type="text/javascript" src="/graphene/theme/js/leaflet.ajax.min.js"></script>
-->
</footer><!-- /#contentinfo -->
</body>
</html>
Loading…
Cancel
Save