+
+Figure (1): A MATLAB simulation of a one period advection (red) of an initial value discontinuity (black) using the Lax-Wendroff method.
+
+SU2 uses **slope limiters** to avoid these oscillations by damping second-order terms near shocks and other regions with sharp gradients. The second-order reconstruction is kept where the solution is smooth. This preserves solution accuracy in regions with smooth gradients and helps obtain physical results and numerical stability in regions close to the shock.
+
+Before mathematically describing the form of the limiters implemented in SU2, it is useful to briefly understand two concepts. These include **Total Variation** and **Godunov's Theorem**.
+
+### Total Variation and Total Variation Diminishing
+We can first introduce the concept of **total variation** (TV) which is a measure of how oscillatory a solution is. In a discrete one dimensional setting, TV can be calculated as the following:
+
+$$ TV(u^n) = \sum_j |u^n_{j+1} - u^n_j| $$
+
+
+
+Figure (2): A numerical scheme resulting in both high and low TV.
+
+A scheme can be said to be **total variation diminishing** (TVD) if
+
+$$ TV(u^{n+1}) \leq TV(u^n) $$
+
+where for every successive timestep $$n$$, the total variation of the solution does not increase.
+
+A favorable property of TVD schemes is that they are **monotonicity preserving**. This means they do not introduce new extrema into the solution and local minimum (maximum) are non-decreasing (increasing) in time. These are both desirable qualities for correctly resolving a shock and ensuring the solution is physical.
+
+### Godunov's Theorem
+The question of "How accurate can a TVD scheme be?" is still unanswered. For this, we turn to [Godunov's Theorem](https://en.wikipedia.org/wiki/Godunov%27s_theorem).
+
+**Godunov's Theorem**:
+1. A linear scheme is monotone if and only if it is total variation diminishing.
+2. Linear total variation diminishing schemes are at most first-order accurate.
+
+The first statement is simple, stating that for linear schemes, the characteristic of being monotone and TVD is equivalent. The second statement is more interesting. It states that if we want to construct a linear TVD (monotone) scheme, the best we can be possibly hope for is first-order accuracy.
+
+Recall that the original motivation for a slope limiter was to prevent the formation of oscillations in the solution. In the section above, we noted that TVD schemes are monotonicity preserving (a favorable property in resolving a shock). However, through Godunov's theorem, we note that if we also want high-order accuracy, **our TVD discretization MUST be nonlinear**
+
+The inclusion of a slope limiter into a TVD scheme accomplishes this idea.
+
+
+## Available Limiter Options
+
+The field `SLOPE_LIMITER_FLOW` in the `.cfg` file specifies which limiter to use. Note that this option is only used if `MUSCL_FLOW = YES` (which specifies to use a second-order method).
+The [Laminar Cylinder](https://su2code.github.io/tutorials/Laminar_Cylinder/) shows an example of this.
+The [Turbulent Flat Plate example](https://su2code.github.io/tutorials/Turbulent_Flat_Plate/) sets `SLOPE_LIMITER_TURB`, which is used for the turbulence equations (if `MUSCL_TURB = YES`), rather than for the flow equations.
+More possible applications of limiters are listed below.
+
+
+### Slope Limiter Fields
+
+| Configuration Field | Description | Notes |
+| --- | --- | --- |
+| `SLOPE_LIMITER_FLOW` | Flow equations | Need `MUSCL_FLOW = YES` |
+| `SLOPE_LIMITER_TURB` | Turbulence equations | Need `MUSCL_TURB = YES` |
+| `SLOPE_LIMITER_SPECIES` | Species evolution equations | Need `MUSCL_SPECIES = YES` |
+| `SLOPE_LIMITER_ADJFLOW` | Adjoint flow equations | Need `MUSCL_ADJFLOW = YES` |
+| `SLOPE_LIMITER_ADJTURB` | Adjoint turbulence equations | Need `MUSCL_ADJTURB = YES` |
+
+
+The `SLOPE_LIMITER_` options above may each be changed to use different limiters, which are listed and explained below.
+
+**Note:** the Discontinuous-Galerkin methods (DG) / Higher-order methods (HOM) do not use limiters.
+
+
+
+### Available Limiters
+
+| Type | Description | Notes |
+| --- | --- | --- |
+| `NONE` | No limiter | |
+| `BARTH_JESPERSEN` | Barth-Jespersen | This limiter is a smooth version of the commonly seen Barth-Jespersen limiter seen in the literature |
+| `VENKATAKRISHNAN` | Venkatakrishnan | |
+| `VENKATAKRISHNAN_WANG` | Venkatakrishnan-Wang | |
+| `NISHIKAWA_R3` | Nishikawa-R3 | |
+| `NISHIKAWA_R4` | Nishikawa-R4 | |
+| `NISHIKAWA_R5` | Nishikawa-R5 | |
+| `SHARP_EDGES` | Venkatakrishnan with sharp-edge modification | This limiter should not be used for flow solvers |
+| `WALL_DISTANCE` | Venkatakrishnan with wall distance modification | This limiter should not be used for flow solvers |
+| `VAN_ALBADA_EDGE` | Van Albada (edge formulation) | This limiter is only implemented for flow solvers and does not output limiter values when using the VOLUME_OUTPUT option |
+
+The default limiter is `VENKATAKRISHNAN`.
+
+### Limiter Parameters and Further Details
+
+The `VENKAT_LIMITER_COEFF` parameter is generally a small constant, defaulting to $$0.05$$, but its specific definition depends on the limiter being used.
+
+For the `VENKATAKRISHNAN`, `SHARP_EDGES`, and `WALL_DISTANCE` limiters, the `VENKAT_LIMITER_COEFF` parameter refers to $$K$$ in $$\epsilon^2=\left(K\bar{\Delta} \right)^3$$, where $$\bar{\Delta}$$ is an average grid size (this is hardcoded as 1m and thus all tuning is via $$K$$). For NISHIKAWA_Rp limiters, $$\epsilon^p=\left(K\bar{\Delta} \right)^{p+1}$$ (p = 3, 4 or 5).
+The $$K$$ parameter defines a threshold, below which oscillations are not damped by the limiter, as described by [Venkatakrishnan](https://doi.org/10.1006/jcph.1995.1084).
+Thus, a large value will approach the case of using no limiter with undamped oscillations, while too small of a value will slow the convergence and add extra diffusion.
+The SU2 implementation of the `BARTH_JESPERSEN` limiter actually uses `VENKATAKRISHNAN` with $$K=0$$.
+**Note:** the value of `VENKAT_LIMITER_COEFF` depends on both the mesh and the flow variable and thus should be reduced if the mesh is refined.
+
+When using the `VENKATAKRISHNAN_WANG` limiter, `VENKAT_LIMITER_COEFF` is instead $$\varepsilon '$$ in $$\varepsilon = \varepsilon ' (q_{max} - q_{min})$$, where $$q_{min}$$ and $$q_{max}$$ are the respective *global* minimum and maximum of the field variable being limited.
+This global operation incurs extra time costs due to communication between MPI ranks.
+The original work by [Wang](https://doi.org/10.2514/6.1996-2091) suggests using `VENKAT_LIMITER_COEFF` in the range of $$[0.01, 0.20]$$, where again larger values approach the case of using no limiter.
+**Note:** unlike the aforementioned `VENKATAKRISHNAN` limiter and NISHIKAWA_Rp limiter, the `VENKATAKRISHNAN_WANG` limiter does not depend directly on the mesh size and can thus be used without non-dimensionalization. If the `VENKATAKRISHNAN` limiter is used outside of non-dimensional mode, the fields with larger values (pressure and temperature) will generally be limited more aggressively than velocity.
+
+
+The `NONE`, `BARTH_JESPERSEN`, `VENKATAKRISHNAN`, `VENKATAKRISHNAN_WANG`, and NISHIKAWA_Rp limiter options all have no **geometric modifier**.
+A geometric modifier increases limiting near walls or sharp edges. This is done by multiplying the limiter value by a **geometric factor**.
+
+For both the `SHARP_EDGES` and `WALL_DISTANCE` limiters, the influence of the geometric modifier is controlled with `ADJ_SHARP_LIMITER_COEFF` which defaults to 3.0.
+**Note:** these limiters should not be used for flow solvers, as they only apply to the continuous adjoint solvers.
+
+Increasing this parameter will decrease the value of the limiter and thus make the field more diffusive and less oscillatory near the feature (sharp edge or wall).
+
+In the `SHARP_EDGES` limiter, the qualification of what makes an edge "sharp" is described by the parameter `REF_SHARP_EDGES` (defaults to 3.0). Increasing this will make more edges qualify as "sharp".
+Other than the addition of this geometric factor, these limiters are the same as the `VENKATAKRISHNAN` limiter and should also use `VENKAT_LIMITER_COEFF` (given by $$K$$ below).
+
+Specifically, given the distance to the feature, $$d_{\text{feature}}$$, an intermediate measure of the distance, $$d$$, is calculated. The parameter $$c$$ is set by `ADJ_SHARP_LIMITER_COEFF`.
+
+
+$$ d(d_{\text{feature}}; c, K) = \frac{d_{\text{feature}}} { (c \cdot K \bar{\Delta}) } - 1$$
+
+Then, the geometric factor is given by
+
+$$ \gamma (d) = \frac{1}{2} (1+d+\sin(\pi \cdot d)/ \pi) $$
+
+Note that the geometric factor is nonnegative and nondecreasing in $$d_{feature}$$.
+
+
+After the number of iterations given by `LIMITER_ITER` (default $$999999$$), the value of the limiter will be frozen.
+
+
+The option `FROZEN_LIMITER_DISC` tells whether the slope limiter is to be frozen in the discrete adjoint formulation (default is `NO`).
+
+
+## Empirical comparison of limiters on a periodic advective domain
+An example problem of the linear advection problem against four unique wave-forms was simulated in MATLAB to illustrate differences between the primary limiters in SU2. The wave forms contain both smooth and discontinuous initial conditions and are advected for a single period with a CFL of $$\sigma = 0.8$$. The domain is discretized with $$N = 200$$ cells. The Lax-Wendroff scheme was used as a comparative case:
+
+$$ u_j^{n+1} = u_j^{n} - \sigma (u_j^{n} - u_{j-1}^{n}) - \frac{1}{2}\sigma(1-\sigma) \left[ \phi_{j+\frac{1}{2}}(u_{j+1}^{n} - u_j^{n}) - \phi_{j-\frac{1}{2}}(u_{j}^{n} - u_{j-1}^{n}) \right] $$
+
+where $$\phi_{j+\frac{1}{2}}$$ is the scalar value of the limiter at the interface of cell $$u_j$$ and $$u_{j+1}$$.
+
+
+
+Figure (3): A MATLAB simulation of one period advection (red) of an initial condition (black) using various schemes, with and without limiters.
+
+From the above example we note:
+* The **Lax-Wendroff** scheme produces oscillations near sudden gradients due to dispersion errors. From Godunov's theorem this is expected as the scheme is second-order accurate and does not utilize a limiter.
+* The **Barth-Jespersen** limiter performs well for most of the waveforms. However, the Barth-Jespersen limtier is known to be compressive and will turn smooth waves into square waves. This is best seen with the value discontinuity on the very left.
+* The **Van-Albada** limiter also performs well. It is slightly more diffusive than Barth-Jespersen but has robust convergence properties.
+* The **Venkatakrishnan** limiter is similar to the Barth-Jespersen and has significantly improved convergence properties. However, it is more diffusive and does require a user-specified parameter $$K$$ that is flow dependent.
diff --git a/_docs_v7/Solver-Setup.md b/_docs_v7/Solver-Setup.md
index baf046a3..65a0c996 100644
--- a/_docs_v7/Solver-Setup.md
+++ b/_docs_v7/Solver-Setup.md
@@ -31,6 +31,8 @@ SU2 is capable of dealing with different kinds of physical problems. The kind of
|`EULER` | **Euler's equation** |Finite-Volume method |
|`NAVIER_STOKES` | **Navier-Stokes' equation** | Finite-Volume method |
|`RANS` | **Reynolds-averaged Navier-Stokes' equation** | Finite-Volume method|
+|`NEMO_EULER` | **Thermochemical Nonequilibrium Euler's equation** |Finite-Volume method |
+|`NEMO_NAVIER_STOKES` | **Thermochemical Nonequilibrium Navier-Stokes' equation** | Finite-Volume method |
|`INC_EULER` | **Incompressible Euler's equation** | Finite-Volume method |
|`INC_NAVIER_STOKES` | **Incompressible Navier-Stokes' equation** | Finite-Volume method|
|`INC_RANS` | **Incompressible Reynolds-averaged Navier-Stokes' equation** | Finite-Volume method|
diff --git a/_docs_v7/Streamwise-Periodicity.md b/_docs_v7/Streamwise-Periodicity.md
new file mode 100644
index 00000000..e239e87b
--- /dev/null
+++ b/_docs_v7/Streamwise-Periodicity.md
@@ -0,0 +1,107 @@
+---
+title: Streamwise Periodicity
+permalink: /docs_v7/Streamwise-Periodicity/
+---
+
+| Solver | Version |
+| --- | --- |
+| `INC_NAVIER_STOKES`, `INC_RANS` | 7.0.0 |
+
+
+This page contains an overview of the theory behind streamwise periodic flow and builds upon [Incompressible Navier-Stokes](/docs_v7/Theory/#incompressible-navier-stokes). A tutorial for [Streamwise Periodic Flow](/tutorials/Inc_Streamwise_Periodic/) is available.
+
+---
+
+- [Limitations](#limitations)
+- [Introduction](#introduction)
+- [Pressure and Velocity Periodiciy](#pandv-periodiciy)
+ - [Massflow prescription](#massflow)
+- [Temperature Periodiciy](#T-periodiciy)
+ - [Fake temperature periodicity via outlet heat sink](#fake-temperature-periodicity-via-outlet-heat-sink)
+- [References](#references)
+
+---
+
+## Limitations
+- can only be used with the incompressible solver, namely `INC_NAVIER_STOKES` and `INC_RANS`
+- temperature dependent fluid properties (e.g. $$c_p, \mu_{lam}$$) cannot be used with real streamwise periodic flow
+
+## Introduction
+
+A flow can be modeled as streamwise periodic if the following statements hold true:
+
+$$\begin{align}
+\bar{v}\left( \bar{x} \right) &= \bar{v} \left( \bar{x}+\bar{t} \right), \\
+p\left( \bar{x} \right) &= p \left( \bar{x}+\bar{t} \right) + \Delta p_0, \\
+T\left( \bar{x} \right) &= T \left( \bar{x}+\bar{t} \right) - \Delta T_0.
+\end{align}$$
+
+With $$\bar{t}$$ being the translation vector between periodic interfaces and $$\Delta p_0, \Delta T_0$$ the constant pressure or temperature drop between the periodic interfaces.
+
+## Pressure and Velocity Periodicity
+
+The continuous relation between physical pressure $$p$$ and periodic/reduced pressure $$\tilde{p}$$ in space is:
+
+$$p\left( \bar{x} \right) = \tilde p \left( \bar{x} \right) - \frac{\Delta p_0}{\left\lVert\bar{t}\right\rVert_2}t_p, \quad t_p =\frac{1}{\left\lVert\bar{t}\right\rVert_2} \left| \left( \bar{x} - \bar{x}^\star \right) \cdot \bar{t} \right|.$$
+
+This separation into two parts can be interpreted as a "constant" and a "linear" (along the domain) contribution.
+This relation is used to compute the recovered pressure for postprocessing.
+Inserting this pressure formulation into the momentum equation of the incompressible Navier-Stokes equation (see [here](/docs_v7/Theory/#incompressible-navier-stokes)) results in:
+
+$$\frac{\partial \bar{v}}{\partial t} + \nabla\cdot\left( \rho \bar{v} \otimes \bar{v} + \bar{\bar{I}}\tilde{p} - \bar{\bar \tau} \right) - \frac{\Delta p_0}{\left\lVert\bar{t}\right\rVert_2^2}\bar{t} = 0,$$
+
+where two things changed:
+1. Working variable of the pressure $$p$$ changed to the periodic pressure $$\tilde{p}$$.
+2. A constant source term is added to the formulation of the momentum equation.
+
+The source term is now the force that drives the flow and scales with the prescribed pressure drop $$\Delta p_0$$.
+
+This substitution of the pressure variable has to be done in every place it appears. For pressure there is nothing further to do e.g. for the boundary conditions, which will be different for the derivation of periodic temperature.
+
+### Massflow prescription
+
+In applications often the massflux $$\dot{m}_0^2$$ is known and the pressure drop is the observable. If a massflow is prescribed the pressure drop $$\Delta p_0$$ in the source term is adapted with each iteration to match the current massflow $$\dot{m}^2$$ with the prescribed massflow:
+
+
+$$\Delta p_0^{n+1} - \Delta p_0^{n} = \Delta \left( \Delta p_0 \right) = \frac{\frac{1}{2} \rho \left( \dot{m}_0^2 - \dot{m}^2 \right)}{\left( \rho A \right)^2}.$$
+
+$$\rho$$ is the density and $$A$$ the flowed through inlet Area. For the pressure drop update a relaxation factor $$\phi$$ is used:
+
+$$\Delta p_0^{n+1} = \Delta p_0^{n} + \phi \Delta \left( \Delta p_0 \right).$$
+
+## Temperature Periodicity
+
+The here presented approach for periodicity in temperature is only possible if only heatflux or symmetry boundary conditions are used, isothermal walls in particular are not allowed. In that case use the [method described below](#fake-temperature-periodicity-via-outlet-heat-sink) is used:
+
+Similar to the pressure term for the momentum equation the Temperature can be split in a periodic and a linear part:
+
+$$T\left( \bar{x} \right) = \tilde T \left( \bar{x} \right) + \frac{\Delta T_0}{\left\lVert\bar{t}\right\rVert_2}t_p, \quad t_p =\frac{1}{\left\lVert\bar{t}\right\rVert_2} \left| \left( \bar{x} - \bar{x}^\star \right) \cdot \bar{t} \right|$$
+
+Just as with the pressure term, this relation is used to compute the recovered temperature for postprocessing.
+Inserting the temperature formulation into the energy equation results in:
+
+$$\frac{\partial \left( \rho c_p \tilde{T} \right)}{\partial t} + \nabla\cdot\left( \rho c_p \tilde{T} \bar{v} - \kappa\nabla \tilde{T} \right) + \frac{Q \rho }{ \dot{m}\left\lVert\bar{t}\right\rVert_2^2} \left[ \bar{t} \cdot \bar{v} \right] = 0$$
+
+With $$Q$$ being the integrated heatflux across the domain boundaries in Watts. In contrast to the derivation for pressure periodicity in the momentum equations the boundary conditions have to adapted for the energy equation. The heatflux (Neumann) wall contribution for the energy equation becomes:
+
+$$- \int_{\partial\Omega} \left( \kappa\nabla T \right) \cdot \bar{n} dS + \int_{\partial\Omega} \kappa\frac{Q}{\dot{m} c_p \left\lVert\bar{t}\right\rVert_2^2} \left[ \bar{t} \cdot \bar{n} \right] dS = 0 $$
+
+### Temperature periodicity via outlet heat sink
+
+In cases where the above requirements cannot be held (e.g. isothermal walls, CHT interfaces) a simple massflow averaged outlet heat sink is implemented. In these cases pressure is still periodic but temperature is solved in its non-periodic form. Energy is extracted from the domain just at the outlet such that the temperature profile via the periodic interface is approximately retained. This of course is a major simplification that enables the use of an approximated temperature profile over the periodic interface. Solution interpretation, especially if it involves surface temperature integrals near the periodic faces, should be done with the necessary care.
+
+The residual contributions are in twofold. Firstly an either user provided or computed heat is extracted at the outlet with massflow averaged weighting which proved to be better than area averaged weighting:
+
+$$Res -= \frac{\dot m_{local}}{\dot m_{global}} Q_{integrated}$$
+
+The second term is adaptive and scales with the difference between the initial temperature `INC_TEMPERATURE_INIT` and the actual area averaged temperature on the inlet:
+
+$$Res += \frac{1}{2} |\dot m| c_p \left( T_{inlet} - \frac{T_{init}}{T_{ref}} \right)$$
+
+This allows to set the general temperature level in the domain and thereby also allows for the use of temperature material parameters, or isothermal walls and CHT interfaces.
+
+## References
+
+$$^1$$ S.V. Patankar, C.H. Liu, and E.M. Sparrow. Fully developed flow and heat transfer in ducts having streamwise-periodic variations of cross-sectional area. *Journal of Heat Transfer*, 99(2):180–186, 1977. doi: [https://doi.org/10.1115/1.3450666](https://doi.org/10.1115/1.3450666)
+
+$$^2$$ Steven B. Beale. On the implementation of stream-wise periodic boundary conditions. In *ASME 2005 Summer Heat Transfer Conference collocated with the ASME 2005 Pacific Rim Technical Conference and Exhibition on Integration and Packaging of MEMS, NEMS, and ElectronicSystems*, pages 771–777. American Society of Mechanical Engineers, 2005. doi: [https://doi.org/10.1115/HT2005-72271](https://doi.org/10.1115/HT2005-72271)
\ No newline at end of file
diff --git a/_docs_v7/Style-Guide.md b/_docs_v7/Style-Guide.md
index 11f02921..fe2666f5 100644
--- a/_docs_v7/Style-Guide.md
+++ b/_docs_v7/Style-Guide.md
@@ -3,101 +3,71 @@ title: Style Guide
permalink: /docs_v7/Style-Guide/
---
-SU2 is released under an open source license to facilitate its widespread use and development in the scientific computing community. To support uniformity and consistency in the style of the source code, a C++ style guide has been included on this page, and it is strongly encouraged that outside developers adhere to the guidelines dictated in the style guide to maintain readability of the source.
+To support uniformity and consistency in the style of the source code, a C++ style guide has been included on this page, and it is strongly encouraged that outside developers adhere to the guidelines dictated in the style guide to maintain readability of the code.
Any contributions from the scientific community at-large are encouraged and welcomed. Feel free to contact the development team at any time.
-This document describes the conventions that will be used when implementing new features in SU2. This includes allowed syntactic and semantic language features, filename conventions, indentation conventions and more. The consistency is fundamental, it is very important that any programmer be able to look at another part of the code and quickly understand it, the uniformity in the style is a key issue. Some of the ideas expressed in this document comes from the Google C++ Style Guide (revision 3.188).
+This document describes the conventions that will be used when implementing new features in SU2. Consistency is fundamental, it is very important that any programmer be able to look at another part of the code and quickly understand it. Some of the ideas expressed in this document come from the Google C++ Style Guide, others from the [C++ Core Guidelines](https://github.com/su2code/SU2/issues/1218).
## C++ style guide
+Below is summary of the rules we try to follow in SU2. **Older parts of SU2 are not good examples of these rules.**
+
+**Duplicating code is absolutely not allowed.**
+
### Version numbering
-Each code of the SU2 suite must have a release number following the rule Major.Patch, where the Major number is increased each time a new major update is performed and the Patch number is increased each time new features are added. The configuration file also has a number following the rule Major.Patch, where Major correspond with the SU2_CFD major version and Patch is increased with new changes.
+The SU2 suite has a major release number followed the rule minor.path, where the minor number is increased each time a significant update is performed and the patch number is increased in maintenance releases.
+Patch releases cannot break backward compatibility.
### Standard conformance, and formatting
-Source code must comply with the C++ ISO/ANSI standard. with respect to the formatting some recommendation can be made:
-- Each line of text in your code should be at most 80 characters long.
-- Non-ASCII characters should be rare, and must use UTF-8 formatting.
-- Use only spaces (default indent is 2 spaces). You can set your editor to emit spaces when you hit the tab key.
-- Sections in public, protected and private order, each indented one space.
-- The hash mark that starts a preprocessor directive should always be at the beginning of the line.
-- When you have a boolean expression that is longer than the standard line length, be consistent in how you break up the lines.
+SU2 is written for C++11, the formatting rules are defined in a `clang-format` file located in the root of the repository.
+**New files must follow the formatting rules exactly.**
+
+SU2 uses pre-commit to enforce a consistent formatting. To use, [install pre-commit](https://pre-commit.com/#install) and run `pre-commit install` at the root of the project. You can now force the formatting on all files with `pre-commit run -a`. This will also run all pre-commit hooks before each commit, preventing dirty commits in the repository.
### Files, functions, and variables
-Here some basic recommendation are made for creating files, functions, and variables:
+Basic recommendations for creating files, functions, and variables:
- C++ filenames must have extension .cpp.
- C++ header filenames must have extension .hpp. In general, every .cpp file should have an associated .hpp file.
-- C++ inline filenames must have extension .inl. Define functions inline only when they are small, say, 10 lines or less.
-- All subprograms (subroutines of functions) must be contained in a class. Each parent class must be contained in a file with the same name as the class (plus extension ’.cpp’, and ’.hpp’). This implies that there can only be one parent class per file.
-- When defining a function, parameter order is: inputs, then outputs.
+- When defining a function, the parameter order is: inputs, then outputs.
- Order of includes. Use standard order for readability and to avoid hidden dependencies: C library, C++ library, other libraries', your project's.
-- Prefer small and focused functions.
+- Write small and focused functions.
- Use overloaded functions (including constructors) only if a reader looking at a call site can get a good idea of what is happening without having to first figure out exactly which overload is being called.
- Local variables. Place a function's variables in the narrowest scope possible, and initialize variables in the declaration.
-- Static or global variables of class type are forbidden: they cause hard-to-find bugs due to indeterminate order of construction and destruction.
-- In the initialization, use 0 for integers, 0.0 for reals, NULL for pointers, and '\0' for chars.
-
-### Classes
-
-The classes are the key element of the object oriented programming, here some basic rules are specified.
-In general, constructors should merely set member variables to their initial values. Any complex initialization should go in an explicit Init() method.
-- You must define a default constructor, and destructor.
-- Use the C++ keyword explicit for constructors with one argument.
-- Use a struct only for passive objects that carry data; everything else is a class.
-- Do not overload operators except in rare, special circumstances.
-- Use the specified order of declarations within a class: public: before private:, methods before data members (variables), etc.
-
-### Syntactic and semantic requirements
-
-In this section you can find some basic rules for programming:
-- All allocated memory must be deallocated at program termination.
-- Read or write operations outside an allocated memory block are not allowed.
-- Read or write outside index bounds in arrays or character variables are not allowed.
-- No uninitialized/undefined values may be used in a way that could affect the execution.
-- Local variables that are not used must be removed.
-- Pointer variables must be initialized with NULL unless they are obviously initialized in some other way before they are used.
-- Indentation will be two steps for each nested block-level.
-- In the header file, at the beginning of each program unit (class, subroutine or function) there must be a comment header describing the purpose of this code. The doxygen format should be used.
-- When possible, it is better to use #DEFINE with a physical meaning to simplify the code.
-- The code must be compiled using doxygen to be sure that there is no warning in the commenting format.
-- When describing a function the following tag must be used: \brie_, \para_\[in\], \para_\[out\], \retur_, \overload.
-- Static or global variables of class type are forbidden: they cause hard-to-find bugs due to indeterminate order of construction and destructionUse 0 for integers, 0.0 for reals, NULL for pointers, and '\0' for chars.
-- All parameters passed by reference must be labeled const. We strongly recommend that you use const whenever it makes sense to do so.
-- In the code short, int, and the unsigned version of both must be used case depending.
-- Code should be 64-bit and 32-bit friendly. Bear in mind problems of printing, comparisons, and structure alignment
+- Static or global variables of class type are forbidden.
+- Make abundant use of `const`.
+- Always use `su2double` for floating point variables, do not use `double`, `float`, or `auto`.
+- Use `auto` or `auto&` or `auto*` for other types of variables.
-### Naming
-
-The most important consistency rules are those that govern naming. The style of a name immediately informs us what sort of thing the named entity is: a type, a variable, a function, a constant, a macro, etc., without requiring us to search for the declaration of that entity.
-
-The following naming conventions for variables must be used:
-- Geometry: Normal, Area (2D, and 3D), Volume (2D, and 3D), Coord, Position. Solution: Solution, Residual, Jacobian.
-- Function names, variable names, and filenames should be descriptive; eschew abbreviation. Types and variables should be nouns, while functions should be "command" verbs.
-- Elementary functions that set or get the value of a variable (e.g. Number) must be called as GetNumber(), or GetNumber(). Function names start with a capital letter and have a capital letter for each new word, with no underscores.
-- Variable names are all lowercase, with underscores between words.
-- The name for all the classes must start with the capital "C" letter, followed by the name of the class (capitalizing the first letter), if the name is composed by several words, all the words must be together, e.g.: CPrimalGrid.
-- All the variables that are defined in a class must be commented using /\*< \brief \________.\*/.
+### Code Documentation
-### Comments
-
-The documentation, and comments must be Doxygen friendly, here I include some basic features:
+Classes and functions must be documented with doxygen:
- Start each file with a copyright notice, followed by a description of the contents of the file.
-- Every class definition should have an accompanying comment that describes what it is for and how it should be used.
-- Declaration comments describe use of the function; comments at the definition of a function describe operation.
-- In general the actual name of the variable should be descriptive enough to give a good idea of what the variable is used for.
+- Every class/function definition must have an accompanying comment that describes what it is for and how it should be used.
+- The code must be compiled using doxygen to be sure that there are no warnings in the commenting format.
+- When describing a function or class the following tags must be used: `\brief`, `\param[in]`, `\param[out]`, `\return`, `\overload`.
+- Do not document the obvious, but rather the expected behavior/usage or the class or function, use `\note` to add details of an algorithm, include links to literature when appropriate.
- In your implementation you should have comments in tricky, non-obvious, interesting, or important parts of your code.
- Pay attention to punctuation, spelling, and grammar; it is easier to read well-written comments than badly written ones.
- Short, and long comments must be in inside of /\*--- (your comment here) ---\*/, and they must be located just before the line to be commented.
- Math comments are welcome and should be in the Latex language.
-### Debugger tools
+### Naming
+
+The consistency boat sailed a long time ago in SU2, the information below is more descriptive than prescriptive.
-- The C++ code must support the following features for debugging:
-- Array index bounds may be checked at runtime.
-- Conformance with C++ may be checked.
-- Use of obsolescent features may be reported as compilation warnings.
-- Unused variables may be reported as compilation warnings.
+The following naming conventions are in use:
+- Function names, variable names, and filenames should be descriptive; eschew abbreviation. Types and variables should be nouns, while functions should be "command" verbs.
+- Elementary functions that set or get the value of a variable (e.g. Number) must be called as SetNumber(), or GetNumber(). Function names start with a capital letter and have a capital letter for each new word, with no underscores.
+- The name for all the classes must start with the capital "C" letter, followed by the `NameOfTheClass` (camel case).
- Iteration: iPoint, jPoint, kPoint, iNode, jNode, kNode, iElem, jElem, kElem, iDim, iVar, iMesh, iEdge.
+
+**Variable names**
+- Acceptable styles are `lowerCamelCase` and `snake_case`.
+- Member variables can be `CamelCase`, or be ended `with_underscore_`.
+- Template parameters are `CamelCase`.
+- Be consistent and follow the existing style if you are modifying or fixing code, do not increase entropy...
+
diff --git a/_docs_v7/Test-Cases.md b/_docs_v7/Test-Cases.md
index 6d138bd3..3063a7f7 100644
--- a/_docs_v7/Test-Cases.md
+++ b/_docs_v7/Test-Cases.md
@@ -14,8 +14,6 @@ The two repositories contain the same directory structure for the test cases, wi
$ git clone https://github.com/su2code/SU2.git
$ git clone https://github.com/su2code/TestCases.git
$ cd SU2/
-$ ./configure
-$ make install
$ cp -R ../TestCases/* ./TestCases/
$ cd ./TestCases/
$ python serial_regression.py
diff --git a/_docs_v7/Theory.md b/_docs_v7/Theory.md
index 3b1ebfd6..c03d7ddc 100644
--- a/_docs_v7/Theory.md
+++ b/_docs_v7/Theory.md
@@ -3,15 +3,19 @@ title: Governing Equations in SU2
permalink: /docs_v7/Theory/
---
-This page contains a very brief summary of the different governing equation sets that are treated in each of the solvers within SU2. The reader will be referred to other references for the full detail of the numerical implementations, but we will also describe the approaches at a high level here.
+This page contains a very brief summary of the different governing equation sets that are treated in each of the solvers within SU2. The reader will be referred to other references in some instances for the full detail of the numerical implementations, but the approaches are also described at a high level here.
---
- [Compressible Navier-Stokes](#compressible-navier-stokes)
- [Compressible Euler](#compressible-euler)
+- [Thermochemical Nonequilibrium Navier-Stokes](#thermochemical-nonequilibrium-navier-stokes)
+- [Thermochemical Nonequilibrium Euler](#thermochemical-nonequilibrium-euler)
- [Incompressible Navier-Stokes](#incompressible-navier-stokes)
- [Incompressible Euler](#incompressible-euler)
- [Turbulence Modeling](#turbulence-modeling)
+- [Species Transport](#species-transport)
+- [Combustion](#combustion)
- [Elasticity](#elasticity)
- [Heat Conduction](#heat-conduction)
@@ -86,6 +90,68 @@ Within the `EULER` solvers, we discretize the equations in space using a finite
---
+# Thermochemical Nonequilibrium Navier-Stokes #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+
+To simulate hypersonic flows in thermochemical nonequilibrium, SU2-NEMO solves the Navier-Stokes equations for reacting flows, expressed in differential form as
+
+$$ \mathcal{R}(U) = \frac{\partial U}{\partial t} + \nabla \cdot \bar{F}^{c}(U) - \nabla \cdot \bar{F}^{v}(U,\nabla U) - S = 0 $$
+
+where the conservative variables are the working variables and given by
+
+$$U = \left \{ \rho_{1}, \dots, \rho_{n_s}, \rho \bar{v}, \rho E, \rho E_{ve} \right \}^\mathsf{T}$$
+
+$$S$$ is a source term composed of
+
+$$S = \left \{ \dot{w}_{1}, \dots, \dot{w}_{n_s}, \mathbf{0}, 0, \dot{\theta}_{tr:ve} + \sum_s \dot{w}_s E_{ve,s} \right \}^\mathsf{T}$$
+
+and the convective and viscous fluxes are
+
+$$\bar{F}^{c} = \left \{ \begin{array}{c} \rho_{1} \bar{v} \\ \vdots \\ \rho_{n_s} \bar{v} \\ \rho \bar{v} \otimes \bar{v} + \bar{\bar{I}} p \\ \rho E \bar{v} + p \bar{v} \\ \rho E_{ve} \bar{v} \end{array} \right \}$$
+
+and
+
+$$\bar{F}^{v} = \left \{ \begin{array}{c} \\- \bar{J}_1 \\ \vdots \\ - \bar{J}_{n_s} \\ \bar{\bar{\tau}} \\ \bar{\bar{\tau}} \cdot \bar{v} + \sum_k \kappa_k \nabla T_k - \sum_s \bar{J}_s h_s \\ \kappa_{ve} \nabla T_{ve} - \sum_s \bar{J}_s E_{ve} \end{array} \right \}$$
+
+In the equations above, the notation is is largely the same as for the compressible Navier-Stokes equations. An individual mass conservation equation is introduced for each chemical species, indexed by $$s \in \{1,\dots,n_s\}$$. Each conservation equation has an associated source term, $$\dot{w}_{s}$$ associated with the volumetric production rate of species $$s$$ due to chemical reactions occuring within the flow.
+
+Chemical production rates are given by $$ \dot{w}_s = M_s \sum_r (\beta_{s,r} - \alpha_{s,r})(R_{r}^{f} - R_{r}^{b}) $$
+
+where the forward and backward reaction rates are computed using an Arrhenius formulation.
+
+A two-temperature thermodynamic model is employed to model nonequilibrium between the translational-rotational and vibrational-electronic energy modes. As such, a separate energy equation is used to model vibrational-electronic energy transport. A source term associated with the relaxation of vibrational-electronic energy modes is modeled using a Landau-Teller formulation $$ \dot{\theta}_{tr:ve} = \sum _s \rho_s \frac{dE_{ve,s}}{dt} = \sum _s \rho_s \frac{E_{ve*,s} - E_{ve,s}}{\tau_s}. $$
+
+Transport properties for the multi-component mixture are evaluated using a Wilkes-Blottner-Eucken formulation.
+
+---
+
+# Thermochemical Nonequilibrium Euler #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_EULER` | 7.0.0 |
+
+
+To simulate inviscid hypersonic flows in thermochemical nonequilibrium, SU2-NEMO solves the Euler equations for reacting flows which can be obtained as a simplification of the thermochemical nonequilibrium Navier-Stokes equations in the absence of viscous effects. They can be expressed in differential form as
+
+$$ \mathcal{R}(U) = \frac{\partial U}{\partial t} + \nabla \cdot \bar{F}^{c}(U) - S = 0 $$
+
+where the conservative variables are the working variables and given by
+
+$$U = \left \{ \rho_{1}, \dots, \rho_{n_s}, \rho \bar{v}, \rho E, \rho E_{ve} \right \}^\mathsf{T}$$
+
+$$S$$ is a source term composed of
+
+$$S = \left \{ \dot{w}_{1}, \dots, \dot{w}_{n_s}, \mathbf{0}, 0, \dot{\theta}_{tr:ve} + \sum_s \dot{w}_s E_{ve,s} \right \}^\mathsf{T}$$
+
+and the convective and viscous fluxes are
+
+$$\bar{F}^{c} = \left \{ \begin{array}{c} \rho_{1} \bar{v} \\ \vdots \\ \rho_{n_s} \bar{v} \\ \rho \bar{v} \otimes \bar{v} + \bar{\bar{I}} p \\ \rho E \bar{v} + p \bar{v} \\ \rho E_{ve} \bar{v} \end{array} \right \}$$
+
# Incompressible Navier-Stokes #
| Solver | Version |
@@ -93,7 +159,9 @@ Within the `EULER` solvers, we discretize the equations in space using a finite
| `INC_NAVIER_STOKES`, `INC_RANS` | 7.0.0 |
-SU2 solves the incompressible Navier-Stokes equations in a general form allowing for variable density due to heat transfer through the low-Mach approximation (or incompressible ideal gas formulation). The equations can be expressed in differential form as
+SU2 solves the incompressible Navier-Stokes equations in a general form allowing for variable density due to heat transfer through the low-Mach approximation (or incompressible ideal gas formulation).
+The reader is referred to [this paper](https://arc.aiaa.org/doi/10.2514/1.J058222) for extended details on the incompressible Navier-Stokes and Euler solvers in SU2.
+The equations can be expressed in differential form as
$$ \mathcal{R}(V) = \frac{\partial V}{\partial t} + \nabla \cdot \bar{F}^{c}(V) - \nabla \cdot \bar{F}^{v}(V,\nabla V) - S = 0 $$
@@ -163,9 +231,64 @@ Within the `INC_EULER` solver, we discretize the equations in space using a fini
# Turbulence Modeling #
-The Shear Stress Transport (SST) model of Menter and the Spalart-Allmaras (S-A) model are two of the most common and widely used turbulence models. The S-A and SST standard models, along with several variants, are implemented in SU2. The reader is referred to the [NASA Turbulence Modeling Resource](https://turbmodels.larc.nasa.gov/index.html) (TMR) for the details of each specific model, as the versions in SU2 are implemented according to the well-described formulations found there.
+Available for `RANS`, `INC_RANS`.
+
+SU2 implements several variants of the SST and SA turbulence models, for specifics of the models please see the [NASA Turbulence Modeling Resource](https://turbmodels.larc.nasa.gov/index.html) (TMR).
+For information on how to use turbulence models in SU2 see the [users guide](https://su2code.github.io/docs_v7/Physical-Definition/).
+
+The edge-based finite volume discretization of flow solvers is also used in turbulence solvers. Convective fluxes are evaluated using a scalar upwind scheme (1st or 2nd order).
+
+## Wall functions
+
+Available for `RANS`, `INC_RANS`.
+
+The wall function model of Nichols and Nelson (2004) has been implemented in the compressible and the incompressible solver, for the SA as well as the SST models. For the compressible solver, the wall function model takes into account the frictional heating of the wall according to the Crocco-Busemann relation when the wall boundary conditions is not isothermal. When the wall model is active, the value of the dimensional distance of the first node from the wall can be $$ y^+ > 5$$. When the wall model is not active, $$y^+ < 5 $$ and in addition a fine mesh is necessary close to the wall to resolve the near wall boundary layer.
+
+---
+
+# Species Transport #
+
+Compatible with `NAVIER_STOKES`, `RANS`, `INC_NAVIER_STOKES`, `INC_RANS`.
+
+$$ \mathcal{R}(U) = \frac{\partial U}{\partial t} + \nabla \cdot \bar{F}^{c}(U) - \nabla \cdot \bar{F}^{v}(U,\nabla U) - S = 0 $$
+
+where the conservative variables (which are also the working variables) are given by
+
+$$U=\left\lbrace \rho Y_1, ..., \rho Y_{N-1} \right\rbrace ^\mathsf{T}$$
+
+with $$Y_i$$ $$[-]$$ being the species mass fraction. And
+
+$$\sum_{i=0}^N Y_i = 1 \Rightarrow Y_N = 1 - \sum_{i=0}^{N-1} Y_i$$
+
+$$S$$ is a generic source term, and the convective and viscous fluxes are
+
+$$\bar{F}^{c}(V) = \left\{\begin{array}{c} \rho Y_1 \bar{v} \\ ... \\\rho Y_{N-1} \, \bar{v} \end{array} \right\}$$
+
+$$\bar{F}^{v}(V,\nabla V) = \left\{\begin{array}{c} \rho D \nabla Y_{1} \\ ... \\ \rho D \nabla Y_{N-1} \end{array} \right\} $$
+
+with $$D$$ $$[m^2/s]$$ being the mass diffusion.
+For turbulence modeling, the diffusion coefficient becomes:
+
+$$\rho D = \rho D_{lam} + \frac{\mu_T}{Sc_{T}}$$
+
+where $$\mu_T$$ is the eddy viscosity and $$Sc_{T}$$ $$[-]$$ the turbulent Schmidt number.
+
+---
+
+# Combustion #
+
+| Solver | Version |
+| --- | --- |
+| `INC_NAVIER_STOKES` | 8.0.0 |
+
+Combustion with tabulated chemistry solves the scalar transport equations for total enthalpy $$h_t=h + h_{chem}$$, which is the sum of the sensible enthalpy and the chemical enthalpy. Additionally, it solves a transport equation for the progress variable $$C$$, indicating the progress of combustion. Reaction source terms for the progress variable, as well as necessary thermodynamic quantities like density, temperature, viscosity, heat capacity, etc. are all obtained from a 2D lookup table where the properties are stored as a function of the progress variable and total enthalpy. Note that temperature is now a quantity that is retrieved from the lookup table. These lookup tables are constructed from 1D detailed chemistry simulations, using codes like Cantera, Ember, FlameMaster (RWTH Aachen) or Chem1d (TU Eindhoven) and are also known as flamelets or Flamelet Generated Manifolds (FGM).
+
+The progress variable-enthalpy approach is used to simulate laminar premixed flames. Nonpremixed flames can also be simulated by simply using a lookup table for non-premixed flames. The progress variable then effectively becomes a mixture fraction. Combustion with conjugate heat transfer is also supported in the tabulated chemistry approach.
+Additional transport of (reacting) species can be supported as well. The source terms for these additional species have to be stored in the lookup table. A split-source-term approach is supported, where the source term is assumed to be of the form $$S_{total} = S_{Production} + Y \cdot S_{Consumption}.$$ We store the production and consumption terms in the lookup table and construct the total source term internally. If only a total source term is available, the consumption source term can be set to zero.
+
+At the moment there is no turbulence-chemistry interaction implemented in this approach and the Lewis number is assumed to be $$Le=1$$.
-Within the turbulence solvers, we discretize the equations in space using a finite volume method (FVM) with a standard edge-based data structure on a dual grid with vertex-based schemes. The convective and viscous fluxes are evaluated at the midpoint of an edge.
+For a detailed introduction to flamelet modeling see the work of [van Oijen et al.](https://www.sciencedirect.com/science/article/pii/S0360128515300137)
---
diff --git a/_docs_v7/Thermochemical-Nonequilibrium.md b/_docs_v7/Thermochemical-Nonequilibrium.md
new file mode 100644
index 00000000..aff2df7c
--- /dev/null
+++ b/_docs_v7/Thermochemical-Nonequilibrium.md
@@ -0,0 +1,400 @@
+---
+title: Thermochemical Nonequilibrium
+permalink: /docs_v7/Thermochemical-Nonequilibrium/
+---
+
+This page contains a summary of the physical models implemented in the NEMO solvers in SU2 designed ot simulate hypersonic flows in thermochemical nonequilibrium. This includes detials on thermodynamic and chemistry models, as well as transport properties and boundary conditions.
+
+---
+
+- [Thermodynamic Model](#thermodynamic-model)
+- [Finite Rate Chemistry](#finite-rate-chemistry)
+- [Vibrational Relaxation](#vibrational-relaxation)
+- [Viscous Phenomena and Transport Coefficients](#viscous-phenomena-and-transport-coefficients)
+ - [Wilkes-Blottner-Eucken](#wilkes-blottner-eucken)
+ - [Gupta-Yos](#gupta-yos)
+ - [Sutherland Viscosity Model](#sutherland-viscosity-model)
+- [Slip Flow](#slip-flow)
+- [Gas-surface Interaction](#gas-surface-interaction)
+
+---
+
+# Thermodynamic Model #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_EULER`, `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+A rigid-rotor harmonic oscillator (RRHO) two-temperature model is used to model the thermodynamic state of continuum hypersonic flows. Through the independence of the energy levels, the total energy and vibrational--electronic energy per unit volume can be expressed as
+$$ \rho e = \sum_s \rho_s \left(e_s^{tr} + e_s^{rot} + e_s^{vib} + e_s^{el} + e^{\circ}_s + \frac{1}{2} \bar{v}^{\top} \bar{v}\right),
+$$
+and
+$$
+ \rho e^{ve} = \sum_s \rho_{s} \left(e_s^{vib} + e_s^{el}\right).
+$$
+
+Considering a general gas mixture consisting of polyatomic, monatomic, and free electron species, expressions for the energy stored in the translational, rotational, vibrational, and electronic modes are given as
+$$
+ e^{tr}_s =\begin{cases}
+ \frac{3}{2} \frac{R}{M_s} T & \text{for monatomic and polyatomic species,}\\
+ 0 & \text{for electrons,}
+ \end{cases}
+$$
+$$
+ e^{rot}_s =\begin{cases}
+ \frac{\xi }{2} \frac{R}{M_s} T & \text{for polyatomic species,}\\
+ 0 & \text{for monatomic species and electrons,}
+ \end{cases}
+$$
+\
+where $$\xi$$ is an integer specifying the number of axes of rotation,
+$$
+ e^{vib}_s =\begin{cases}
+ \frac{R}{M_s} \frac{\theta^{vib}_s}{exp\left( \theta^{vib}_s / T^{ve}\right) - 1} & \text{for polyatomic species,}\\
+ 0 & \text{for monatomic species and electrons,}
+ \end{cases}
+$$
+\
+where $$\theta^{vib}_s$$ is the characteristic vibrational temperature of the species, and
+
+
+$$
+ e^{el}_s =\begin{cases}
+ \frac{R}{M_s}\frac{\sum_{i=1}^{\infty} g_{i,s}{\theta^{el}_{i,s} \exp(-\theta^{el}_{i,s}/T_{ve})}}{\sum_{i=0}^{\infty} g_{i,s} exp(-\theta^{el}_{i,s}/T_{ve})} & \text{for polyatomic and monatomic species,}\\
+ \frac{3}{2} \frac{R}{M_s} T^{ve} & \text{for electrons,}
+ \end{cases}
+$$
+
+where $$\theta^{el}_s$$ is the characteristic electronic temperature of the species and $$g_i$$ is the degeneracy of the $$i^{th}$$ state.
+
+---
+
+# Finite Rate Chemistry #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_EULER`, `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+The source terms in the species conservation equations are the volumetric mass production rates which are governed by the forward and backward reaction rates, $$R^f$$ and $$R^b$$, for a given reaction $$r$$, and can be expressed as
+$$
+ \dot{w}_s = M_s \sum_r (\beta_{s,r} - \alpha_{s,r})(R_{r}^{f} - R_{r}^{b}).
+$$
+
+From kinetic theory, the forward and backward reaction rates are dependent on the molar concentrations of the reactants and products, as well as the forward and backward reaction rate coefficients, $$k^f$$ and $$k^b$$, respectively, and can be expressed as
+$$
+ R_{r}^f = k_{r}^f \prod_s (\frac{\rho_s}{M_s})^{\alpha_{s,r}},
+$$
+and
+$$
+ R_{r}^b = k_{r}^b \prod_s (\frac{\rho_s}{M_s})^{\beta_{s,r}}.
+$$
+
+For an Arrhenius reaction, the forward reaction rate coefficient can be computed as
+$$
+ k_{r}^f = C_r(T_r)^{\eta_r} exp\left(- \frac{\epsilon_r}{k_B T_r}\right),
+$$
+where $$C_r$$ is the pre-factor, $$T_r$$ is the rate-controlling temperature for the reaction, $$\eta_r$$ is an empirical exponent, and $$\epsilon_r$$ is the activation energy per molecule.
+
+The rate-controlling temperature of the reaction is calculated as a geometric average of the translation-rotational and vibrational-electronic temperatures,
+$$
+ T_r = (T)^{a_r}(T^{ve})^{b_r}.
+$$
+
+The value of he equilibrium constant $$K_{eq}$$ is expressed as
+
+$$
+ K_{eq} = \exp( A_0 \left(\frac{T^c}{10,000}\right) + A_1 + A_2 \log \left( \frac{10,000}{T^c} \right) + A_3 \left( \frac{10,000}{T^c} \right) + A_4 \left( \frac{10,000}{T^c} \right)^2 ),
+$$
+
+where $$T^c$$ is a controlling temperature and $$A_0 - A_4$$ are constants dependent on the reaction. These reaction constants, the rate constrolling temperature and Arrhenius parameters are stored within the fluid model class in SU2 NEMO.
+
+---
+
+# Vibrational Relaxation #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_EULER`, `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+Vibrational relaxation is computed using a standard Landau-Teller relaxation time with a Park high-temperature correction
+$$
+ \dot{\Theta}^{tr:ve} = \sum _s \rho_s \frac{de^{ve}_{s}}{dt} = \sum _s \rho_s \frac{e^{ve*}_{s} - e^{ve}_{s}}{\tau_s},
+$$
+where $$\tau_s$$ is computed using a combination of the Landau-Teller relaxation time, $$\langle \tau_s \rangle_{L-T}$$, and a limiting relaxation time from Park, $$\tau_{ps}$$ using
+$$
+ \tau_s = \langle \tau_s \rangle_{L-T} + \tau_{ps},
+$$
+and
+$$
+ \langle \tau_s \rangle_{L-T} = \frac{\sum_r X_r}{\sum_r X_r/\tau_{sr}}.
+$$
+The interspecies relaxation times are taken from experimental data from Millikan and White, expressed as
+$$
+ \tau_{sr} = \frac{1}{P}exp\left[A_sr\left(T^{-1/3} - 0.015\mu_{sr}^{1/4}\right) - 18.42\right].
+$$
+A limiting relaxation time, $$\tau_{ps}$$, is used to correct for under-prediction of the Millikan--White model at high temperatures. $$\tau_{ps}$$ is defined as
+$$
+ \tau_{ps} = \frac{1}{\sigma_s c_s n},
+$$
+
+where $$\sigma_s$$ is the effective collision~cross-section.
+
+---
+
+# Viscous Phenomena and Transport Coefficients #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+
+Mass, momentum, and energy transport in fluids are all governed by molecular collisions, and expressions for these transport properties can be derived from the kinetic theory. The mass diffusion fluxes, $$\mathbf{J}_s$$, are computed using Fick's Law of Diffusion:
+$$
+ \mathbf{J}_s = - \rho D_s \nabla(Y_s) + Y_s \sum_k \rho D_k \nabla(Y_k)
+$$
+
+where $$c_s$$ is the species mass fraction and $$D_s$$ is the species multi-component diffusion coefficient. The values of $$D_s$$ are computed as a weighted sum of binary diffusion coefficients between all species in the mixture. These are obtained by solving the Stefan--Maxwell equations under the Ramshaw approximations. The viscous stress tensor is written as
+$$
+ \boldsymbol{\sigma} = \mu \left( \nabla \mathbf{u} + \nabla {\mathbf{u}}^\mathsf{T} - \frac{2}{3} \mathbf{I} (\nabla \cdot \mathbf{u}) \right),
+$$
+where $$\mu$$ is the mixture viscosity coefficient. The conduction heat flux for each thermal energy mode, $$\mathbf{q}^{k}$$, is modeled by Fourier’s Law of heat conduction:
+$$
+\mathbf{q}^{k} = \kappa^{k} \nabla(T^k),
+$$
+
+where $$\kappa^{k}$$ is the thermal conductivity associated with energy mode $$k$$.
+
+$$D_s$$, $$\mu$$, and $$\kappa$$ can be evaluated using the models discussed below by selecting the appropriate options in the configuration file.
+
+
+## Wilkes-Blottner-Eucken ##
+
+The mixture dynamic viscosity and thermal conductivity are computed using Wilke's semi-empirical mixing rule as
+
+$$
+\mu = \sum_s \frac{X_s \mu_s}{\phi_s},
+$$
+
+and
+
+$$
+\kappa = \sum_s \frac{X_s \kappa_s}{\phi_s},
+$$
+
+where $$X_s$$ is the mole fraction of species $$s$$. The species dynamic viscosity is computed using Blottner's three paramter curve fit for high temperature air,
+
+$$
+\mu_s = 0.1 \exp [(A_s\log(T) + B_s)\log(T) + C_s].
+$$
+
+The species thermal conductivities are computed according to Eucken's formula as
+
+$$
+\kappa^{tr}_s = \mu_s \left( \frac{5}{2} C_{v_s}^{trans} + C_{v_s}^{rot} \right),
+$$
+
+$$
+\kappa^{ve}_s = \mu_s C^{ve}_{v_s}.
+$$
+
+And the term $$\phi_s$$ is given by
+$$
+\phi_s = \sum_r X_r \left[ 1 + \sqrt{\frac{\mu_r}{\mu_s}}\left( \frac{M_r}{M_s} \right)^{1/4} \right]^{2} \left[ \sqrt{8 \left(1 + \frac{M_s}{M_r} \right)} \right]^{-1}.
+$$
+
+The effective species diffusion coefficeint is copmuted as a weighted sum of the species binary diffusion coefficients
+
+$$
+\frac{(1 - X_i)}{D_i} = \sum_{i \neq j} \frac{X_j}{D_{ij}},
+$$
+
+where the binary diffusion coefficients are computed as
+
+$$
+\rho D_{ij} = 1.1613 \times 10^{-25} \frac{M \sqrt{T \left( \frac{1}{M_i} + \frac{1}{M_j} \right) }}{\Omega_{ij}^{(1,1)}}.
+$$
+
+Collision integrals are computed using a four parameter curve fit for neutral-neutral, neutral-ion, and electron-ion collisions
+
+$$
+\pi \Omega_{ij}^{(n,n)} = D T^{A(\log(T))^2 + B \log(T) + C},
+$$
+
+where A-D are constants. Ion-ion, electron-ion, and electron-electron collisions modeled using a shielded Coulomb potential as
+
+$$
+\pi \Omega_{ij}^{(n,n)} = 5.0 \times 10^{15} \pi (\lambda_D / T)^2 \log \{D_n T^{*} \left[ 1 - C_n \exp\left( -c_n T^{*} \right) \right] + 1 \}
+$$
+
+where
+
+$$
+T^{*} = \frac{\lambda_D}{e^2_{CGS} / (k_{B,CGS} T) }
+$$
+
+and the Debye length $$\lambda_D$$ is defined as
+
+$$
+\lambda_D = \sqrt{\frac{k_{B,CGS} T}{4 \pi n_{e,CGS} e^2_{CGS}}}.
+$$
+
+The Wilkes-Blottner-Eucken model is generally efective up to temperatures of 10,000 K. Above these temperatures it is recommended to use the Gupta-Yos model.
+
+## Gupta-Yos ##
+
+Aother model develped by Gupta focuses on the transport properties of weakly ionized flows, and is generally more accurate than the Wilkes-Blottner-Eucken model at temperatures above 10,000 K.
+
+The forumalae for the transport coefficients are dependent on the collision terms
+
+$$
+\Delta_{s,r}^{(1)}(T) = \frac{8}{3} \left[ \frac{2M_s M_r}{\pi R T (M_s + M_r)} \right]^{1/2} \pi {\Omega_{s,r}^{(1,1)}}
+$$
+
+and
+$$
+\Delta_{s,r}^{(2)}(T) = \frac{16}{5} \left[ \frac{2M_s M_r}{\pi R T (M_s + M_r)} \right]^{1/2} \pi {\Omega_{s,r}^{(2,2)}},
+$$
+
+where the collision cross-sections are computed as described in the Wilkes-Blottner-Eucken section.
+
+The mixutre viscoisty is computed as
+
+$$
+\mu = \sum_{s \neq e} \frac{m_s \gamma_s}{\sum_{r \neq e} \gamma_r \Delta_{s,r}^{(2)}(T_{tr}) + \gamma_r \Delta_{e,r}^{(2)}(T_{ve})} + \frac{m_e \gamma_e}{\sum_r \gamma_r \Delta_{e,r}^{(2)}(T_{ve}) }
+$$
+
+where
+
+$$
+\gamma_s = \frac{\rho_s}{\rho M_s}.
+$$
+
+Thermal conductivity is computed in terms of different energy modes. The contribution due to translation modes is expressed as
+
+$$
+\kappa_t = \frac{15}{4} k_{B} \sum_{s \neq e}
+\frac{\gamma_s}{\sum_{r \neq e} a_{s,r} \gamma_r \Delta_{s,r}^{(2)}(T_{tr}) + 3.54 \gamma_e \Delta_{s,e}^{(2)}(T_{ve})},
+$$
+
+where
+
+$$
+a_{s,r} = 1 + \frac{\left[1 - (m_s/m_r) \right] \left[ 0.45 - 2.54(m_s/m_r) \right] }{\left[1 + (m_s/m_r) \right]^2}
+$$
+
+and where
+
+$$
+m_s = \frac{M_s}{N_{av}}
+$$
+
+with $$N_{av}$$ being Avogadro's Number. The thermal conductivity for the rotational modes is expressed as
+
+$$
+\kappa_r = k_{B} \sum_{s \neq e}
+\frac{\gamma_s}{\sum_{r \neq e} \gamma_r \Delta_{s,r}^{(1)}(T_{tr}) + \gamma_e \Delta_{s,e}^{(1)}(T_{ve})}.
+$$
+
+The mixture translational/rotational thermal conductivity can then be expressed as
+
+$$
+\kappa_{tr} = \kappa_t + \kappa_r.
+$$
+
+The vibrational/electronic mode thermal conductivity is
+
+$$
+\kappa_{ve} = k_{B} \frac{C_{ve}}{R} \sum_{s \in molecules} \frac{\gamma_s}
+{\sum_{r \neq e} \gamma_r \Delta_{s,r}^{(1)}(T_{tr}) + \gamma_e \Delta_{s,r}^{(1)}(T_{ve}) }
+$$
+
+and the thermal conductivity for electrons is given by
+
+$$
+\kappa_e = \frac{15}{4} k_{B} \frac{\gamma_e}{\sum_r 1.45 \gamma_r \Delta_{e,r}^{(2)}(T_{ve})}.
+$$
+
+Finally, the binary diffusion coefficient for heavy particles is given by
+
+$$
+D_{s,r} = \frac{k_{B} T_{tr}}{p \Delta_{s,r}^{(1)}(T_{tr})},
+$$
+
+and for electrons,
+
+$$
+D_{e,r} = \frac{k_{B} T_{ve}}{p \Delta_{e,r}^{(1)}(T_{ve})}.
+$$
+
+## Sutherland Viscosity Model ##
+
+In addition to the two models discussed above, there is the option to use a Sutherland model to calculate the flow viscosity. The Sutherland model is not applicable at high temperatures.
+
+In this case, the viscosity is computed as
+
+$$
+\mu = \mu_{0} \left( \frac{T}{T_{0}} \right)^{3/2} \frac{T_0 + S_{\mu}}{T + S_{\mu}},
+$$
+
+where $$T_0$$ is a reference temperature (273.15 K), $$\mu_0$$ is a reference viscosity, and $$S_{\mu}$$ is the Sutherland constant.
+
+If the Sutherland model is selected with a NEMO solver, species diffusion coefficients and thermal conductivity are computed using the models described in the Wilkes-Blottner-Eucken section.
+
+---
+
+# Slip Flow #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+SU2-NEMO uses the Maxwell velocity and Smoluchowski temperature jump equations to compute the velocity and temperature of the gas in contact with the surface. The equations are given as
+$$
+v_s = \frac{2 - \sigma}{\sigma} \lambda \frac{\partial v}{\partial n } + \\
+\frac{3}{4} \frac{\mu}{\rho T} \frac{\partial T}{\partial x},
+$$
+
+and
+$$
+T - T_w = \frac{2 - \alpha}{\alpha} \lambda \frac{2\gamma}{(\gamma + 1 )Pr} \frac{\partial T}{\partial n},
+$$
+
+respectively, where $$\mu$$ is the flow viscosity, $$\rho$$ is the mixture density, $$Pr$$ is the Prandtl number, $$\gamma$$ is the specific heat ratio, $$T$$ is the temperature of the gas, $$T_w$$ is the temperature of the surface, and $$\lambda$$ is the mean free path, calculated as
+$$
+ \lambda = \frac{\mu}{\rho} \frac{\pi}{\sqrt{2RT}}.
+$$
+
+The coefficients $$\sigma$$ and $$\alpha$$ are referred to as the Tangential Momentum Accommodation Coefficient (TMAC) and the Thermal Accommodation Coefficient (TAC), respectively. The values of the accommodation coefficients depend on the physical characteristics of the surface, and are usually determined empirically.
+
+
+---
+
+# Gas-surface Interaction #
+
+| Solver | Version |
+| --- | --- |
+| `NEMO_NAVIER_STOKES` | 7.0.0 |
+
+Mechanisms of gas-surface interaction are implemented as specific boundary conditions within the SU2-NEMO computational suite. The net result of recombination reactions occurring on the surface is a production of chemical species due to catalytic reactions, $$\dot{\omega}_s^{cat}$$, that must be balanced by the normal diffusive and convective flux at the wall. For steady flow and a no-slip boundary, this can be expressed as
+
+$$
+ \mathbf{J}_s \cdot \mathbf{n} = \dot{\omega}_s^{cat}.
+$$
+
+In SU2-NEMO, the chemical production of species due to catalytic processes is included in the computation of the viscous component of the residual, as an additional diffusive flux equivalent to the chemical source term computed due to catalytic reactions. Gradients of species density are then computed directly as part of the SU2-NEMO computational routine, which are used to compute gradients of species mass fraction at wall vertices.
+
+Options in SU2-NEMO include a super-catalytic wall in which species concentrations are set to specify full recombination to a specified equilibrium concentration (typically the free-stream conditions)
+
+$$
+Y_{w,s} = Y_{eq,s},
+$$
+
+as well as a partiall catalytic wall using a specified reaction efficiency model
+
+$$
+ \dot{\omega}_s^{cat} = \gamma_s Y_s \rho_w \sqrt{\frac{R_s T_w}{2\pi}},
+$$
+
+where $$\gamma_{s}$$ is the species catalytic efficiency, and represents the proportion of incident mass flux of monatomic species $$s$$ which recombines into its heteronuclear diatomic molecule at the wall.
+
+---
diff --git a/_docs_v7/Tracy-Integration.md b/_docs_v7/Tracy-Integration.md
new file mode 100644
index 00000000..ba95983c
--- /dev/null
+++ b/_docs_v7/Tracy-Integration.md
@@ -0,0 +1,99 @@
+---
+title: Integrating Tracy Profiler with SU2
+permalink: /docs_v7/Tracy-Integration/
+---
+
+- [Introduction](#introduction)
+- [Compiling SU2 with Tracy](#compiling-su2-with-tracy)
+- [Instrumenting SU2 Code](#instrumenting-su2-code)
+- [Running the Profiler and Visualizing Data](#running-the-profiler-and-visualizing-data)
+- [Conclusion](#conclusion)
+
+---
+
+## Introduction
+
+Tracy is a high-performance, real-time profiler designed for C++ applications, offering nanosecond-resolution timing with minimal overhead. It is an excellent tool for profiling computationally intensive software like SU2, where traditional profilers such as Valgrind may introduce significant slowdowns. This guide provides step-by-step instructions for integrating Tracy with SU2, enabling users to analyze and optimize the performance of their CFD simulations effectively.
+
+## Compiling SU2 with Tracy
+
+To compile SU2 with Tracy support, follow these steps:
+
+- Configure the build with Tracy enabled using Meson:
+ ```bash
+ ./meson.py setup build -Dwith-mpi=disabled --buildtype=debugoptimized -Denable-tracy=true --prefix=