libantioch/antioch — pull request #89 by SylvainPlessis (2014-12-05 18:04:55+00:00)
Title: Unified thermo

### Common part
This is one PR of a bunch of PRs to finalize parsing, thermodynamics and transport. There will be several PRs, the only thing missing now is the merging with *master*, which will come once the setup of the PRs is made. To make things as clear as I can, all the PRs will have a common section showing the graph with a star to mark the current PR.
```
xml_parser <-- input_parsing_format <-- ascii_parser <-- species_parsing <-- \
\
NASA polynomials <-- UnifiedThermo * <-------------------------------------------- thermo_parsing <--
\ \
transport_new <------------------------ transport_thermo <--------------------------------------------- transport_thermo_parser
```
So here is the parser/thermo/transport bunch of PR. There are also two more PRs, the ```opt_transport``` and the ```almost_Exact```.
The ```opt_transport``` merges ```transport_thermo_parser``` with ```conditions_reac```, which enables to pass a ```KineticsConditions``` object instead of temperature, which translates into computing once and for all the ```TempCache``` object instead of locally where it's needed.
```almost_Exact``` takes in the ```kin_reset```.

### This PR

This is the (not definite) answer to the thermodynamics lack of elegance. This is the "look mom I did my bed" answer: it looks clean from the outside, don't you look under the blanket.
There is with this PR two new objects:
- ```ThermoEvaluator```
- ```IdealGasInternalThermo```

The denomination _External_ and _Internal_ are for the macro and micro respectively description of the thermodynamics, thus Cp, h, s, g for the "external" and the vibrational, rotational, translational for the "internal".
The evaluator object is but a reference holder for those two descriptions, and can performs the most common operations, thus no need to go down to the required thermo object.
The ideal gas thermo is the defaulted statistical thermodynamics objects. It is basically a simplified ```StatMechThermo```. It requires a macro thermo calculator to obtain Cv_vib with the formulae
```Cv_vib = Cp - R - Cv_rot_trans```, thus a Cp calculation is required.

The structure is always the same Evaluator <-- Mixture <-- stuffs, with "<--" meaning "contains a reference to". There is no ```ThermoMixture``` as the internal and external thermo are supposed to be in the scheme Evaluator, Mixture, stuff if necessary. It is not true for the internal part as we have only one option, but is certainly true for the external part.
So it holds a ```NASAEvaluator``` and either a ```IdealGasInternalThermo,CoeffType >``` or a ```StatMechThermodynamics```.