Skip to content

Commit

Permalink
Merge pull request #248 from smpark7/sa-model
Browse files Browse the repository at this point in the history
Spalart-Allmaras turbulence model
  • Loading branch information
samgdotson authored Feb 27, 2024
2 parents e7c9239 + 3af88d2 commit 61a9442
Show file tree
Hide file tree
Showing 98 changed files with 4,992 additions and 660 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/auto-update-gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
conda deactivate
conda activate moose-env
git submodule init && git submodule update
make NAVIER_STOKES:='no' PHASE_FIELD:='no' REACTOR:='no' -j 2
make -j 2
cd doc
./moosedocs.py build --destination html
Expand Down
6 changes: 6 additions & 0 deletions doc/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ Content:
root_dir: ${ROOT_DIR}/doc/content
moose:
root_dir: ${MOOSE_DIR}/framework/doc/content
content:
- contrib/**
- css/**
- js/**
- media/**
squirrel:
root_dir: ${ROOT_DIR}/squirrel/doc/content

Expand All @@ -20,6 +25,7 @@ Extensions:
menu:
Getting Started:
Install Moltres: getting_started/installation.md
Theory: getting_started/theory.md
Tutorials: getting_started/tutorials.md
Documentation:
Moltres Syntax: syntax/index.md
Expand Down
174 changes: 174 additions & 0 deletions doc/content/getting_started/theory.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
# Theory and Methodology

The *two-step procedure* is a common approach for multiphysics full-core nuclear reactor analysis.
These steps are:

+Step 1:+ Generate neutron group constant data with a lattice or full-core reactor model on a
high-fidelity, continuous/fine-energy neutronics software at various reactor states.

+Step 2:+ Use an intermediate-fidelity, computationally cheaper neutronics software with the
neutron group constant data to perform multiphysics reactor analysis.

Moltres falls under Step 2 of the two-step procedure. Moltres solves the conventional multigroup
neutron diffusion and delayed neutron precursor equations. The precursor equations include
precursor drift terms to account for precursor movement under molten salt flow. Moltres is built on
the MOOSE finite element framework, enabling highly flexible and scalable reactor simulations.

## Multigroup Neutron Diffusion

More information to be added in future.

## Heat Transfer and Fluid Flow

Moltres compiles with the MOOSE
[Navier-Stokes](https://mooseframework.inl.gov/modules/navier_stokes/index.html) and
[Heat Transfer](https://mooseframework.inl.gov/modules/heat_transfer/index.html) modules for flow
modeling capabilities by default. Moltres couples with these modules natively because they are all
built on the MOOSE framework.

Past work with Moltres have modeled incompressible salt flow and temperature advection-diffusion
with the
[INS or INSAD implementations](https://mooseframework.inl.gov/modules/navier_stokes/cgfe.html) of
the Navier-Stokes equations [!citep](peterson_overview_2018). Coupling with the compressible or
finite volume implementations within the Navier-Stokes module are likely possible, but have not
been demonstrated yet.

For turbulence modeling, Moltres has a Spalart-Allmaras (SA) turbulence model
[!citep](spalart_one-equation_1992) implementation with streamline-upwind Petrov-Galerkin (SUPG)
stabilization. On balance the SA model is a complete (does not require prior knowledge of the
actual turbulence behavior) and computationally efficient turbulence model for approximating
wall-bounded turbulent flows. The SA model implementation in Moltres is
compatible with the INSAD implementation only. Additionally, Moltres contains turbulent diffusion
physics kernels for temperature and the delayed neutron precursors.

The SA model in Moltres follows the (SA-noft2-R) implementation as described on the NASA
[Turbulence Modeling Resource](https://turbmodels.larc.nasa.gov/spalart.html) website. The $f_{t2}$
term is togglable using the `use_ft2_term` input parameter (false by default). Moltres'
implementation solves for the modified dynamic viscosity $\tilde{\mu}$ which can be easily obtained
using $\nu=mu/\rho$ to convert $\nu$ to $\mu$ as follows:

!equation id=sa-equation
\rho \frac{\partial\tilde{\mu}}{\partial t} + \rho \mathbf{u}\cdot\nabla\tilde{\mu} = \rho c_{b1}
\left(1-f_{t2}\right)\tilde{S}\tilde{\mu} + \frac{1}{\sigma}\{\nabla\cdot\left[\left(\mu+
\tilde{\mu}\right)\nabla\tilde{\mu}\right] + c_{b2}|\nabla\tilde{\mu}|^2\} - \left(c_{w1}f_w -
\frac{c_{b1}}{\kappa^2}f_{t2}\right)\left(
\frac{\tilde{\mu}}{d}\right)^2

where

!equation
\mu_t = \tilde{\mu}f_{v1} = \text{turbulent eddy viscosity}, \hspace{4cm}
f_{v1} = \frac{\chi^3}{\chi^3 + c_{v1}^3}, \hspace{4cm}
\chi = \frac{\tilde{\mu}}{\mu}, \hspace{2cm} \\ \hspace{1cm}
\tilde{S} = \Omega + \frac{\tilde{\nu}}{\kappa^2 d^2} f_{v2}, \hspace{6cm}
f_{v2} = 1 - \frac{\chi}{1+\chi f_{v1}}, \hspace{2cm}
\Omega = \sqrt{2W_{ij}W_{ij}} = \text{vorticity magnitude}, \\
W_{ij} = \frac{1}{2}\left(\frac{\partial u_i}{\partial x_j} - \frac{\partial u_j}{\partial x_i}
\right), \hspace{5cm}
f_w = g\left(\frac{1 + c_{w3}^6}{g^6 + c_{w3}^6}\right)^{1/6}, \hspace{3cm}
g = r + c_{w2}\left(r^6 - r\right), \\
r = \text{min}\left(\frac{\tilde{\nu}}{\tilde{S}\kappa^2d^2}, 10\right), \hspace{5cm}
f_{t2} = c_{t3} \exp{\left(-c_{t4}\chi^2\right)}, \hspace{6cm}

and the constants are:

!equation
\sigma = \frac{2}{3}, \ c_{b1} = 0.1355, \ c_{b2} = 0.622, \ \kappa = 0.41, \
c_{w1} = \frac{c_{b1}}{\kappa^2} + \frac{1+c_{b2}}{\sigma}, \ c_{w2} = 0.3, \ c_{w3} = 2, \
c_{v1} = 7.1, \ c_{t3} = 1.2, \ c_{t4} = 0.5 \ \text{.}

We performed simple verification and validation tests of the SA model in Moltres using reference
problems for channel, pipe, and backward-facing step flow. The Moltres test dataset is available on
[Zenodo](https://doi.org/10.5281/zenodo.10059649). The following subsections show plots comparing
results from Moltres to reference data from literature.

#### Turbulent Channel Flow Verification Test

The channel flow test is based on the direct numerical simulation (DNS) of turbulent channel flow
with $Re_\tau\approx395$
by [!cite](moser_direct_1999). The Moltres input file for this problem may be found in
`moltres/problems/2023-basic-turbulence-cases/channel-flow/`.

!media channel_vel.png
id=channel-vel
caption=Normalized velocity distribution across the channel.
style=width:33%;padding:10px;float:left;

!media channel_nondim.png
id=channel-nondim
caption=Dimensionless velocity vs dimensionless wall distance.
style=width:33%;padding:10px;float:left;

!media channel_stress.png
id=channel-stress
caption=Normalized stress distribution across the channel.
style=width:33%;padding:10px;float:left;

#### Turbulent Pipe Flow Validation Test

The pipe flow test is based on the turbulent pipe flow experiment with $Re\approx 40,000$ by
[!cite](laufer_structure_1954). The Moltres input file for this problem may be found in
`moltres/problems/2023-basic-turbulence-cases/pipe-flow/`.

!media pipe_vel.png
id=pipe-vel
caption=Normalized velocity distribution across the pipe.
style=width:33%;padding:10px;float:left;

!media pipe_nondim.png
id=pipe-nondim
caption=Dimensionless velocity vs dimensionless wall distance.
style=width:33%;padding:10px;float:left;

!media pipe_stress.png
id=pipe-stress
caption=Normalized turbulent shear stress distribution across the channel.
style=width:33%;padding:10px;float:left;

#### Backward-Facing Step Flow Validation Test

The backward-facing step (BFS) flow test is based on the BFS flow experiment with $Re\approx
36,000$ by
[!cite](driver_features_1985). The Moltres input file for this problem may be found in
`moltres/problems/2023-basic-turbulence-cases/pipe-flow/`.
The SA model implementation in Moltres performs largely similarly to the reference SA model results
provided on the [Turbulence Modeling Resource](https://turbmodels.larc.nasa.gov/spalart.html)
website.

!table caption=Flow reattachment length estimates (normalized by step height $H$) id=re-table
| Reference experimental data | Reference SA model | Moltres |
| :- | :- | :- |
| $6.26 \pm 0.10$ | $6.1$ | $6.36$ |

!media bfs_upstream_vel.png
id=bfs-upstream-vel
caption=Normalized velocity distribution at $x/H$ equal -4 (upstream of step).
style=width:33%;padding:10px;float:left;

!media bfs_downstream_vel.png
id=bfs-downstream-vel
caption=Normalized velocity distribution at various $x/H$ locations (downstream of step).
style=width:33%;padding:10px;float:left;

!media bfs_cf.png
id=bfs-cf
caption=Skin friction coefficient along the bottom wall.
style=width:33%;padding:10px;float:left;

!media bfs_cp.png
id=bfs-cp
caption=Skin pressure coefficient along the bottom wall.
style=width:33%;padding:10px;margin-left:17%;float:left;

!media bfs_stress.png
id=bfs-stress
caption=Normalized turbulent shear stress distribution at various $x/H$ locations
(downstream of step).
style=width:33%;padding:10px;margin-right:17%;float:left;

!media bfs.png
id=bfs
caption=Close-up of the velocity magnitude and streamlines around the backward-facing step
style=width:80%;float:left;margin-left:10%;margin-right:10%;

!bibtex bibliography
77 changes: 77 additions & 0 deletions doc/content/getting_started/turbulence.bib
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@

@techreport{laufer_structure_1954,
title = {The structure of turbulence in fully developed pipe flow},
url = {https://ntrs.nasa.gov/citations/19930092199},
abstract = {Measurements, principally with a hot-wire anemometer, were made in fully developed turbulent flow in a 10-inch pipe at speeds of approximately 10 and 100 feet per second. Emphasis was placed on turbulence and conditions near the wall. The results include relevant mean and statistical quantities, such as Reynolds stresses, triple correlations, turbulent dissipation, and energy spectra. It is shown that rates of turbulent-energy production, dissipation, and diffusion have sharp maximums near the edge of the laminar sublayer and that there exist a strong movement of kinetic energy away from this point and an equally strong movement of pressure energy toward it.},
urldate = {2023-10-30},
institution = {National Bureau of Standards},
author = {Laufer, John},
month = jan,
year = {1954},
note = {NTRS Author Affiliations:
NTRS Report/Patent Number: NACA-TR-1174
NTRS Document ID: 19930092199
NTRS Research Center: Legacy CDMS (CDMS)},
file = {19930092199.pdf:C\:\\Users\\Sun Myung\\Zotero\\storage\\L8SHCFP9\\Laufer - 1954 - The structure of turbulence in fully developed pip.pdf:application/pdf;Snapshot:C\:\\Users\\Sun Myung\\Zotero\\storage\\7U6SXNMA\\19930092199.html:text/html},
}

@article{moser_direct_1999,
title = {Direct numerical simulation of turbulent channel flow up to {Reτ}=590},
volume = {11},
issn = {1070-6631},
url = {https://doi.org/10.1063/1.869966},
doi = {10.1063/1.869966},
abstract = {Numerical simulations of fully developed turbulent channel flow at three Reynolds numbers up to Reτ=590 are reported. It is noted that the higher Reynolds number simulations exhibit fewer low Reynolds number effects than previous simulations at Reτ=180. A comprehensive set of statistics gathered from the simulations is available on the web at http://www.tam.uiuc.edu/Faculty/Moser/channel.},
number = {4},
urldate = {2023-10-30},
journal = {Physics of Fluids},
author = {Moser, Robert D. and Kim, John and Mansour, Nagi N.},
month = apr,
year = {1999},
pages = {943--945},
file = {Full Text PDF:C\:\\Users\\Sun Myung\\Zotero\\storage\\R6IZTYHZ\\Moser et al. - 1999 - Direct numerical simulation of turbulent channel f.pdf:application/pdf;Snapshot:C\:\\Users\\Sun Myung\\Zotero\\storage\\NN9Z4VLF\\Direct-numerical-simulation-of-turbulent-channel.html:text/html},
}

@article{driver_features_1985,
title = {Features of a reattaching turbulent shear layer in divergent channelflow},
volume = {23},
issn = {0001-1452, 1533-385X},
url = {https://arc.aiaa.org/doi/10.2514/3.8890},
doi = {10.2514/3.8890},
language = {en},
number = {2},
urldate = {2022-01-17},
journal = {AIAA Journal},
author = {Driver, David M. and Seegmiller, H. Lee},
month = feb,
year = {1985},
pages = {163--171},
file = {Driver and Seegmiller - 1985 - Features of a reattaching turbulent shear layer in.pdf:C\:\\Users\\Sun Myung\\Zotero\\storage\\PHD7NPMR\\Driver and Seegmiller - 1985 - Features of a reattaching turbulent shear layer in.pdf:application/pdf},
}

@inproceedings{spalart_one-equation_1992,
title = {A one-equation turbulence model for aerodynamic flows},
url = {https://arc.aiaa.org/doi/abs/10.2514/6.1992-439},
urldate = {2023-11-02},
booktitle = {30th {Aerospace} {Sciences} {Meeting} and {Exhibit}},
publisher = {American Institute of Aeronautics and Astronautics},
author = {Spalart, P. and Allmaras, S.},
month = jan,
year = {1992},
doi = {10.2514/6.1992-439},
note = {\_eprint: https://arc.aiaa.org/doi/pdf/10.2514/6.1992-439},
}

@article{peterson_overview_2018,
title = {Overview of the {Incompressible} {Navier}-{Stokes} simulation capabilities in the {MOOSE} {Framework}},
volume = {119},
doi = {10.1016/j.advengsoft.2018.02.004},
abstract = {The Multiphysics Object Oriented Simulation Environment (MOOSE) framework is a high-performance, open source, C++ finite element toolkit developed at Idaho National Laboratory. MOOSE was created with the aim of assisting domain scientists and engineers in creating customizable, high-quality tools for multiphysics simulations. While the core MOOSE framework itself does not contain code for simulating any particular physical application, it is distributed with a number of physics "modules" which are tailored to solving e.g. heat conduction, phase field, and solid/fluid mechanics problems. In this report, we describe the basic equations, finite element formulations, software implementation, and regression/verification tests currently available in MOOSE's navier\_stokes module for solving the Incompressible Navier-Stokes (INS) equations.},
journal = {Advances in Engineering Software},
author = {Peterson, John and Lindsay, Alexander and Kong, Fande},
month = may,
year = {2018},
keywords = {65N30, Mathematics - Numerical Analysis},
pages = {68--92},
file = {arXiv\:1710.08898 PDF:C\:\\Users\\Sun Myung\\Zotero\\storage\\PBHHJKCD\\Peterson et al. - 2017 - Overview of the Incompressible Navier-Stokes simul.pdf:application/pdf;arXiv.org Snapshot:C\:\\Users\\Sun Myung\\Zotero\\storage\\3RRL7ED2\\1710.html:text/html;Full Text PDF:C\:\\Users\\Sun Myung\\Zotero\\storage\\YGQ9TDMU\\Peterson et al. - 2018 - Overview of the Incompressible Navier-Stokes simul.pdf:application/pdf},
}
13 changes: 2 additions & 11 deletions doc/content/getting_started/tutorials.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
# Tutorials

The *two-step procedure* is a common approach for multiphysics full-core nuclear reactor analysis.
These steps are:

+Step 1:+ Generate neutron group constant data with a lattice or full-core reactor model on a
high-fidelity, continuous/fine-energy neutronics software at various reactor states.

+Step 2:+ Use an intermediate-fidelity, computationally cheaper neutronics software with the
neutron group constant data to perform multiphysics reactor analysis.

Moltres falls under Step 2 of the two-step procedure. The following sections cover
The following sections cover
various tutorials for group constant file generation and running various types of reactor
simulations with Moltres. The tutorials assume that readers have a basic understanding of reactor
analysis, molten salt reactors, and the [MOOSE framework](https://mooseframework.inl.gov/).
Expand Down Expand Up @@ -44,7 +35,7 @@ the existing tutorials below.

+2b.+ [Eigenvalue Calculation](getting_started/eigenvalue.md)

+2c.+ [Time-dependent Simulation with Thermal-Hydraulic Coupling and Precursor Looping](getting_started/transient.md)
+2c.+ [Time-Dependent Simulation with Thermal-Hydraulic Coupling and Precursor Looping](getting_started/transient.md)

+Tip:+ [Recommended Executioner and Preconditioning Settings](getting_started/recommended.md)

Expand Down
9 changes: 5 additions & 4 deletions doc/content/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ Moltres is a finite element-based multiphysics reactor simulation tool for molte
(MSRs) and other advanced reactors in various dimensions and geometries. Moltres is built on the
MOOSE framework and provides multiphysics
capabilities to accurately model delayed neutron precursor drift and the strong temperature
feedback effects inherent in MSRs. Users have the flexibility of setting up fully coupled solves
in which all variables are solved in a single monolithic system or tightly coupled solves by
arbitrarily segregating systems of equations corresponding to separate physics. As a MOOSE-based
application, Moltres can also scale efficiently on high-performance computers.
feedback effects inherent in MSRs. Users have the flexibility of setting up fully coupled
solution schemes in which all variables are solved in a single monolithic system, or tightly
coupled solution schemes by arbitrarily segregating systems of equations corresponding to separate
physics. As a MOOSE-based application, Moltres can also scale efficiently on high-performance
computers.

!row!
!col! small=12 medium=4 large=6
Expand Down
Binary file added doc/content/media/bfs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/bfs_cf.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/bfs_cp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/bfs_downstream_vel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/bfs_stress.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/bfs_upstream_vel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/channel_nondim.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/channel_stress.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/channel_vel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/pipe_nondim.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/pipe_stress.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/content/media/pipe_vel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions doc/content/source/auxkernels/SATurbulentViscosityAux.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SATurbulentViscosityAux

!syntax description /AuxKernels/SATurbulentViscosityAux

## Overview

This object computes the turbulent viscosity $\mu_t=\tilde{\mu}f_{v1}$ as described
[here](theory.md).

## Example Input File Syntax

!! Describe and include an example of how to use the SATurbulentViscosityAux object.

!syntax parameters /AuxKernels/SATurbulentViscosityAux

!syntax inputs /AuxKernels/SATurbulentViscosityAux

!syntax children /AuxKernels/SATurbulentViscosityAux
18 changes: 18 additions & 0 deletions doc/content/source/auxkernels/TurbulentStressAux.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# TurbulentStressAux

!syntax description /AuxKernels/TurbulentStressAux

## Overview

This object computes the turbulent stress $\nu_t\sqrt{2S_{ij}S_{ij}}$ under the Spalart-Allmaras
model.

## Example Input File Syntax

!! Describe and include an example of how to use the TurbulentStressAux object.

!syntax parameters /AuxKernels/TurbulentStressAux

!syntax inputs /AuxKernels/TurbulentStressAux

!syntax children /AuxKernels/TurbulentStressAux
20 changes: 20 additions & 0 deletions doc/content/source/auxkernels/WallDistanceAux.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# WallDistanceAux

!syntax description /AuxKernels/WallDistanceAux

## Overview

This object computes the minimum distance of each mesh node to the nearest wall node. The wall
distance calculation may be slightly inaccurate for unstructured or skewed structured meshes as
illustrated on the [Turbulence Modeling Resource](https://turbmodels.larc.nasa.gov/spalart.html)
webpage.

## Example Input File Syntax

!! Describe and include an example of how to use the WallDistanceAux object.

!syntax parameters /AuxKernels/WallDistanceAux

!syntax inputs /AuxKernels/WallDistanceAux

!syntax children /AuxKernels/WallDistanceAux
Loading

0 comments on commit 61a9442

Please sign in to comment.