Compare commits
No commits in common. 'master' and 'gh-pages' have entirely different histories.
@ -1,21 +0,0 @@
@@ -1,21 +0,0 @@
|
||||
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. |
@ -1,83 +0,0 @@
@@ -1,83 +0,0 @@
|
||||
# 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. |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,66 +0,0 @@
@@ -1,66 +0,0 @@
|
||||
# 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() |
||||
|
||||
``` |
||||
|
@ -1,39 +0,0 @@
@@ -1,39 +0,0 @@
|
||||
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() |
||||
|
@ -1,85 +0,0 @@
@@ -1,85 +0,0 @@
|
||||
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() |
||||
|
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
# 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,0 +1,108 @@
@@ -0,0 +1,108 @@
|
||||
<!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> |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 71 KiB |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
<!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> </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> </p> |
||||
<p> </p> |
||||
|
||||
</div> |
||||
<div class="row"> |
||||
|
||||
<p> </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> </p> |
||||
<p> </p> |
||||
|
||||
</div> |
||||
<div class="row"> |
||||
|
||||
<p> </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> |
@ -1,52 +0,0 @@
@@ -1,52 +0,0 @@
|
||||
{% 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 %} |
||||
|
@ -1,101 +0,0 @@
@@ -1,101 +0,0 @@
|
||||
{% 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> </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> </p> |
||||
<p> </p> |
||||
|
||||
</div> |
||||
<div class="row"> |
||||
|
||||
<p> </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> </p> |
||||
<p> </p> |
||||
|
||||
</div> |
||||
<div class="row"> |
||||
|
||||
<p> </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,47 +0,0 @@
@@ -1,47 +0,0 @@
|
||||
{% 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 %} |
||||
|
||||
|
@ -1,16 +0,0 @@
@@ -1,16 +0,0 @@
|
||||
This chart is based on a |
||||
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>. |
||||
|
||||
<p> </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,47 +0,0 @@
@@ -1,47 +0,0 @@
|
||||
{% 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,16 +0,0 @@
@@ -1,16 +0,0 @@
|
||||
This chart is based on a |
||||
<a href="http://bl.ocks.org/mbostock/3885304">bar chart block</a>. |
||||
|
||||
<p> </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> |
||||
|
||||
|
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB |
@ -1,60 +0,0 @@
@@ -1,60 +0,0 @@
|
||||
#!/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 |
@ -1,4 +0,0 @@
@@ -1,4 +0,0 @@
|
||||
{% 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 %} |
@ -1,29 +0,0 @@
@@ -1,29 +0,0 @@
|
||||
{% 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 %} |
@ -1,13 +0,0 @@
@@ -1,13 +0,0 @@
|
||||
{% 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 %} |
@ -1,5 +0,0 @@
@@ -1,5 +0,0 @@
|
||||
{% extends "base.html" %} |
||||
{% block title %}{{ page.title }}{%endblock%} |
||||
{% block content %} |
||||
{{ page.content }} |
||||
{% endblock %} |
@ -1,16 +0,0 @@
@@ -1,16 +0,0 @@
|
||||
# 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. |
||||
|
@ -0,0 +1,116 @@
@@ -0,0 +1,116 @@
|
||||
<!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> </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> |
@ -0,0 +1,116 @@
@@ -0,0 +1,116 @@
|
||||
<!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> </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> |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 615 B |
Before Width: | Height: | Size: 239 B After Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 99 B |
Before Width: | Height: | Size: 301 B After Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 636 B After Width: | Height: | Size: 636 B |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 490 B After Width: | Height: | Size: 490 B |
Before Width: | Height: | Size: 333 B After Width: | Height: | Size: 333 B |