Compare commits

..

37 Commits

Author SHA1 Message Date
45fe65f83e CONFIG: backport of META-INFO information (#1367) 2019-07-10 20:19:01 +02:00
cdce0585f2 CONFIG: cannot pass additional arguments to foamEtcFile (closes #880)
- add support by using updated foamEtcFile from 1806, which also add
  the '-config' short-cut option.
2018-06-18 08:42:55 +02:00
714040678a BUG: dictionary lookup of embedded coordinateSystem fails (fixes #879)
- also fix incorrect documentation in forces functionObject and
  interRegionExplicitPorositySource fvOption.
2018-06-16 00:29:41 +02:00
b8ec4e12e1 TUT: added tutorial test with faceOnlySet sampling (issue #745) 2018-02-28 11:23:59 +01:00
e9a9d4c297 GIT: merge artifact duplicate call to update mesh moving 2018-02-28 10:59:53 +01:00
c6a651cc46 BUG: isoAdvection using 'vof2IsoTol' instead of 'isoFaceTol' (closes #740) 2018-02-23 15:11:24 +01:00
be3eee6c12 BUG: timeControlFunctionObject swallows dictionary modifications (closes #716)
- runTimeModifiable change to the dictionary not being propagated to
  the underlying functionObjects
2018-01-24 20:45:59 +01:00
07fd1aec5b ENH: use main constant/triSurface directory for sampling surfaces (closes #704)
- these were previously taken from region-local directories
  (eg, constant/region/triSurface), but this becomes difficult to
  manage when there are many files and regions.
2018-01-17 14:47:38 +01:00
7f646223bb TUT: minor update to div scheme test 2017-12-30 20:29:13 +00:00
c24a8c26ee ENH: Added divergence scheme test case 2017-12-05 11:43:09 +00:00
d88d1d53aa BUG: ensightSurfaceReader - corrected initial list sizing 2017-11-30 08:36:07 +00:00
74248c7469 BUG: Correcting expression for adimensional pressure drop table for fanFvPatchField 2017-11-16 11:01:54 -08:00
70873eb647 ENH: Avoidding 0/0 conflict in externalCoupledTemperatureMixed increaging the zero order of denomitaror 2017-11-15 12:58:58 -08:00
219c520f0b ENH: adding non-dimensional option to fanFvPatchField.C 2017-11-15 12:54:09 -08:00
ad00fed4aa BUG: steadyStateDdtSchems - corrected oriented state of return fields for *Corr functions. Fixes #634 2017-11-07 12:10:47 +00:00
198a215445 BUG: multiLevelCoeffs entry not mandatory (closes #620) 2017-10-10 19:32:53 +02:00
c8da996ace BUG: label overflow in multiLevel decomposition (closes #619)
- previously when more than two levels were used.
  Now calculate the required final target domain segment directly.
2017-10-10 18:06:52 +02:00
1e3cf9630e BUG: incorrect xml format tag for VTK surface mesh writer (closes #611) 2017-10-06 11:36:40 +02:00
e35df56231 BUG: thermoFoam - corrected to enable restart and post-processing using thermoFoam -postProcess. Fixes #598 2017-09-25 13:25:34 +01:00
1c0af6ecbc BUG: kOmegaSSTLM - corrected writing of coefficients. Fixes #592 2017-09-18 10:48:39 +01:00
d36f988d97 BUG: DESModelRegions - added missing field write() - see #591 2017-09-18 10:17:24 +01:00
680baba1b5 BUG: parse issues for nastran long format (closes #589) 2017-09-15 10:40:55 +02:00
346770e0d9 BUG: Correcting adimensional formulation for fanPressureFvPatchScalarField 2017-11-06 09:04:15 -08:00
b28502b3a8 ENH: Adding momemtum predictor to chtSimpleFoam 2017-11-06 09:03:42 -08:00
9e123313a7 ENH: Adding required interpolation for alpha.water in fvSchemes for overInterDyMFoam floatingBody tutorial 2017-09-08 15:40:22 -07:00
92fa08cf12 ENH: adding oversetAdjustPhi to overInterFoam plus reconstructing U from phi in pEq. 2017-09-08 15:35:27 -07:00
21301e3aba ENH: isoCutCell - improved robustness. Patch provided by Johan Roenby - see #582 2017-09-08 17:22:49 +01:00
c9b6b090ca BUG: Corrected Curle analogy implementation. See #574 2017-08-31 14:05:05 +01:00
838d6bc0b0 BugFix: keyword for caseDict also syncrhonized 2017-08-30 09:48:45 +05:30
5dbd697db5 BugFix: corrected keyword for flowRateInletVelocity BC fixes #577 2017-08-30 09:38:36 +05:30
a0721f7d00 BUG: Corrected construction of List from SLList. Fixes #571 2017-08-15 11:00:21 +01:00
68fe3cc35c ENH: Corrections to doxygen help 2017-08-10 11:14:10 +01:00
860b7f503d BUG: Corrected false integer divisions. Fixes #557 2017-08-07 11:53:54 +01:00
2ba590ec0b BUG: Fix viscosity in simpleFoam motorBike tutorial (fixes #550) 2017-07-27 19:55:12 -04:00
84aa61e650 BUG: incorrect range check in foamHelp (closes #547) 2017-07-22 23:54:08 +02:00
e9df8d9366 BUG: failed check for scotch headers on ubuntu (closes #543)
- installed under /usr/include/scotch/scotch.h

ENH: obtain fallback value for SCOTCH_VERSION from the header

COMP: add support for metis, scotch static libraries (eg, EasyBuild)
2017-07-20 12:15:08 +02:00
4645a440e1 STYLE: Updated directory names for interCondensatingEvaporatingFoam solver. Fixes #533 2017-07-19 08:24:17 +01:00
23985 changed files with 819153 additions and 2293584 deletions

32
.gitignore vendored
View File

@ -4,7 +4,6 @@
# Editor and misc backup files - anywhere
*~
.*~
.*.swp
*.bak
*.bak[0-9][0-9]
\#*\#
@ -12,7 +11,7 @@
# File-browser settings - anywhere
.directory
# Backup/recovery versions - anywhere
# CVS recovered versions - anywhere
.#*
# Objects and archives - anywhere
@ -23,7 +22,7 @@
# Derived files
lex.yy.c
# Core dumps
# Corefiles
core
# Dependency files - anywhere
@ -47,21 +46,22 @@ platforms/
# Reinstate wmake rules that might look like build directories
!/wmake/rules/*/
# Doxygen generated
# doxygen generated documentation
doc/Doxygen/html
doc/Doxygen/latex
doc/Doxygen/man
doc/Doxygen/DTAGS
# Generated files in the main and doc directories
# Generated files in the main directory (e.g. ReleaseNotes-?.?.html)
# and in the doc directory
/*.html
/doc/*.html
# Untracked configuration/preferences files
# Untracked configuration files
/etc/prefs.csh
/etc/prefs.sh
/etc/config.csh/prefs.*
/etc/config.sh/prefs.*
/etc/config.csh/prefs.csh
/etc/config.sh/prefs.sh
/wmake/rules/General/mplibUSER*
# Source packages - anywhere
@ -72,11 +72,19 @@ doc/Doxygen/DTAGS
*.tgz
*.gtgz
# Ignore tags or project files in the main directory
/.cproject
/.dir-locals.el
/.project
# Ignore the persistent .build tag in the main directory
/.build
# Ignore .timeStamp in the main directory
/.timeStamp
# Ignore .tags in the main directory
/.tags
# Ignore project files in the main directory
/.cproject
/.project
/.dir-locals.el
# Ignore the test directory
/tutorialsTest

View File

@ -1,73 +0,0 @@
<!--
*** Please read this first! ***
Before opening a new issue, make sure to search for keywords in the issues
filtered by the "bug" label and check to see if it has already been reported
You can see how your report will be rendered on the platform by using the
"preview" tab above
-->
<!--
All text between these markers are comments and will not be present in the
report
-->
### Summary
<!-- Summarize the bug encountered concisely -->
### Steps to reproduce
<!-- How one can reproduce the issue - this is very important -->
### Example case
<!--
If possible, please create a SMALL example and attach it to your report
If you are using an older version of OpenFOAM this will also determine
whether the bug has been fixed in a more recent version
-->
### What is the current *bug* behaviour?
<!-- What actually happens -->
### What is the expected *correct* behavior?
<!-- What you should see instead -->
### Relevant logs and/or images
<!--
Paste any relevant logs - please use code blocks (```) to format console
output, logs, and code as it's very hard to read otherwise.
-->
### Environment information
<!--
Providing details of your set-up can help us identify any issues, e.g.
OpenFOAM version : v1806|v1812|v1906 etc
Operating system : ubuntu|openSUSE|centos etc
Hardware info : any info that may help?
Compiler : gcc|intel|clang etc
-->
- OpenFOAM version :
- Operating system :
- Hardware info :
- Compiler :
### Possible fixes
<!--
If you can, link to the line of code that might be responsible for the
problem
The "/label ~bug" text is a gitlab flag that will add the "bug" label to this
issue
-->
/label ~bug

View File

@ -1,31 +0,0 @@
### Functionality to add/problem to solve
(Brief scope)
### Target audience
(Who will benefit from the changes?)
(What type of cases?)
### Proposal
(How are we going to solve the problem?)
### What does success look like, and how can we measure that?
(What are the success factors and acceptance criteria? e.g. test cases, error margins)
### Links / references
(Links to literature, supporting information)
### Funding
(Does the functionality already exist/is sponsorship available?)
/label ~feature

View File

@ -1,20 +0,0 @@
### Summary
(Summarize the changes concisely)
### Resolved bugs (If applicable)
(Links to issues)
### Details of new models (If applicable)
(New options, user inputs etc)
(Images are nice :))
### Risks
(Possible regressions?)
(Changes to user inputs?)

19
.gitmodules vendored
View File

@ -1,19 +0,0 @@
[submodule "cfmesh"]
path = modules/cfmesh
url = https://develop.openfoam.com/Community/integration-cfmesh.git
[submodule "avalanche"]
path = modules/avalanche
url = https://develop.openfoam.com/Community/avalanche.git
[submodule "adios"]
path = modules/adios
url = https://develop.openfoam.com/Community/adiosfoam.git
[submodule "OpenQBMM"]
path = modules/OpenQBMM
url = https://github.com/OpenQBMM/OpenQBMM.git
branch = openfoam.com
[submodule "visualization"]
path = modules/visualization
url = https://develop.openfoam.com/modules/visualization.git
[submodule "external-solver"]
path = modules/external-solver
url = https://develop.openfoam.com/Modules/external-solver.git

View File

@ -1,65 +1,36 @@
#!/bin/sh
# Run from OPENFOAM top-level directory only
cd "${0%/*}" || exit
wmake -check-dir "$WM_PROJECT_DIR" 2>/dev/null || {
cd ${0%/*} && wmakeCheckPwd "$WM_PROJECT_DIR" 2>/dev/null || {
echo "Error (${0##*/}) : not located in \$WM_PROJECT_DIR"
echo " Check your OpenFOAM environment and installation"
exit 1
}
if [ -f "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments ]
then . "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments || \
echo "Argument parse error";
else
[ -d "$WM_PROJECT_DIR" -a -f "$WM_PROJECT_DIR/etc/bashrc" ] || {
echo "Error (${0##*/}) : WM_PROJECT_DIR appears to be incorrect"
echo " Check your OpenFOAM environment and installation"
exit 1
fi
}
# Parse arguments for library compilation
. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
#------------------------------------------------------------------------------
# Preamble. Report tools or at least the mpirun location
if [ -f "$WM_PROJECT_DIR"/wmake/scripts/list_tools ]
then sh "$WM_PROJECT_DIR"/wmake/scripts/list_tools || true
else
echo "mpirun=$(command -v mpirun || true)"
fi
echo
# Report compiler information
compiler="$(wmake -show-path-cxx 2>/dev/null || true)"
if [ -x "$compiler" ]
then
echo "compiler=$compiler"
"$compiler" --version 2>/dev/null | sed -ne '1p'
else
echo "compiler=unknown"
fi
echo
echo "========================================"
date "+%Y-%m-%d %H:%M:%S %z" 2>/dev/null || echo "date is unknown"
echo "Starting compile ${WM_PROJECT_DIR##*/} ${0##*/}"
echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler"
echo "Starting ${WM_PROJECT_DIR##*/} ${0##*}"
echo " $WM_COMPILER $WM_COMPILER_TYPE compiler"
echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
echo "========================================"
echo
# Compile tools for wmake
"${WM_DIR:-wmake}"/src/Allmake
# Compile wmake tools
(cd "${WM_DIR:-wmake}/src" && make)
# Compile ThirdParty libraries and applications
if [ -d "$WM_THIRD_PARTY_DIR" ]
then
if [ -e "$WM_THIRD_PARTY_DIR"/Allwmake.override ]
then
if [ -x "$WM_THIRD_PARTY_DIR"/Allwmake.override ]
then "$WM_THIRD_PARTY_DIR"/Allwmake.override
fi
elif [ -x "$WM_THIRD_PARTY_DIR"/Allwmake ]
then "$WM_THIRD_PARTY_DIR"/Allwmake
else
echo "Skip ThirdParty (no Allwmake* files)"
fi
$WM_THIRD_PARTY_DIR/Allwmake
else
echo "Skip ThirdParty (no directory)"
echo "No ThirdParty directory found - skipping"
fi
echo "========================================"
@ -72,37 +43,12 @@ echo "Compile OpenFOAM applications"
echo
applications/Allwmake $targetType $*
# Additional components/modules
if [ "$FOAM_MODULE_PREFIX" = false ]
then
echo "========================================"
echo "OpenFOAM modules disabled (prefix=false)"
echo
elif [ -d "$WM_PROJECT_DIR/modules" ]
then
(cd "$WM_PROJECT_DIR/modules" 2>/dev/null && wmake -all)
fi
# Count files in given directory. Ignore "Test-*" binaries.
_foamCountDirEntries()
{
(cd "$1" 2>/dev/null && find . -mindepth 1 -maxdepth 1 -type f 2>/dev/null) |\
sed -e '\@/Test-@d' | wc -l
}
# Some summary information
echo
date "+%Y-%m-%d %H:%M:%S %z" 2>/dev/null || echo "date is unknown"
echo "========================================"
echo " ${WM_PROJECT_DIR##*/}"
echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler"
echo " $WM_COMPILER $WM_COMPILER_TYPE compiler"
echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
echo
echo " api = $(etc/openfoam -show-api 2>/dev/null)"
echo " patch = $(etc/openfoam -show-patch 2>/dev/null)"
echo " bin = $(_foamCountDirEntries "$FOAM_APPBIN") entries"
echo " lib = $(_foamCountDirEntries "$FOAM_LIBBIN") entries"
echo
echo "========================================"
#------------------------------------------------------------------------------

79
BuildIssues.txt Normal file
View File

@ -0,0 +1,79 @@
OpenFOAM-1706
==================
Known Build Issues
==================
--------------
Intel Compiler
--------------
Since OpenFOAM uses C++11, a fairly recent version is required.
The Intel compiler - icc (ICC) 17.0.1 20161005 is ok, but the
initial release - icc (ICC) 17.0.0 20160721 - has a bug that
will result in these types of error messages.
MatrixSpaceI.H(492): error: no instance of overloaded function
"Foam::MatrixSpace<Form, Cmpt, Mrows, Ncols>::Block<SubTensor,
BRowStart, BColStart>::operator=" matches the specified type
---
VTK
---
If using the runTimePostProcessing to create on-the-fly images, you
can simply just compile ParaView and these libraries will be used.
If you elect to use a separate VTK compilation (for example for
off-screen rendering), it is advisable to reuse the VTK libraries that
are provided with ParaView by making an appropriate symlink
prior to using makeVTK. This doesn't just reduce disk-space, but works
much better than using the VTK tar file.
Using runTimePostProcessing with the 'plain' VTK libraries does
generally work, but does not exit cleanly:
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev
This error appears to be suppressed if VTK is compiled with a Debug build-type.
-------------------------
Building on older systems
-------------------------
If the system gcc is too old for building OpenFOAM, a third-party gcc or
clang/llvm installation can be used. If building clang/llvm, note that
there are also minimum gcc/g++ requirements there:
Min gcc/g++
=========== ==========
4.4 llvm-3.4.2
4.7 llvm-3.5.2 - llvm-3.7.0
If your system compiler is too old to build the minimum required gcc or
clang/llvm, it is just simply too old.
-------------------------
Building with spack
-------------------------
If you are building with spack, note that the depends_on for paraview
resolves poorly. The +qt dependency (for building the reader module)
may need to be specified as a preference by including the following in
your `~/.spack/packages.yaml` file:
packages:
paraview:
variants: +qt
It appears that spack will otherwise ignore any paraview+qt version
and attempt to install a paraview~qt version instead.
--

View File

@ -1,56 +0,0 @@
# Contributors to OpenFOAM
The following is an list of known contributors to OpenFOAM.
It is likely incomplete...
## Contributors (alphabetical by surname)
- William Bainbridge
- Gabriel Barajas
- Kutalmis Bercin
- Ivor Clifford
- Greg Collecutt
- Jonathan Cranford
- Sergio Ferraris
- Matej Forman
- Marian Fuchs
- Pawan Ghildiyal
- Chris Greenshields
- Bernhard Gschaider
- Andrew Heather
- David Hill
- Mattijs Janssens
- Andrew Jackson
- Hrvoje Jasak
- Alexander Kabat vel Job
- Thilo Knacke
- Tommaso Lucchini
- Graham Macpherson
- Alexey Matveichev
- Karl Meredith
- Laurence McGlashan
- Timo Niemi
- Haakan Nilsson
- Niklas Nordin
- Mark Olesen
- Victor Olesen
- Evangelos Papoutsis-Kiachagias
- Juho Peltola
- Johan Roenby
- Henrik Rusche
- Bruno Santos
- Henning Scheufler
- Richard Smith
- Prashant Sonakar
- Hilary Spencer
- Gavin Tabor
- Zeljko Tukovic
- Eugene De Villiers
- Yi Wang
- Norbert Weber
- Henry Weller
- Niklas Wikstrom
- Thorsten Zirwes
<!----------------------------------------------------------------------------->

View File

@ -1,6 +1,7 @@
GNU GENERAL PUBLIC LICENSE
OpenFOAM(R) is released by OpenCFD Ltd. via www.openfoam.com
OpenFOAM(R) is Copyright (C) 2011 OpenFOAM Foundation
Contact: OpenFOAM Foundation (OpenFOAM.Foundation@gmail.com)
You may use, distribute and copy the OpenFOAM CFD Toolbox under the terms
of GNU General Public License version 3, which is displayed below, or

View File

@ -5,6 +5,5 @@ build-info
time-stamp
# Do not track any manifest files
*[Mm]anifest.txt
####
Manifest.txt
manifest.txt

View File

@ -1,86 +1,5 @@
## META-INFO
# META-INFO
Meta-information is generally for OpenFOAM internal use only.
Meta-information is for OpenFOAM internal use only.
The format, content and meaning may be changed at anytime without
notice. If any of these are changed, these are some of places that
will need to be updated accordingly:
- bin/foamEtcFile
- bin/tools/foamConfigurePaths
- bin/tools/foamPackRelease
- etc/openfoam
- wmake/scripts/wmake-build-info
### api-info
This file and its contents are to be tracked by git.
- File content (api) generated by `wmake -build-info` from the
`OPENFOAM` define in `wmake/rules/General/general`
- File content (patch) is manually generated content.
### build-info
This file is ***never*** to be tracked by git, but may be present in
shipped source archives.
- File content (branch, build) generated by `wmake -build-info` from
git information and cached from previous wmake (api)
### Content types
#### api
Format: `date +%y%m`
- 4-digit year-month (YYMM) integer corresponding to the major
release or in unusual cases an intermediate release.
Example, `1712` for the Dec-2017 release.
#### patch
Format: `date +%y%m%d`
- 6-digit year-month-day (YYMMDD) integer corresponding to a patch-level
for the given **released** API.
- The first release can have a patch value of `0` or `1` which
indicates that it is unpatched or just released. Alternatively
it can have a patch value corresponding to the release date.
The patch value is only meaningful together with the api value.
However, for *development* branches, the patch level should not be
ascribed too much meaning, but will often correspond to the last
merge with a *maintenance* (*eg*, `master`) branch.
### Flow of information
Changes in the build information must be reflected in information
available in the final binaries. Conversely, it is necessary for later
distributions to have a record of the same information.
| property | source | saved |
|-----------|---------------------------|------------|
| api | wmake/rules | api-info |
| patch | manual (api-info) | build-info |
| branch | git | build-info |
| build | git | build-info |
The command `wmake -build-info -check` is used to determine if
the saved information needs synchronization. The command
`wmake -build-info -update` performs the synchronization.
### Notes
The saved information is split into two separate files. The `api-info`
contains more permanent information, whereas the `build-info` is more
transient in nature.
----
2020-06-23
(Backport from 1812)

View File

@ -1,2 +1,2 @@
api=2012
patch=210210
api=1706
patch=180618

210
README.md
View File

@ -1,210 +1,26 @@
## About OpenFOAM
OpenFOAM is a free, open source CFD software [released and developed by OpenCFD Ltd since 2004](http://www.openfoam.com/history/).
It has a large user base across most areas of engineering and science, from both commercial and academic organisations.
OpenFOAM has an extensive range of features to solve anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, to acoustics, solid mechanics and electromagnetics.
[See documentation](http://www.openfoam.com/documentation)
# About OpenFOAM
OpenFOAM is a free, open source CFD software [released and developed primarily by OpenCFD Ltd](http://www.openfoam.com) since 2004. It has a large user base across most areas of engineering and science, from both commercial and academic organisations. OpenFOAM has an extensive range of features to solve anything from complex fluid flows involving chemical reactions, turbulence and heat transfer, to acoustics, solid mechanics and electromagnetics. [More...](http://www.openfoam.com/documentation)
OpenFOAM is professionally released every six months to include
customer sponsored developments and contributions from the community -
individual and group contributors, integrations
(eg, from FOAM-extend and OpenFOAM Foundation Ltd) as well as
[governance guided activities](https://www.openfoam.com/governance/).
OpenFOAM+ is professionally released every six months to include customer sponsored developments and contributions from the community, including the OpenFOAM Foundation. Releases designated OpenFOAM+ contain several man years of client-sponsored developments of which much has been transferred to, but not released in the OpenFOAM Foundation branch.
## Copyright
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version. See the file COPYING in this directory or
[http://www.gnu.org/licenses/](http://www.gnu.org/licenses), for a
description of the GNU General Public License terms under which you
may redistribute files.
# Copyright
OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See the file COPYING in this directory or [http://www.gnu.org/licenses/](http://www.gnu.org/licenses), for a description of the GNU General Public License terms under which you can copy the files.
## OpenFOAM Trademark
# OpenFOAM Trademark
OpenCFD Ltd grants use of the OpenFOAM trademark by Third Parties on a licence basis. ESI Group and the OpenFOAM Foundation Ltd are currently permitted to use the Name and agreed Domain Name. For information on trademark use, please refer to the [trademark policy guidelines](http://www.openfoam.com/legal/trademark-policy.php).
OpenCFD Ltd grants use of its OpenFOAM trademark by Third Parties on a
licence basis. ESI Group and OpenFOAM Foundation Ltd are currently
permitted to use the Name and agreed Domain Name. For information on
trademark use, please refer to the [trademark policy guidelines](http://www.openfoam.com/legal/trademark-policy.php).
Please [contact OpenCFD](http://www.openfoam.com/contact) if you have any questions on the use of the OpenFOAM trademark.
Please [contact OpenCFD](http://www.openfoam.com/contact) if you have
any questions on the use of the OpenFOAM trademark.
Violations of the Trademark are monitored, and will be duly prosecuted.
Violations of the Trademark are continuously monitored, and will be duly prosecuted.
## Using OpenFOAM
If OpenFOAM has already been compiled on your system, simply source
the appropriate `etc/bashrc` or `etc/cshrc` file and get started.
For example, for the OpenFOAM-v1912 version:
```
source /installation/path/OpenFOAM-v1912/etc/bashrc
```
## Compiling OpenFOAM
If you are compiling OpenFOAM from source, please see the relevant
guides:
| Location | Readme | Requirements | Build |
|-------------|-----------|--------------|-------|
| [OpenFOAM][repo openfoam] | [readme][link openfoam-readme] | [system requirements][link openfoam-require] | [build][link openfoam-build] |
| [ThirdParty][repo third] | [readme][link third-readme] | [system requirements][link third-require] | [build][link third-build] |
## How do I know which version I am currently using?
The value of the `$WM_PROJECT_DIR` or even `$WM_PROJECT_VERSION` are
not guaranteed to have any correspondence to the OpenFOAM release
(API) value. If OpenFOAM has already been compiled, the build-time
information is embedded into each application. For example, as
displayed from `blockMesh -help`:
```
Using: OpenFOAM-v1812.local (1812) - visit www.openfoam.com
Build: 65d6551ff7-20190530 (patch=190531)
Arch: LSB;label=32;scalar=64
```
This output contains all of the more interesting information that we need:
| item | value |
|-----------------------|---------------|
| version | v1812.local |
| api | 1812 |
| commit | 65d6551ff7 |
| author date | 20190530 |
| patch-level | (20)190531 |
| label/scalar size | 32/64 bits |
The Arch information may also include the `solveScalar` size
if different than the `scalar` size.
As can be seen in this example, the git build information is
supplemented by the date when the last change was authored, which can
be helpful when the repository contains local changes. If you simply
wish to know the current API and patch levels directly, the
`wmake -build-info` provides the relevant information even
when OpenFOAM has not yet been compiled:
```
$ wmake -build-info
make
api = 1812
patch = 190531
branch = master
build = 65d6551ff7-20190530
```
Similar information is available with `foamEtcFile`, using the
`-show-api` or `-show-patch` options. For example,
```
$ foamEtcFile -show-api
1812
$ foamEtcFile -show-patch
190531
```
This output will generally be the easiest to parse for scripts.
The `$FOAM_API` convenience environment variable may not reflect the
patching changes made within the currently active environment and
should be used with caution.
## ThirdParty directory
OpenFOAM normally ships with a directory of 3rd-party software and
build scripts for some 3rd-party software that is either necessary or
at least highly useful for OpenFOAM, but which are not necessarily
readily available on every operating system or cluster installation.
These 3rd-party sources are normally located in a directory parallel
to the OpenFOAM directory. For example,
```
/path/parent
|-- OpenFOAM-v1912
\-- ThirdParty-v1912
```
There are, however, many cases where this simple convention is inadequate:
* When no additional 3rd party software is actually required (ie, the
operating system or cluster installation provides it)
* When we have changed the OpenFOAM directory name to some arbitrary
directory name, e.g. openfoam-sandbox1912, etc..
* When we would like any additional 3rd party software to be located
inside of the OpenFOAM directory to ensure that the installation is
encapsulated within a single directory structure. This can be
necessary for cluster installations, or may simply be a convenient
means of performing a software rollout for individual workstations.
* When we have many different OpenFOAM directories for testing or
developing various different features but wish to use or reuse the
same 3rd party software for them all.
The solution for these problems is a newer, more intelligent discovery
when locating the ThirdParty directory with the following precedence:
1. PROJECT/ThirdParty
* for single-directory installations
2. PREFIX/ThirdParty-VERSION
* this corresponds to the traditional approach
3. PREFIX/ThirdParty-vAPI
* allows for an updated value of VERSION, *eg*, `v1912-myCustom`,
without requiring a renamed ThirdParty. The API value would still
be `1912` and the original `ThirdParty-v1912/` would be found.
4. PREFIX/ThirdParty-API
* this is the same as the previous example, but using an unadorned
API value. This also makes sense if the chosen version name also
uses the unadorned API value in its naming, *eg*,
`1912-patch190131`, `1912.19W03`
5. PREFIX/ThirdParty-common
* permits maximum reuse for various versions, for experienced user
who are aware of potential version incompatibilities
If none of these directories are found to be suitable, it reverts to
using PROJECT/ThirdParty as a dummy location (even if the directory
does not exist). This is a safe fallback value since it is within the
OpenFOAM directory structure and can be trusted to have no negative
side-effects. In the above, the following notation has been used:
| name | value | meaning |
|---------------|---------------|---------------|
| PROJECT | `$WM_PROJECT_DIR` | The OpenFOAM directory |
| PREFIX | `dirname $WM_PROJECT_DIR` | The OpenFOAM parent directory |
| API | `foamEtcFiles -show-api` | The api or release version |
| VERSION | `$WM_PROJECT_VERSION` | The version we have chosen |
To reduce the potential of false positive matches (perhaps some other
software also uses ThirdParty-xxx for its naming), the directory test
is accompanied by a OpenFOAM-specific sanity test. The OpenFOAM
ThirdParty directory will contain either an `Allwmake` file or a
`platforms/` directory.
<!-- OpenFOAM -->
[repo openfoam]: https://develop.openfoam.com/Development/openfoam/
[repo third]: https://develop.openfoam.com/Development/ThirdParty-common/
[link openfoam-readme]: https://develop.openfoam.com/Development/openfoam/blob/develop/README.md
[link openfoam-issues]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/BuildIssues.md
[link openfoam-config]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Config.md
[link openfoam-build]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Build.md
[link openfoam-require]: https://develop.openfoam.com/Development/openfoam/blob/develop/doc/Requirements.md
[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-common/blob/develop/README.md
[link third-build]: https://develop.openfoam.com/Development/ThirdParty-common/blob/develop/BUILD.md
[link third-require]: https://develop.openfoam.com/Development/ThirdParty-common/blob/develop/Requirements.md
## Useful Links
- Download [source](https://dl.openfoam.com/source/) and [download and installation instructions](http://www.openfoam.com/download/)
# Useful Links
- [Download and installation instructions](http://www.openfoam.com/download/)
- [Documentation](http://www.openfoam.com/documentation)
- [Reporting bugs/issues/feature requests](http://www.openfoam.com/code/bug-reporting.php)
- [Issue tracker](https://develop.openfoam.com/Development/openfoam/-/issues)
- [Code wiki](https://develop.openfoam.com/Development/openfoam/-/wikis/) and [general wiki](http://wiki.openfoam.com/)
- [Community](http://www.openfoam.com/community/), [Governance](http://www.openfoam.com/governance/)
- [OpenFOAM Community](http://www.openfoam.com/community/)
- [Contacting OpenCFD](http://www.openfoam.com/contact/)
Copyright 2016-2020 OpenCFD Ltd
Copyright 2016-2017 OpenCFD Ltd

View File

@ -1,26 +1,22 @@
#!/bin/sh
# Run from OPENFOAM applications/ directory only
cd "${0%/*}" || exit
wmake -check-dir "$WM_PROJECT_DIR/applications" 2>/dev/null || {
cd ${0%/*} && wmakeCheckPwd "$WM_PROJECT_DIR/applications" 2>/dev/null || {
echo "Error (${0##*/}) : not located in \$WM_PROJECT_DIR/applications"
echo " Check your OpenFOAM environment and installation"
exit 1
}
if [ -f "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments ]
then . "$WM_PROJECT_DIR"/wmake/scripts/AllwmakeParseArguments || \
echo "Argument parse error";
else
[ -d "$WM_PROJECT_DIR" -a -f "$WM_PROJECT_DIR/etc/bashrc" ] || {
echo "Error (${0##*/}) : WM_PROJECT_DIR appears to be incorrect"
echo " Check your OpenFOAM environment and installation"
exit 1
fi
}
# Parse arguments for library compilation
. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
#------------------------------------------------------------------------------
wmake -all $targetType solvers
wmake -all $targetType utilities
# Optional
## wmake -all $targetType tools
#------------------------------------------------------------------------------

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.

View File

@ -1,12 +1,10 @@
#!/bin/sh
cd "${0%/*}" || exit # Run from this directory
. ${WM_PROJECT_DIR:?}/wmake/scripts/AllwmakeParseArguments
. ${WM_PROJECT_DIR:?}/wmake/scripts/have_fftw
#------------------------------------------------------------------------------
cd ${0%/*} || exit 1 # run from this directory
if have_fftw
if [ -f "$FFTW_ARCH_PATH/include/fftw3.h" ] || \
[ "${FFTW_ARCH_PATH##*-}" = system -a -f "/usr/include/fftw3.h" ]
then
wmake $targetType
wmake
else
echo "==> skip dnsFoam solver (no FFTW)"
fi

View File

@ -1,9 +1,9 @@
EXE_INC = \
-I$(LIB_SRC)/randomProcesses/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/randomProcesses/lnInclude
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lrandomProcesses \
-lfiniteVolume \
-lmeshTools \
-lrandomProcesses
-lmeshTools

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -46,14 +44,9 @@ Description
int main(int argc, char *argv[])
{
argList::addNote
(
"Direct numerical simulation for boxes of isotropic turbulence."
);
#include "postProcess.H"
#include "setRootCaseLists.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMeshNoClear.H"
#include "createControl.H"
@ -62,13 +55,6 @@ int main(int argc, char *argv[])
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
label ntot = 1;
forAll(K.nn(), idim)
{
ntot *= K.nn()[idim];
}
const scalar recRootN = 1.0/Foam::sqrt(scalar(ntot));
Info<< nl << "Starting time loop" << endl;
while (runTime.loop())
@ -80,7 +66,7 @@ int main(int argc, char *argv[])
fft::reverseTransform
(
K/(mag(K) + 1.0e-6) ^ forceGen.newField(), K.nn()
)*recRootN
)
);
#include "globalProperties.H"
@ -140,7 +126,9 @@ int main(int argc, char *argv[])
);
}
runTime.printExecutionTime(Info);
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
}
Info<< "End\n" << endl;

View File

@ -1,3 +0,0 @@
acousticFoam.C
EXE = $(FOAM_APPBIN)/acousticFoam

View File

@ -1,14 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/fvOption/lnInclude \
-I$(LIB_SRC)/regionFaModels/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lfvOptions \
-lmeshTools \
-lsampling \
-lregionFaModels

View File

@ -1,99 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2019-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
acousticFoam
Group
grpAcousticSolvers
Description
Acoustic solver solving the acoustic pressure wave equation.
\f[
\ddt2{pa} - c^2 \laplacian{pa} = 0
\f]
where
\vartable
c | Sound speed
pa | Acoustic pressure
\endvartable
SourceFiles
acousticFoam.C
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "fvOptions.H"
#include "pimpleControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Acoustic solver solving the acoustic pressure wave equation."
);
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "createRegionControls.H"
#include "readTransportProperties.H"
#include "createFields.H"
Info<< "\nStarting time loop\n" << endl;
while (runTime.run())
{
++runTime;
Info<< "Time = " << runTime.timeName() << nl << endl;
while (pimple.correct())
{
#include "paEqn.H"
}
runTime.write();
runTime.printExecutionTime(Info);
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,15 +0,0 @@
Info << "\nReading pa" << endl;
volScalarField pa
(
IOobject
(
"pa",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);

View File

@ -1,8 +0,0 @@
fvSolution solutionDict(runTime);
const dictionary& pimpleDict = solutionDict.subDict("PIMPLE");
bool solvePrimaryRegion
(
pimpleDict.getOrDefault("solvePrimaryRegion", true)
);

View File

@ -1,15 +0,0 @@
fvScalarMatrix paEqn
(
fvm::d2dt2(pa) - sqr(c0)*fvc::laplacian(pa)
);
if (solvePrimaryRegion)
{
paEqn.relax();
paEqn.solve();
}
else
{
pa.correctBoundaryConditions();
}

View File

@ -1,23 +0,0 @@
Info<< "\nReading transportProperties" << endl;
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
dimensionedScalar c0("c0", dimVelocity, transportProperties);
dimensionedScalar rho("rho", dimDensity, transportProperties);
scalar MaxCo =
max(mesh.surfaceInterpolation::deltaCoeffs()*c0).value()
*runTime.deltaT().value();
Info<< "Max acoustic Courant Number = " << MaxCo << endl;

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.

View File

@ -14,36 +14,26 @@ volScalarField T
);
Info<< "Reading diffusivity DT\n" << endl;
Info<< "Reading transportProperties\n" << endl;
volScalarField DT
IOdictionary transportProperties
(
IOobject
(
"DT",
runTime.timeName(),
"transportProperties",
runTime.constant(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
dimensionedScalar(dimViscosity, Zero)
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
if (!DT.headerOk())
{
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
DT = dimensionedScalar("DT", dimViscosity, transportProperties);
}
#include "createFvOptions.H"
Info<< "Reading diffusivity DT\n" << endl;
dimensionedScalar DT
(
"DT",
dimArea/dimTime,
transportProperties
);

View File

@ -2,11 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -62,21 +59,15 @@ Description
int main(int argc, char *argv[])
{
argList::addNote
(
"Laplace equation solver for a scalar quantity."
);
#include "setRootCase.H"
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
simpleControl simple(mesh);
#include "createFields.H"
#include "createFvOptions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -102,7 +93,9 @@ int main(int argc, char *argv[])
#include "write.H"
runTime.printExecutionTime(Info);
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
}
Info<< "End\n" << endl;

View File

@ -1,3 +1,3 @@
overLaplacianDyMFoam.C
laplacianDyMFoam.C
EXE = $(FOAM_APPBIN)/overLaplacianDyMFoam

View File

@ -1,11 +1,8 @@
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/overset/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lmeshTools \
-ldynamicFvMesh \
-loverset

View File

@ -13,6 +13,23 @@
mesh
);
// Add overset specific interpolations
{
dictionary oversetDict;
oversetDict.add("T", true);
const_cast<dictionary&>
(
mesh.schemesDict()
).add
(
"oversetInterpolationRequired",
oversetDict,
true
);
}
Info<< "Reading transportProperties\n" << endl;
IOdictionary transportProperties
@ -30,4 +47,7 @@
Info<< "Reading diffusivity DT\n" << endl;
dimensionedScalar DT("DT", dimViscosity, transportProperties);
dimensionedScalar DT
(
transportProperties.lookup("DT")
);

View File

@ -0,0 +1,110 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
laplacianFoam
Group
grpBasicSolvers
Description
Laplace equation solver for a scalar quantity.
\heading Solver details
The solver is applicable to, e.g. for thermal diffusion in a solid. The
equation is given by:
\f[
\ddt{T} = \div \left( D_T \grad T \right)
\f]
Where:
\vartable
T | Scalar field which is solved for, e.g. temperature
D_T | Diffusion coefficient
\endvartable
\heading Required fields
\plaintable
T | Scalar field which is solved for, e.g. temperature
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "fvOptions.H"
#include "simpleControl.H"
#include "dynamicFvMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createNamedDynamicFvMesh.H"
simpleControl simple(mesh);
#include "createFields.H"
#include "createFvOptions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nCalculating temperature distribution\n" << endl;
while (simple.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;
mesh.update();
while (simple.correctNonOrthogonal())
{
fvScalarMatrix TEqn
(
fvm::ddt(T) - fvm::laplacian(DT, T)
==
fvOptions(T)
);
fvOptions.constrain(TEqn);
TEqn.solve();
fvOptions.correct(T);
}
#include "write.H"
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,115 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2016-2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
overLaplacianDyMFoam
Group
grpBasicSolvers
Description
Laplace equation solver for a scalar quantity.
\heading Solver details
The solver is applicable to, e.g. for thermal diffusion in a solid. The
equation is given by:
\f[
\ddt{T} = \div \left( D_T \grad T \right)
\f]
Where:
\vartable
T | Scalar field which is solved for, e.g. temperature
D_T | Diffusion coefficient
\endvartable
\heading Required fields
\plaintable
T | Scalar field which is solved for, e.g. temperature
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "fvOptions.H"
#include "simpleControl.H"
#include "dynamicFvMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Overset Laplace equation solver for a scalar quantity."
);
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createNamedDynamicFvMesh.H"
simpleControl simple(mesh);
#include "createFields.H"
#include "createFvOptions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nCalculating temperature distribution\n" << endl;
while (simple.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;
mesh.update();
while (simple.correctNonOrthogonal())
{
fvScalarMatrix TEqn
(
fvm::ddt(T) - fvm::laplacian(DT, T)
==
fvOptions(T)
);
fvOptions.constrain(TEqn);
TEqn.solve();
fvOptions.correct(T);
}
#include "write.H"
runTime.printExecutionTime(Info);
}
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -1,4 +1,4 @@
if (runTime.writeTime())
if (runTime.outputTime())
{
volVectorField gradT(fvc::grad(T));

View File

@ -41,18 +41,6 @@
gradT.component(vector::Z)
);
volVectorField DTgradT
(
IOobject
(
"flux",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
DT*gradT
);
runTime.write();
}

View File

@ -5,5 +5,5 @@ const dictionary& potentialFlow
const int nNonOrthCorr
(
potentialFlow.getOrDefault<int>("nNonOrthogonalCorrectors", 0)
potentialFlow.lookupOrDefault<int>("nNonOrthogonalCorrectors", 0)
);

View File

@ -13,7 +13,7 @@ volVectorField U
);
// Initialise the velocity internal field to zero
U = dimensionedVector(U.dimensions(), Zero);
U = dimensionedVector("0", U.dimensions(), Zero);
surfaceScalarField phi
(
@ -28,7 +28,7 @@ surfaceScalarField phi
fvc::flux(U)
);
if (args.found("initialiseUBCs"))
if (args.optionFound("initialiseUBCs"))
{
U.correctBoundaryConditions();
phi = fvc::flux(U);
@ -38,9 +38,10 @@ if (args.found("initialiseUBCs"))
// Construct a pressure field
// If it is available read it otherwise construct from the velocity BCs
// converting fixed-value BCs to zero-gradient and vice versa.
word pName("p");
// Allow override from command-line -pName option
const word pName = args.getOrDefault<word>("pName", "p");
// Update name of the pressure field from the command-line option
args.optionReadIfPresent("pName", pName);
// Infer the pressure BCs from the velocity
wordList pBCTypes
@ -57,6 +58,9 @@ forAll(U.boundaryField(), patchi)
}
}
// Note that registerObject is false for the pressure field. The pressure
// field in this solver doesn't have a physical value during the solution.
// It shouldn't be looked up and used by sub models or boundary conditions.
Info<< "Constructing pressure field " << pName << nl << endl;
volScalarField p
(
@ -66,10 +70,11 @@ volScalarField p
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
IOobject::NO_WRITE,
false
),
mesh,
dimensionedScalar(sqr(dimVelocity), Zero),
dimensionedScalar(pName, sqr(dimVelocity), 0),
pBCTypes
);
@ -100,7 +105,7 @@ volScalarField Phi
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(dimLength*dimVelocity, Zero),
dimensionedScalar("Phi", dimLength*dimVelocity, 0),
PhiBCTypes
);

View File

@ -1,3 +0,0 @@
overPotentialFoam.C
EXE = $(FOAM_APPBIN)/overPotentialFoam

View File

@ -1,13 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/overset/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lmeshTools \
-ldynamicFvMesh \
-lsampling \
-loverset

View File

@ -1,9 +0,0 @@
const dictionary& potentialFlow
(
mesh.solutionDict().subDict("potentialFlow")
);
const int nNonOrthCorr
(
potentialFlow.getOrDefault<int>("nNonOrthogonalCorrectors", 0)
);

View File

@ -1,138 +0,0 @@
Info<< "Reading velocity field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
// Initialise the velocity internal field to zero
U = dimensionedVector(U.dimensions(), Zero);
surfaceScalarField phi
(
IOobject
(
"phi",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
fvc::flux(U)
);
if (args.found("initialiseUBCs"))
{
U.correctBoundaryConditions();
phi = fvc::flux(U);
}
// Construct a pressure field
// If it is available read it otherwise construct from the velocity BCs
// converting fixed-value BCs to zero-gradient and vice versa.
// Allow override from command-line -pName option
const word pName = args.getOrDefault<word>("pName", "p");
// Infer the pressure BCs from the velocity
wordList pBCTypes
(
U.boundaryField().size(),
fixedValueFvPatchScalarField::typeName
);
forAll(U.boundaryField(), patchi)
{
if (U.boundaryField()[patchi].fixesValue())
{
pBCTypes[patchi] = zeroGradientFvPatchScalarField::typeName;
}
}
// Note that registerObject is false for the pressure field. The pressure
// field in this solver doesn't have a physical value during the solution.
// It shouldn't be looked up and used by sub models or boundary conditions.
Info<< "Constructing pressure field " << pName << nl << endl;
volScalarField p
(
IOobject
(
pName,
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
),
mesh,
dimensionedScalar(sqr(dimVelocity), Zero),
pBCTypes
);
// Infer the velocity potential BCs from the pressure
wordList PhiBCTypes
(
p.boundaryField().size(),
zeroGradientFvPatchScalarField::typeName
);
forAll(p.boundaryField(), patchi)
{
if (p.boundaryField()[patchi].fixesValue())
{
PhiBCTypes[patchi] = fixedValueFvPatchScalarField::typeName;
}
}
Info<< "Constructing velocity potential field Phi\n" << endl;
volScalarField Phi
(
IOobject
(
"Phi",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(dimLength*dimVelocity, Zero),
PhiBCTypes
);
label PhiRefCell = 0;
scalar PhiRefValue = 0;
setRefCell
(
Phi,
potentialFlow.dict(),
PhiRefCell,
PhiRefValue
);
mesh.setFluxRequired(Phi.name());
#include "createMRF.H"
// Add solver-specific interpolations
{
wordHashSet& nonInt =
const_cast<wordHashSet&>(Stencil::New(mesh).nonInterpolatedFields());
nonInt.insert("cellMask");
nonInt.insert("interpolatedCells");
}
// Mask field for zeroing out contributions on hole cells
#include "createCellMask.H"
// Create bool field with interpolated cells
#include "createInterpolatedCells.H"

View File

@ -1,265 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017 OpenCFD Ltd
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
overPotentialFoam
Group
grpBasicSolvers
Description
Potential flow solver which solves for the velocity potential, to
calculate the flux-field, from which the velocity field is obtained by
reconstructing the flux.
\heading Solver details
The potential flow solution is typically employed to generate initial fields
for full Navier-Stokes codes. The flow is evolved using the equation:
\f[
\laplacian \Phi = \div(\vec{U})
\f]
Where:
\vartable
\Phi | Velocity potential [m2/s]
\vec{U} | Velocity [m/s]
\endvartable
The corresponding pressure field could be calculated from the divergence
of the Euler equation:
\f[
\laplacian p + \div(\div(\vec{U}\otimes\vec{U})) = 0
\f]
but this generates excessive pressure variation in regions of large
velocity gradient normal to the flow direction. A better option is to
calculate the pressure field corresponding to velocity variation along the
stream-lines:
\f[
\laplacian p + \div(\vec{F}\cdot\div(\vec{U}\otimes\vec{U})) = 0
\f]
where the flow direction tensor \f$\vec{F}\f$ is obtained from
\f[
\vec{F} = \hat{\vec{U}}\otimes\hat{\vec{U}}
\f]
\heading Required fields
\plaintable
U | Velocity [m/s]
\endplaintable
\heading Optional fields
\plaintable
p | Kinematic pressure [m2/s2]
Phi | Velocity potential [m2/s]
| Generated from p (if present) or U if not present
\endplaintable
\heading Options
\plaintable
-writep | write the Euler pressure
-writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "pisoControl.H"
#include "dynamicFvMesh.H"
#include "cellCellStencilObject.H"
#include "localMin.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Overset potential flow solver which solves for the velocity potential"
);
argList::addOption
(
"pName",
"pName",
"Name of the pressure field"
);
argList::addBoolOption
(
"initialiseUBCs",
"Initialise U boundary conditions"
);
argList::addBoolOption
(
"writePhi",
"Write the final velocity potential field"
);
argList::addBoolOption
(
"writep",
"Calculate and write the Euler pressure field"
);
argList::addBoolOption
(
"withFunctionObjects",
"Execute functionObjects"
);
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createNamedDynamicFvMesh.H"
pisoControl potentialFlow(mesh, "potentialFlow");
#include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< nl << "Calculating potential flow" << endl;
mesh.update();
surfaceScalarField faceMask(localMin<scalar>(mesh).interpolate(cellMask));
// Since solver contains no time loop it would never execute
// function objects so do it ourselves
runTime.functionObjects().start();
MRF.makeRelative(phi);
adjustPhi(phi, U, p);
// Non-orthogonal velocity potential corrector loop
while (potentialFlow.correct())
{
phi = fvc::flux(U);
while (potentialFlow.correctNonOrthogonal())
{
fvScalarMatrix PhiEqn
(
fvm::laplacian(faceMask, Phi)
==
fvc::div(phi)
);
PhiEqn.setReference(PhiRefCell, PhiRefValue);
PhiEqn.solve();
if (potentialFlow.finalNonOrthogonalIter())
{
phi -= PhiEqn.flux();
}
}
MRF.makeAbsolute(phi);
Info<< "Continuity error = "
<< mag(fvc::div(phi))().weightedAverage(mesh.V()).value()
<< endl;
U = fvc::reconstruct(phi);
U.correctBoundaryConditions();
Info<< "Interpolated velocity error = "
<< (sqrt(sum(sqr(fvc::flux(U) - phi)))/sum(mesh.magSf())).value()
<< endl;
}
// Write U and phi
U.write();
phi.write();
// Optionally write Phi
if (args.found("writePhi"))
{
Phi.write();
}
// Calculate the pressure field from the Euler equation
if (args.found("writep"))
{
Info<< nl << "Calculating approximate pressure field" << endl;
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell
(
p,
potentialFlow.dict(),
pRefCell,
pRefValue
);
// Calculate the flow-direction filter tensor
volScalarField magSqrU(magSqr(U));
volSymmTensorField F(sqr(U)/(magSqrU + SMALL*average(magSqrU)));
// Calculate the divergence of the flow-direction filtered div(U*U)
// Filtering with the flow-direction generates a more reasonable
// pressure distribution in regions of high velocity gradient in the
// direction of the flow
volScalarField divDivUU
(
fvc::div
(
F & fvc::div(phi, U),
"div(div(phi,U))"
)
);
// Solve a Poisson equation for the approximate pressure
while (potentialFlow.correctNonOrthogonal())
{
fvScalarMatrix pEqn
(
fvm::laplacian(p) + divDivUU
);
pEqn.setReference(pRefCell, pRefValue);
pEqn.solve();
}
p.write();
}
runTime.functionObjects().end();
runTime.printExecutionTime(Info);
Info<< "End\n" << endl;
return 0;
}
// ************************************************************************* //

View File

@ -2,11 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -84,7 +81,6 @@ Description
\heading Options
\plaintable
-writep | write the Euler pressure
-writephi | Write the final volumetric flux
-writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable
@ -98,11 +94,6 @@ Description
int main(int argc, char *argv[])
{
argList::addNote
(
"Potential flow solver which solves for the velocity potential"
);
argList::addOption
(
"pName",
@ -116,12 +107,6 @@ int main(int argc, char *argv[])
"Initialise U boundary conditions"
);
argList::addBoolOption
(
"writephi",
"Write the final volumetric flux field"
);
argList::addBoolOption
(
"writePhi",
@ -137,12 +122,10 @@ int main(int argc, char *argv[])
argList::addBoolOption
(
"withFunctionObjects",
"Execute functionObjects"
"execute functionObjects"
);
#include "addRegionOption.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
@ -193,23 +176,18 @@ int main(int argc, char *argv[])
<< (sqrt(sum(sqr(fvc::flux(U) - phi)))/sum(mesh.magSf())).value()
<< endl;
// Write U
// Write U and phi
U.write();
phi.write();
// Optionally write the volumetric flux, phi
if (args.found("writephi"))
{
phi.write();
}
// Optionally write velocity potential, Phi
if (args.found("writePhi"))
// Optionally write Phi
if (args.optionFound("writePhi"))
{
Phi.write();
}
// Calculate the pressure field from the Euler equation
if (args.found("writep"))
if (args.optionFound("writep"))
{
Info<< nl << "Calculating approximate pressure field" << endl;
@ -257,7 +235,9 @@ int main(int argc, char *argv[])
runTime.functionObjects().end();
runTime.printExecutionTime(Info);
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
Info<< "End\n" << endl;

View File

@ -47,8 +47,11 @@ IOdictionary transportProperties
Info<< "Reading diffusivity DT\n" << endl;
dimensionedScalar DT("DT", dimViscosity, transportProperties);
dimensionedScalar DT
(
"DT",
dimArea/dimTime,
transportProperties
);
#include "createPhi.H"
#include "createFvOptions.H"

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -63,19 +61,14 @@ Description
int main(int argc, char *argv[])
{
argList::addNote
(
"Passive scalar transport equation solver."
);
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
simpleControl simple(mesh);
#include "createFields.H"
#include "createFvOptions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -15,7 +15,7 @@
)
: -betav*dpdt
)
- fvm::laplacian(DbThermal, hea)
- fvm::laplacian(Db, hea)
+ betav*fvOptions(rho, hea)
);

View File

@ -16,7 +16,13 @@ if (ign.ignited())
)*rho/thermo.rhou()
: -betav*dpdt*rho/thermo.rhou()
)
- fvm::laplacian(DbThermal, heau)
- fvm::laplacian(Db, heau)
// These terms cannot be used in partially-premixed combustion due to
// the resultant inconsistency between ft and heau transport.
// A possible solution would be to solve for ftu as well as ft.
//- fvm::div(muEff*fvc::grad(b)/(b + 0.001), heau)
//+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), heau)
==
betav*fvOptions(rho, heau)
);

View File

@ -1,35 +1,33 @@
XiModels/XiModel/XiModel.C
XiModels/XiModel/XiModelNew.C
XiModels/transport/transportTwoEqs/transportTwoEqs.C
XiModels/fixed/fixed.C
XiModels/algebraic/algebraic.C
XiModels/transport/transport.C
XiModels/XiEqModels/XiEqModel/XiEqModel.C
XiModels/XiEqModels/XiEqModel/XiEqModelNew.C
XiModels/XiEqModels/Gulder/Gulder.C
XiModels/XiEqModels/instability2XiEq/instability2XiEq.C
XiModels/XiEqModels/BLMgMaXiEq/BLMgMaXiEq.C
XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C
XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.C
XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C
XiModels/XiGModels/XiGModel/XiGModel.C
XiModels/XiGModels/XiGModel/XiGModelNew.C
XiModels/XiGModels/KTS/KTS.C
XiModels/XiGModels/instabilityG/instabilityG.C
XiModels/XiGModels/instability2G/instability2G.C
PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C
PDRModels/dragModels/PDRDragModel/PDRDragModel.C
PDRModels/dragModels/PDRDragModel/PDRDragModelNew.C
PDRModels/dragModels/basic/basic.C
PDRModels/dragModels/basicSch/basicSch.C
PDRModels/XiEqModels/normBasicXiSubXiEq/normBasicXiSubXiEq.C
PDRModels/XiGModels/normBasicXiSubG/normBasicXiSubG.C
PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C
PDRModels/XiGModels/basicXiSubG/basicXiSubG.C
laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C
/*PDRFoamAutoRefine.C*/
PDRFoam.C
EXE = $(FOAM_APPBIN)/PDRFoam

View File

@ -1,4 +1,4 @@
EXE_INC = -DFULLDEBUG -O0 -g \
EXE_INC = \
-IXiModels/XiModel \
-IXiModels/XiEqModels/XiEqModel \
-IXiModels/XiGModels/XiGModel \
@ -15,12 +15,12 @@ EXE_INC = -DFULLDEBUG -O0 -g \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/triSurface/lnInclude \
-I$(LIB_SRC)/surfMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lmeshTools \
-lengine \
-lmeshTools \
-lturbulenceModels \
-lcompressibleTurbulenceModels \
-lcompressibleTransportModels \

View File

@ -2,11 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -36,7 +33,7 @@ Description
Combusting RANS code using the b-Xi two-equation model.
Xi may be obtained by either the solution of the Xi transport
equation or from an algebraic expression. Both approaches are
equation or from an algebraic exression. Both approaches are
based on Gulder's flame speed correlation which has been shown
to be appropriate by comparison with the results from the
spectral model.
@ -67,7 +64,7 @@ Description
CR | Drag tensor (1/m)
CT | Turbulence generation parameter (1/m)
Nv | Number of obstacles in cell per unit volume (m^-2)
nsv | Tensor whose diagonal indicates the number to subtract from
nsv | Tensor whose diagonal indicates the number to substract from
| Nv to get the number of obstacles crossing the flow in each
| direction.
\endplaintable
@ -81,42 +78,32 @@ Description
#include "XiModel.H"
#include "PDRDragModel.H"
#include "ignition.H"
#include "Switch.H"
#include "bound.H"
#include "dynamicFvMesh.H"
#include "dynamicRefineFvMesh.H"
#include "pimpleControl.H"
#include "fvOptions.H"
#include "fvcSmooth.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
argList::addNote
(
"Solver for compressible premixed/partially-premixed combustion with"
" turbulence modelling."
);
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "setRootCase.H"
#include "createTime.H"
#include "createDynamicFvMesh.H"
#include "createDyMControls.H"
#include "initContinuityErrs.H"
#include "createMesh.H"
#include "createControl.H"
#include "readCombustionProperties.H"
#include "readGravitationalAcceleration.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
#include "createTimeControls.H"
#include "compressibleCourantNo.H"
#include "setInitialDeltaT.H"
turbulence->validate();
scalar StCoNum = 0.0;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -125,62 +112,33 @@ int main(int argc, char *argv[])
while (runTime.run())
{
#include "readDyMControls.H"
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
++runTime;
runTime++;
Info<< "\n\nTime = " << runTime.timeName() << endl;
#include "rhoEqn.H"
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
if (pimple.firstIter() || moveMeshOuterCorrectors)
{
fvc::makeAbsolute(phi, rho, U);
// Flux estimate for introduced faces.
volVectorField rhoU("rhoU", rho*U);
bool meshChanged = mesh.controlledUpdate();
if (runTime.write() && meshChanged)
{
betav.write();
betai.write();
Blong.write();
Bv.write();
Lobs.write();
CT.write();
drag->writeFields();
flameWrinkling->writeFields();
}
// Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, rho, U);
}
if (pimple.firstIter())
{
#include "rhoEqn.H"
}
#include "UEqn.H"
#include "bEqn.H"
#include "ftEqn.H"
#include "EauEqn.H"
#include "EaEqn.H"
if (!ign.ignited())
{
thermo.heu() == thermo.he();
}
// --- Pressure corrector loop
while (pimple.correct())
{
#include "bEqn.H"
#include "ftEqn.H"
#include "EauEqn.H"
#include "EaEqn.H"
if (!ign.ignited())
{
thermo.heu() == thermo.he();
}
#include "pEqn.H"
}
@ -190,14 +148,14 @@ int main(int argc, char *argv[])
}
}
rho = thermo.rho();
runTime.write();
runTime.printExecutionTime(Info);
Info<< "\nExecutionTime = "
<< runTime.elapsedCpuTime()
<< " s\n" << endl;
}
Info<< "\nEnd\n" << endl;
Info<< "\n end\n";
return 0;
}

View File

@ -0,0 +1,212 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
PDRFoam
Description
Solver for compressible premixed/partially-premixed combustion with
turbulence modelling.
Combusting RANS code using the b-Xi two-equation model.
Xi may be obtained by either the solution of the Xi transport
equation or from an algebraic exression. Both approaches are
based on Gulder's flame speed correlation which has been shown
to be appropriate by comparison with the results from the
spectral model.
Strain effects are incorporated directly into the Xi equation
but not in the algebraic approximation. Further work need to be
done on this issue, particularly regarding the enhanced removal rate
caused by flame compression. Analysis using results of the spectral
model will be required.
For cases involving very lean Propane flames or other flames which are
very strain-sensitive, a transport equation for the laminar flame
speed is present. This equation is derived using heuristic arguments
involving the strain time scale and the strain-rate at extinction.
the transport velocity is the same as that for the Xi equation.
For large flames e.g. explosions additional modelling for the flame
wrinkling due to surface instabilities may be applied.
PDR (porosity/distributed resistance) modelling is included to handle
regions containing blockages which cannot be resolved by the mesh.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "dynamicFvMesh.H"
#include "psiuReactionThermo.H"
#include "turbulentFluidThermoModel.H"
#include "laminarFlameSpeed.H"
#include "XiModel.H"
#include "PDRDragModel.H"
#include "ignition.H"
#include "Switch.H"
#include "bound.H"
#include "dynamicRefineFvMesh.H"
#include "pimpleControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createDynamicFvMesh.H"
pimpleControl pimple(mesh);
#include "readCombustionProperties.H"
#include "readGravitationalAcceleration.H"
#include "createFields.H"
#include "initContinuityErrs.H"
#include "createTimeControls.H"
#include "compressibleCourantNo.H"
#include "setInitialDeltaT.H"
turbulence->validate();
scalar StCoNum = 0.0;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
bool hasChanged = false;
while (runTime.run())
{
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
// Indicators for refinement. Note: before runTime++
// only for postprocessing reasons.
tmp<volScalarField> tmagGradP = mag(fvc::grad(p));
volScalarField normalisedGradP
(
"normalisedGradP",
tmagGradP()/max(tmagGradP())
);
normalisedGradP.writeOpt() = IOobject::AUTO_WRITE;
tmagGradP.clear();
runTime++;
Info<< "\n\nTime = " << runTime.timeName() << endl;
{
// Make the fluxes absolute
fvc::makeAbsolute(phi, rho, U);
// Test : disable refinement for some cells
PackedBoolList& protectedCell =
refCast<dynamicRefineFvMesh>(mesh).protectedCell();
if (protectedCell.empty())
{
protectedCell.setSize(mesh.nCells());
protectedCell = 0;
}
forAll(betav, celli)
{
if (betav[celli] < 0.99)
{
protectedCell[celli] = 1;
}
}
// Flux estimate for introduced faces.
volVectorField rhoU("rhoU", rho*U);
// Do any mesh changes
bool meshChanged = mesh.update();
if (meshChanged)
{
hasChanged = true;
}
if (runTime.write() && hasChanged)
{
betav.write();
Lobs.write();
CT.write();
drag->writeFields();
flameWrinkling->writeFields();
hasChanged = false;
}
// Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, rho, U);
}
#include "rhoEqn.H"
// --- Pressure-velocity PIMPLE corrector loop
while (pimple.loop())
{
#include "UEqn.H"
// --- Pressure corrector loop
while (pimple.correct())
{
#include "bEqn.H"
#include "ftEqn.H"
#include "huEqn.H"
#include "hEqn.H"
if (!ign.ignited())
{
hu == h;
}
#include "pEqn.H"
}
if (pimple.turbCorr())
{
turbulence->correct();
}
}
runTime.write();
Info<< "\nExecutionTime = "
<< runTime.elapsedCpuTime()
<< " s\n" << endl;
}
Info<< "\n end\n";
return 0;
}
// ************************************************************************* //

View File

@ -0,0 +1,153 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "basicXiSubXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(basicSubGrid, 0);
addToRunTimeSelectionTable(XiEqModel, basicSubGrid, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::basicSubGrid::basicSubGrid
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, thermo, turbulence, Su),
B_
(
IOobject
(
"B",
Su.mesh().facesInstance(),
Su.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
),
Su.mesh()
),
XiEqModel_(XiEqModel::New(XiEqModelCoeffs_, thermo, turbulence, Su))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModels::basicSubGrid::~basicSubGrid()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::basicSubGrid::XiEq() const
{
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
const volSymmTensorField& nsv =
mesh.lookupObject<volSymmTensorField>("nsv");
volScalarField magU(mag(U));
volVectorField Uhat
(
U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4))
);
const scalarField Cw = pow(mesh.V(), 2.0/3.0);
volScalarField N
(
IOobject
(
"N",
mesh.time().constant(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("zero", Nv.dimensions(), 0.0)
);
N.primitiveFieldRef() = Nv.primitiveField()*Cw;
volSymmTensorField ns
(
IOobject
(
"ns",
U.mesh().time().timeName(),
U.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U.mesh(),
dimensionedSymmTensor
(
"zero",
nsv.dimensions(),
Zero
)
);
ns.primitiveFieldRef() = nsv.primitiveField()*Cw;
volScalarField n(max(N - (Uhat & ns & Uhat), scalar(1e-4)));
volScalarField b((Uhat & B_ & Uhat)/sqrt(n));
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
volScalarField XiSubEq
(
scalar(1)
+ max(2.2*sqrt(b), min(0.34*magU/up*sqrt(b), scalar(1.6)))
* min(n, scalar(1))
);
return (XiSubEq*XiEqModel_->XiEq());
}
bool Foam::XiEqModels::basicSubGrid::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
return XiEqModel_->read(XiEqModelCoeffs_);
}
// ************************************************************************* //

View File

@ -0,0 +1,145 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::basicSubGrid
Description
Basic sub-grid obstacle flame-wrinking enhancement factor model.
Details supplied by J Puttock 2/7/06.
<b> Sub-grid flame area generation </b>
\f$ n = N - \hat{\dwea{\vec{U}}}.n_{s}.\hat{\dwea{\vec{U}}} \f$
\f$ n_{r} = \sqrt{n} \f$
where:
\f$ \hat{\dwea{\vec{U}}} = \dwea{\vec{U}} / \vert \dwea{\vec{U}}
\vert \f$
\f$ b = \hat{\dwea{\vec{U}}}.B.\hat{\dwea{\vec{U}}} / n_{r} \f$
where:
\f$ B \f$ is the file "B".
\f$ N \f$ is the file "N".
\f$ n_{s} \f$ is the file "ns".
The flame area enhancement factor \f$ \Xi_{sub} \f$ is expected to
approach:
\f[
\Xi_{{sub}_{eq}} =
1 + max(2.2 \sqrt{b}, min(0.34 \frac{\vert \dwea{\vec{U}}
\vert}{{\vec{U}}^{'}}, 1.6)) \times min(\frac{n}{4}, 1)
\f]
SourceFiles
basicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef basicSubGrid_H
#define basicSubGrid_H
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class basicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class basicSubGrid
:
public XiEqModel
{
// Private data
//- tblock
volSymmTensorField B_;
//- Equilibrium Xi model due to turbulence
autoPtr<XiEqModel> XiEqModel_;
// Private Member Functions
//- Disallow copy construct
basicSubGrid(const basicSubGrid&);
//- Disallow default bitwise assignment
void operator=(const basicSubGrid&);
public:
//- Runtime type information
TypeName("basicSubGrid");
// Constructors
//- Construct from components
basicSubGrid
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~basicSubGrid();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -1,229 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "normBasicXiSubXiEq.H"
#include "addToRunTimeSelectionTable.H"
#include "ignition.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(normBasicSubGrid, 0);
addToRunTimeSelectionTable(XiEqModel, normBasicSubGrid, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::normBasicSubGrid::normBasicSubGrid
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, modelType,thermo, turbulence, Su),
Cxpe1_(XiEqModelCoeffs_.get<scalar>("Cxpe1")),
Cxpe2_(XiEqModelCoeffs_.get<scalar>("Cxpe2")),
Cxpe3_(XiEqModelCoeffs_.get<scalar>("Cxpe3")),
Cxpe4_(XiEqModelCoeffs_.get<scalar>("Cxpe4"))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::XiEqModels::normBasicSubGrid::~normBasicSubGrid()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::normBasicSubGrid::XiEq() const
{
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volScalarField& b = mesh.lookupObject<volScalarField>("b");
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
const volSymmTensorField& nsv =
mesh.lookupObject<volSymmTensorField>("nsv");
const volSymmTensorField& Bv =
mesh.lookupObject<volSymmTensorField>("Bv");
volScalarField magU(mag(U));
const scalarField Cw = pow(mesh.V(), 2.0/3.0);
tmp<volScalarField> tN
(
new volScalarField
(
IOobject
(
"tN",
mesh.time().constant(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar(Nv.dimensions(), Zero)
)
);
volScalarField& N = tN.ref();
N.primitiveFieldRef() = Nv.primitiveField()*Cw;
tmp<volSymmTensorField> tns
(
new volSymmTensorField
(
IOobject
(
"tns",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedSymmTensor(nsv.dimensions(), Zero)
)
);
volSymmTensorField& ns = tns.ref();
tmp<volSymmTensorField> tB
(
new volSymmTensorField
(
IOobject
(
"tB",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedSymmTensor(Bv.dimensions(), Zero)
)
);
volSymmTensorField& B = tB.ref();
//calculating flame normal
volVectorField flNormal
(
"flNormal",
fvc::reconstruct(fvc::snGrad(b)*mesh.magSf())
);
volScalarField mgb("mgb", mag(flNormal));
dimensionedScalar dMgb("dMgb", mgb.dimensions(), SMALL);
const volScalarField bc(b*(1.0-b));
dMgb += 1.0e-8*
(bc*mgb)().weightedAverage(mesh.V())
/(bc.weightedAverage(mesh.V()) + SMALL);
mgb += dMgb;
flNormal /= mgb;
B.primitiveFieldRef() = Bv.primitiveField()*sqrt(Cw);
volScalarField Ntemp("Ntemp", N);
volScalarField Np("Np", max(N - (flNormal & ns & flNormal), scalar(1)));
// B_ is Bv*sqrt(Cw)
volScalarField bl("bl",(flNormal & B & flNormal)/sqrt(Np));
bl.min(1.0);
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
IOdictionary combustionProperties
(
IOobject
(
"combustionProperties",
mesh.time().constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
ignition ign(combustionProperties, mesh.time(), mesh);
dimensionedVector ignLoc("ignLoc", dimLength, ign.sites()[0].location());
dimensionedScalar filtRad2
(
"filtRad2",
dimLength,
6.0*ign.sites()[0].diameter()
);
const volScalarField filDist(mag(mesh.C() - ignLoc));
const volScalarField filterMult
(
pos(filDist - filtRad2)*neg(bl - 0.99)*pos(N - 1e-3)
);
tmp<volScalarField> XiSubEq
(
scalar(1)
+ min( min(Cxpe1_, Cxpe2_*magU/up)*sqrt(bl), Cxpe3_)
* filterMult
);
return XiSubEq;
}
bool Foam::XiEqModels::normBasicSubGrid::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
XiEqModelCoeffs_.readEntry("Cxpe1", Cxpe1_);
XiEqModelCoeffs_.readEntry("Cxpe2", Cxpe2_);
XiEqModelCoeffs_.readEntry("Cxpe3", Cxpe3_);
XiEqModelCoeffs_.readEntry("Cxpe4", Cxpe4_);
return true;
}
// ************************************************************************* //

View File

@ -1,117 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::normBasicSubGrid
Description
SourceFiles
normBasicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef normBasicSubGrid_H
#define normBasicSubGrid_H
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class normBasicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class normBasicSubGrid
:
public XiEqModel
{
// Private data
// Constants in the equilibrium Xp equation
scalar Cxpe1_;
scalar Cxpe2_;
scalar Cxpe3_;
scalar Cxpe4_;
// Private Member Functions
//- Disallow copy construct
normBasicSubGrid(const normBasicSubGrid&);
//- Disallow default bitwise assignment
void operator=(const normBasicSubGrid&);
public:
//- Runtime type information
TypeName("normBasicSubGrid");
// Constructors
//- Construct from components
normBasicSubGrid
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~normBasicSubGrid();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,113 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "basicXiSubG.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
defineTypeNameAndDebug(basicSubGrid, 0);
addToRunTimeSelectionTable(XiGModel, basicSubGrid, dictionary);
};
};
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiGModels::basicSubGrid::basicSubGrid
(
const dictionary& XiGProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiGModel(XiGProperties, thermo, turbulence, Su),
k1(readScalar(XiGModelCoeffs_.lookup("k1"))),
XiGModel_(XiGModel::New(XiGModelCoeffs_, thermo, turbulence, Su))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiGModels::basicSubGrid::~basicSubGrid()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiGModels::basicSubGrid::G() const
{
const objectRegistry& db = Su_.db();
const volVectorField& U = db.lookupObject<volVectorField>("U");
const volScalarField& Nv = db.lookupObject<volScalarField>("Nv");
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
tmp<volScalarField> tGtot = XiGModel_->G();
volScalarField& Gtot = tGtot.ref();
const scalarField Cw = pow(Su_.mesh().V(), 2.0/3.0);
scalarField N(Nv.primitiveField()*Cw);
forAll(N, celli)
{
if (N[celli] > 1e-3)
{
Gtot[celli] += k1*mag(U[celli])/Lobs[celli];
}
}
return tGtot;
}
Foam::tmp<Foam::volScalarField> Foam::XiGModels::basicSubGrid::Db() const
{
const objectRegistry& db = Su_.db();
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
return XiGModel_->Db()
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*Lobs)*Lobs/(mgb*Lobs + 1.0);
}
bool Foam::XiGModels::basicSubGrid::read(const dictionary& XiGProperties)
{
XiGModel::read(XiGProperties);
XiGModelCoeffs_.lookup("k1") >> k1;
return true;
}
// ************************************************************************* //

View File

@ -0,0 +1,136 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiGModels::basicSubGrid
Description
Basic sub-grid obstacle flame-wrinking generation rate coefficient model.
Details supplied by J Puttock 2/7/06.
\f$ G_{sub} \f$ denotes the generation coefficient and it is given by
\f[
G_{sub} = k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{obs}}
\frac{/Xi_{{sub}_{eq}}-1}{/Xi_{sub}}
\f]
and the removal:
\f[
- k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{sub}}
\frac{\Xi_{sub}-1}{\Xi_{sub}}
\f]
Finally, \f$ G_{sub} \f$ is added to generation rate \f$ G_{in} \f$
due to the turbulence.
SourceFiles
basicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef basicSubGrid_H
#define basicSubGrid_H
#include "XiGModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
/*---------------------------------------------------------------------------*\
Class basicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class basicSubGrid
:
public XiGModel
{
// Private data
//- Sub-grid generation rate coefficient
scalar k1;
//- Xi generation rate model due to turbulence
autoPtr<XiGModel> XiGModel_;
// Private Member Functions
//- Disallow copy construct
basicSubGrid(const basicSubGrid&);
//- Disallow default bitwise assignment
void operator=(const basicSubGrid&);
public:
//- Runtime type information
TypeName("basicSubGridG");
// Constructors
//- Construct from components
basicSubGrid
(
const dictionary& XiGProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~basicSubGrid();
// Member Functions
//- Return the flame-wrinking generation rate
virtual tmp<volScalarField> G() const;
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiGProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiGModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -1,300 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "normBasicXiSubG.H"
#include "addToRunTimeSelectionTable.H"
#include "zeroGradientFvPatchField.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
defineTypeNameAndDebug(normBasicSubGrid, 0);
addToRunTimeSelectionTable(XiGModel, normBasicSubGrid, dictionary);
};
};
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiGModels::normBasicSubGrid::normBasicSubGrid
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiGModel(XiGProperties, modelType, thermo, turbulence, Su),
// Bv_
// (
// IOobject
// (
// "Bv",
// Su.mesh().facesInstance(),
// Su.mesh(),
// IOobject::MUST_READ,
// IOobject::NO_WRITE
// ),
// Su.mesh()
// ),
k1_(XiGModelCoeffs_.get<scalar>("k1")),
kb1_(XiGModelCoeffs_.get<scalar>("kb1")),
kbe_(XiGModelCoeffs_.get<scalar>("kbe")),
kbx_(XiGModelCoeffs_.get<scalar>("kbx")),
k2_(XiGModelCoeffs_.get<scalar>("k2")),
LOverCw_(XiGModelCoeffs_.get<scalar>("LOverCw"))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::XiGModels::normBasicSubGrid::~normBasicSubGrid()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiGModels::normBasicSubGrid::G() const
{
const objectRegistry& db = Su_.db();
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = db.lookupObject<volVectorField>("U");
const volScalarField& b = db.lookupObject<volScalarField>("b");
const volScalarField& Nv = db.lookupObject<volScalarField>("Nv");
const volScalarField& St = db.lookupObject<volScalarField>("St");
const volSymmTensorField& nsv = db.lookupObject<volSymmTensorField>("nsv");
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
const volSymmTensorField& Bv = db.lookupObject<volSymmTensorField>("Bv");
const scalarField Cw(pow(Su_.mesh().V(), 2.0/3.0));
volScalarField CwVol
(
IOobject
(
"CwVol",
mesh.time().timeName(),
mesh
),
mesh,
dimensionSet(dimLength),
Cw,
zeroGradientFvPatchField<scalar>::typeName
);
CwVol.correctBoundaryConditions();
if (!db.foundObject<volScalarField>("Ep"))
{
FatalErrorIn
(
"Foam::tmp<Foam::volScalarField> Foam::XiGModels::"
"normBasicSubGrid::G() const"
)
<< "Looking for Ep in db which does not exist "
<< Foam::abort(FatalError);
}
const volScalarField& Ep = db.lookupObject<volScalarField>("Ep");
const volScalarField& Xp = db.lookupObject<volScalarField>("Xp");
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
//tmp<volScalarField> tGtot = XiGModel_->G();
tmp<volScalarField> tGtot
(
new volScalarField
(
IOobject
(
"tGtot",
Su_.mesh().time().timeName(),
Su_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
Su_.mesh(),
dimensionedScalar(inv(dimTime), Zero)
)
);
volScalarField& Gtot = tGtot.ref();
//calculating flame normal
volVectorField flNormal(fvc::reconstruct(fvc::snGrad(b)*mesh.magSf()));
volScalarField mgb("mgb", mag(flNormal));
dimensionedScalar dMgb("dMgb", mgb.dimensions(), SMALL);
{
volScalarField bc(b*(1.0-b));
dMgb += 1.0e-8*
(bc*mgb)().weightedAverage(mesh.V())
/(bc.weightedAverage(mesh.V()) + SMALL);
}
mgb += dMgb;
flNormal /= mgb;
tmp<volScalarField> tN
(
new volScalarField
(
IOobject
(
"tN",
Su_.mesh().time().timeName(),
Su_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
Su_.mesh(),
dimensionedScalar(Nv.dimensions(), Zero)
)
);
volScalarField& N = tN.ref();
N.primitiveFieldRef() = Nv.primitiveField()*Cw;
tmp<volSymmTensorField> tns
(
new volSymmTensorField
(
IOobject
(
"tns",
Su_.mesh().time().timeName(),
Su_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
Su_.mesh(),
dimensionedSymmTensor(nsv.dimensions(), Zero)
)
);
volSymmTensorField& ns = tns.ref();
ns.primitiveFieldRef() = nsv.primitiveField()*Cw;
tmp<volSymmTensorField> tB
(
new volSymmTensorField
(
IOobject
(
"tB",
Su_.mesh().time().timeName(),
Su_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
Su_.mesh(),
dimensionedSymmTensor(Bv.dimensions(), Zero)
)
);
volSymmTensorField& B = tB.ref();
B.primitiveFieldRef() = Bv.primitiveField()*sqrt(Cw);
volScalarField Np(max(N - (flNormal & ns & flNormal), scalar(1)));
// B_ is Bv*sqrt(Cw)
volScalarField bl("bl",(flNormal & B & flNormal)/sqrt(Np));
bl.min(1.0);
volScalarField flSpeed("flSpeed", ((U & flNormal) + St)*b/(b+SMALL)) ;
volScalarField up("up", sqrt((2.0/3.0)*turbulence_.k()));
const volScalarField Gtot1
(
"Gtot1",
(
k1_ + kb1_*min(pow(bl, kbe_), kbx_)
)*mag(flSpeed)/(max(Lobs, LOverCw_*CwVol))
);
const volScalarField Gtot2("Gtot2", k2_*Ep*Su_*Xi/(Xp - 0.999));
const volScalarField value(pos(N - 1.e-3)*neg(bl - 0.99));
Gtot = value*Gtot1+(1.0 - value)*Gtot2;
//if (Xi.mesh().time().outputTime())
{
//Gtot.write();
//bl.write();
//Lobs.write();
//flSpeed.write();
//N.write();
}
return tGtot;
}
Foam::tmp<Foam::volScalarField> Foam::XiGModels::normBasicSubGrid::Db() const
{
// Not used //
const objectRegistry& db = Su_.db();
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
const volScalarField& Db = db.lookupObject<volScalarField>("Db");
//return turbulence_.muEff()
return Db
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*Lobs)*Lobs/(mgb*Lobs + 1.0);
}
bool Foam::XiGModels::normBasicSubGrid::read(const dictionary& XiGProperties)
{
XiGModel::read(XiGProperties);
XiGModelCoeffs_.readEntry("k1", k1_);
XiGModelCoeffs_.readEntry("kb1", kb1_);
XiGModelCoeffs_.readEntry("kbe", kbe_);
XiGModelCoeffs_.readEntry("kbx", kbx_);
XiGModelCoeffs_.readEntry("k2", k2_);
return true;
}
// ************************************************************************* //

View File

@ -1,132 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiGModel::normBasicSubGrid
Description
SourceFiles
normBasicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef normBasicSubGrid_H
#define normBasicSubGrid_H
#include "XiGModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
/*---------------------------------------------------------------------------*\
Class normBasicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class normBasicSubGrid
:
public XiGModel
{
// Private data
//- Sub-grid generation rate coefficient
scalar k1_;
//- Sub-grid generation rate coefficient - * sqrt(b)
scalar kb1_;
//- Sub-grid generation rate coefficient - * b
scalar kbe_;
//- Sub-grid generation rate upper limit coefficient - * b
scalar kbx_;
//- Sub-grid generation rate coefficient
scalar k2_;
//- Maximum Lobs/CellWidth
scalar LOverCw_;
// Private Member Functions
//- Disallow copy construct
normBasicSubGrid(const normBasicSubGrid&);
//- Disallow default bitwise assignment
void operator=(const normBasicSubGrid&);
public:
//- Runtime type information
TypeName("normBasicSubGridG");
// Constructors
//- Construct from components
normBasicSubGrid
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~normBasicSubGrid();
// Member Functions
//- Return the flame-wrinking generation rate
virtual tmp<volScalarField> G() const;
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiGProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiGModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -60,18 +58,18 @@ Foam::PDRDragModel::PDRDragModel
(
PDRProperties.subDict
(
PDRProperties.get<word>("PDRDragModel") + "Coeffs"
word(PDRProperties.lookup("PDRDragModel")) + "Coeffs"
)
),
turbulence_(turbulence),
rho_(rho),
U_(U),
phi_(phi),
on_(PDRDragModelCoeffs_.get<bool>("drag"))
on_(PDRDragModelCoeffs_.lookup("drag"))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::PDRDragModel::~PDRDragModel()
{}
@ -81,9 +79,9 @@ Foam::PDRDragModel::~PDRDragModel()
bool Foam::PDRDragModel::read(const dictionary& PDRProperties)
{
PDRDragModelCoeffs_ = PDRProperties.subDict(type() + "Coeffs");
PDRDragModelCoeffs_ = PDRProperties.optionalSubDict(type() + "Coeffs");
PDRDragModelCoeffs_.readEntry("drag", on_);
PDRDragModelCoeffs_.lookup("drag") >> on_;
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -69,7 +67,7 @@ protected:
const volVectorField& U_;
const surfaceScalarField& phi_;
bool on_;
Switch on_;
private:
@ -161,15 +159,13 @@ public:
using regIOobject::read;
//- Update properties from given dictionary
virtual bool read(const dictionary& PDRProperties);
virtual bool read(const dictionary& PDRProperties) = 0;
//- Write Data
virtual bool writeData(Ostream&) const
{
return true;
}
//- Write fields
virtual void writeFields() const
{
NotImplemented;

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -38,19 +36,17 @@ Foam::autoPtr<Foam::PDRDragModel> Foam::PDRDragModel::New
const surfaceScalarField& phi
)
{
const word modelType(PDRProperties.get<word>("PDRDragModel"));
const word modelType(PDRProperties.lookup("PDRDragModel"));
Info<< "Selecting flame-wrinkling model " << modelType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
if (!cstrIter.found())
{
FatalErrorIn
(
"PDRDragModel::New"
) << "Unknown PDRDragModel type "
FatalErrorInFunction
<< "Unknown PDRDragModel type "
<< modelType << nl << nl
<< "Valid PDRDragModels are : " << endl
<< dictionaryConstructorTablePtr_->sortedToc()
@ -58,7 +54,7 @@ Foam::autoPtr<Foam::PDRDragModel> Foam::PDRDragModel::New
}
return autoPtr<PDRDragModel>
(cstrIter()(PDRProperties,turbulence, rho, U, phi));
(cstrIter()(PDRProperties, turbulence, rho, U, phi));
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -83,7 +81,7 @@ Foam::PDRDragModels::basic::basic
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::PDRDragModels::basic::~basic()
{}
@ -106,7 +104,12 @@ Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
dimensionedSymmTensor
(
"zero",
dimMass/dimTime/pow(dimLength, 3),
Zero
)
)
);
@ -140,7 +143,7 @@ Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
dimensionedScalar("zero", dimMass/dimLength/pow(dimTime, 3), 0.0)
)
);
@ -159,7 +162,6 @@ Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const
+ Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_);
}
return tGk;
}
@ -168,8 +170,8 @@ bool Foam::PDRDragModels::basic::read(const dictionary& PDRProperties)
{
PDRDragModel::read(PDRProperties);
PDRDragModelCoeffs_.readEntry("Csu", Csu.value());
PDRDragModelCoeffs_.readEntry("Csk", Csk.value());
PDRDragModelCoeffs_.lookup("Csu") >> Csu.value();
PDRDragModelCoeffs_.lookup("Csk") >> Csk.value();
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.

View File

@ -1,319 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "basicSch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace PDRDragModels
{
defineTypeNameAndDebug(basicSch, 0);
addToRunTimeSelectionTable(PDRDragModel, basicSch, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::PDRDragModels::basicSch::basicSch
(
const dictionary& PDRProperties,
const compressible::RASModel& turbulence,
const volScalarField& rho,
const volVectorField& U,
const surfaceScalarField& phi
)
:
PDRDragModel(PDRProperties,turbulence, rho, U, phi),
Csu("Csu", dimless, PDRDragModelCoeffs_),
Csk("Csk", dimless, PDRDragModelCoeffs_),
Aw_
(
IOobject
(
"Aw",
U_.mesh().facesInstance(),
U_.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
),
U_.mesh()
),
CR_
(
IOobject
(
"CR",
U_.mesh().facesInstance(),
U_.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
),
U_.mesh()
),
nrCoef_(PDRDragModelCoeffs_.get<scalar>("nrCoef")),
nrExp2_(PDRDragModelCoeffs_.get<scalar>("nrExp2")),
lCoef_(PDRDragModelCoeffs_.get<scalar>("lCoef")),
maxSchFac_(PDRDragModelCoeffs_.get<scalar>("maxSchFac")),
subGridSchelkin_(PDRDragModelCoeffs_.get<bool>("subGridSchelkin"))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::PDRDragModels::basicSch::~basicSch()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basicSch::Dcu() const
{
tmp<volSymmTensorField> tDragDcu
(
new volSymmTensorField
(
IOobject
(
"tDragDcu",
U_.mesh().time().constant(),
U_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
)
);
volSymmTensorField& DragDcu = tDragDcu.ref();
if (on_)
{
const volScalarField& betav =
U_.db().lookupObject<volScalarField>("betav");
DragDcu =
(0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*sqr(Aw_);
}
return tDragDcu;
}
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::Gk() const
{
tmp<volScalarField> tGk
(
new volScalarField
(
IOobject
(
"tGk",
U_.mesh().time().constant(),
U_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
)
);
volScalarField& Gk = tGk.ref();
if (on_)
{
const volScalarField& betav =
U_.db().lookupObject<volScalarField>("betav");
const volSymmTensorField& CT =
U_.db().lookupObject<volSymmTensorField>("CT");
Gk =
(0.5*rho_)*mag(U_)*(U_ & CT & U_)
+ Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_);
if (subGridSchelkin_)
{
Gk *= schFac();
}
}
return tGk;
}
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::schFac() const
{
const volScalarField& Su_ = U_.db().lookupObject<volScalarField>("Su");
const volScalarField& rhou_ = U_.db().lookupObject<volScalarField>("rhou");
const volScalarField& muu_ = U_.db().lookupObject<volScalarField>("muu");
tmp<volScalarField> tfac
(
new volScalarField
(
IOobject
(
"tfac",
U_.mesh().time().constant(),
U_.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U_.mesh(),
dimensionedScalar(dimless, Zero)
)
);
volScalarField& schFac = tfac.ref();
const volScalarField& k = turbulence_.k();
const volScalarField& epsilon = turbulence_.epsilon();
const volScalarField up(sqrt((2.0/3.0)*k));
const volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
volScalarField Rs(Su_*l*rhou_/muu_);
if (subGridSchelkin_)
{
schFac = max
(
1.0,
min
(
maxSchFac_,
pow(Rs, 2.0 * SchelkinExponent(nrCoef_, nrExp2_, Su_))
)
);
}
return tfac;
}
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::SchelkinExponent
(
const scalar nrCoef,
const scalar nrExp,
const volScalarField& Su
) const
{
const fvMesh& mesh = Su.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
const volSymmTensorField& nsv =
mesh.lookupObject<volSymmTensorField>("nsv");
tmp<volScalarField> tN
(
new volScalarField
(
IOobject
(
"tN",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
mesh,
dimensionedScalar(Nv.dimensions(), Zero)
)
);
volScalarField& N = tN.ref();
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
tmp<volSymmTensorField> tns
(
new volSymmTensorField
(
IOobject
(
"tns",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedSymmTensor(nsv.dimensions(), Zero)
)
);
volSymmTensorField& ns = tns.ref();
ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0);
const volVectorField Uhat
(
U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4))
);
const volScalarField nr(sqrt(max(N - (Uhat & ns & Uhat), scalar(1.0))));
//Re use tN
N.primitiveFieldRef() =
nrCoef*((scalar(1.0) - pow(nrExp, nr))/(1.0 - nrExp) - scalar(1.0));
return tN;
}
bool Foam::PDRDragModels::basicSch::read(const dictionary& PDRProperties)
{
PDRDragModel::read(PDRProperties);
PDRDragModelCoeffs_.readEntry("Csu", Csu.value());
PDRDragModelCoeffs_.readEntry("Csk", Csk.value());
return true;
}
void Foam::PDRDragModels::basicSch::writeFields() const
{
Aw_.write();
CR_.write();
}
// ************************************************************************* //

View File

@ -1,142 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::PDRDragModels::basicSch
Description
SourceFiles
basicSch.C
\*---------------------------------------------------------------------------*/
#ifndef basicSch_H
#define basicSch_H
#include "PDRDragModel.H"
#include "XiEqModel.H"
namespace Foam
{
namespace PDRDragModels
{
/*---------------------------------------------------------------------------*\
Class basicSch Declaration
\*---------------------------------------------------------------------------*/
class basicSch
:
public PDRDragModel
{
// Private data
dimensionedScalar Csu;
dimensionedScalar Csk;
volScalarField Aw_;
volSymmTensorField CR_;
//- Schelkin effect Model constants
const scalar nrCoef_;
const scalar nrExp2_;
const scalar lCoef_;
const scalar maxSchFac_;
//- Use sub-grid Schelkin effect
bool subGridSchelkin_;
// Private Member Functions
//- Disallow copy construct
basicSch(const basicSch&);
//- Disallow default bitwise assignment
void operator=(const basicSch&);
public:
//- Runtime type information
TypeName("basicSch");
// Constructors
//- Construct from components
basicSch
(
const dictionary& PDRProperties,
const compressible::RASModel& turbulence,
const volScalarField& rho,
const volVectorField& U,
const surfaceScalarField& phi
);
//- Destructor
virtual ~basicSch();
// Member Functions
//- Return the momentum drag coefficient
virtual tmp<volSymmTensorField> Dcu() const;
//- Return the momentum drag turbulence generation rate
virtual tmp<volScalarField> Gk() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& PDRProperties);
//- Write fields
void writeFields() const;
//- Return the schelkin factor for drag turbulence generation rate
tmp<volScalarField> schFac() const;
//- Return the sub-grid Schelkin effect exponent
tmp<volScalarField> SchelkinExponent
(
const scalar,
const scalar,
const volScalarField&
) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace PDRDragModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,11 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2019-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -29,7 +26,6 @@ License
#include "PDRkEpsilon.H"
#include "PDRDragModel.H"
#include "addToRunTimeSelectionTable.H"
#include "Time.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -71,40 +67,16 @@ PDRkEpsilon::PDRkEpsilon
modelName
),
C5_(coeffDict_.get<scalar>("C5")),
C6_(coeffDict_.get<scalar>("C6")),
maxLOverCellW_(coeffDict_.get<scalar>("maxLOverCellW")),
lCoef_(coeffDict_.get<scalar>("lCoef")),
noTurbUntil_
C4_
(
dimensioned<scalar>::lookupOrAddToDict
(
"noTurbUntil",
"C4",
coeffDict_,
0.0
0.1
)
),
LOverLobs_
(
dimensioned<scalar>::lookupOrAddToDict
(
"LOverLobs",
coeffDict_,
0.2
)
),
LOverMobs_
(
dimensioned<scalar>::lookupOrAddToDict
(
"LOverMobs",
coeffDict_,
0.0
)
),
bMin_(coeffDict_.get<scalar>("bMin")),
flameFilteredG_(coeffDict_.get<bool>("flameFilteredG"))
{}
)
{}
// * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * //
@ -119,13 +91,13 @@ bool PDRkEpsilon::read()
{
if (RASModel::read())
{
noTurbUntil_.readIfPresent(coeffDict_);
LOverLobs_.readIfPresent(coeffDict_);
LOverMobs_.readIfPresent(coeffDict_);
C4_.readIfPresent(coeffDict_);
return true;
}
return false;
else
{
return false;
}
}
@ -137,12 +109,16 @@ void PDRkEpsilon::correct()
nut_ = Cmu_*sqr(k_)/epsilon_;
nut_.correctBoundaryConditions();
// Re-calculate thermal diffusivity
//***HGWalphat_ = mut_/Prt_;
//alphat_.correctBoundaryConditions();
return;
}
RASModel::correct();
volScalarField divU("divU",fvc::div(phi_/fvc::interpolate(rho_)));
volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_)));
if (mesh_.moving())
{
@ -150,12 +126,10 @@ void PDRkEpsilon::correct()
}
tmp<volTensorField> tgradU = fvc::grad(U_);
volScalarField G(GName(), rho_*nut_*(tgradU() && dev(twoSymm(tgradU()))));
tgradU.clear();
// Update epsilon and G at the wall
// Update espsilon and G at the wall
epsilon_.boundaryFieldRef().updateCoeffs();
// Add the blockage generation term so that it is included consistently
@ -166,102 +140,59 @@ void PDRkEpsilon::correct()
const volScalarField& Lobs =
U_.db().lookupObject<volScalarField>("Lobs");
const volVectorField& U = mesh_.lookupObject<volVectorField>("U");
const volScalarField& b = mesh_.lookupObject<volScalarField>("b");
const scalarField Cw(pow(mesh_.V(), 2.0/3.0));
const PDRDragModel& drag =
U_.db().lookupObject<PDRDragModel>("PDRDragModel");
volScalarField GR(drag.Gk());
volScalarField LD
volScalarField LI
(C4_*(Lobs + dimensionedScalar("minLength", dimLength, VSMALL)));
// Dissipation equation
tmp<fvScalarMatrix> epsEqn
(
"LD",
(LOverLobs_)*(Lobs + dimensionedScalar("minLength", dimLength, VSMALL))
betav*fvm::ddt(rho_, epsilon_)
+ fvm::div(phi_, epsilon_)
- fvm::laplacian(rho_*DepsilonEff(), epsilon_)
==
C1_*betav*G*epsilon_/k_
+ 1.5*pow(Cmu_, 3.0/4.0)*GR*sqrt(k_)/LI
- fvm::SuSp(((2.0/3.0)*C1_)*betav*rho_*divU, epsilon_)
- fvm::Sp(C2_*betav*rho_*epsilon_/k_, epsilon_)
);
LD.primitiveFieldRef() = min(LD.primitiveField(), maxLOverCellW_*sqrt(Cw));
epsEqn.ref().relax();
const volScalarField LI(lCoef_*pow(k_, 3.0/2.0)/epsilon_);
epsEqn.ref().boundaryManipulate(epsilon_.boundaryFieldRef());
IOdictionary combustionProperties
solve(epsEqn);
bound(epsilon_, epsilonMin_);
// Turbulent kinetic energy equation
tmp<fvScalarMatrix> kEqn
(
IOobject
(
"combustionProperties",
mesh_.time().constant(),
mesh_,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
betav*fvm::ddt(rho_, k_)
+ fvm::div(phi_, k_)
- fvm::laplacian(rho_*DkEff(), k_)
==
betav*G + GR
- fvm::SuSp((2.0/3.0)*betav*rho_*divU, k_)
- fvm::Sp(betav*rho_*epsilon_/k_, k_)
);
ignition ign(combustionProperties, mesh_.time(), U.mesh());
kEqn.ref().relax();
solve(kEqn);
bound(k_, kMin_);
dimensionedVector ignLoc("ignLoc", dimLength, ign.sites()[0].location());
dimensionedScalar filtRad2
(
"filtRad2",
dimLength,
6.0*ign.sites()[0].diameter()
);
if (flameFilteredG_)
{
const volScalarField filDist(mag(mesh_.C() - ignLoc));
const volScalarField filterG(pos(filDist - filtRad2));
const volScalarField filterdivU(pos(filDist - filtRad2));
const volScalarField filterGR(pos(filDist - filtRad2)*pos(b - bMin_));
G *= filterG;
GR *= filterGR;
divU *= filterdivU;
}
volScalarField Cl(C5_ + (C6_*((LI - LD)/LI)));
Cl.max(0.0);
if (mesh_.time() > noTurbUntil_)
{
tmp<fvScalarMatrix> epsEqn
(
betav*fvm::ddt(rho_, epsilon_)
+ fvm::div(phi_, epsilon_)
- fvm::laplacian(rho_*DepsilonEff(), epsilon_)
==
C1_*betav*G*epsilon_/k_
+ Cl*(epsilon_/k_)*GR
- fvm::SuSp(((2.0/3.0)*C1_+C3_)*betav*rho_*divU, epsilon_)
- fvm::Sp(C2_*betav*rho_*epsilon_/k_, epsilon_)
);
epsEqn.ref().relax();
epsEqn.ref().boundaryManipulate(epsilon_.boundaryFieldRef());
solve(epsEqn);
bound(epsilon_, epsilonMin_);
tmp<fvScalarMatrix> kEqn
(
betav*fvm::ddt(rho_, k_)
+ fvm::div(phi_, k_)
- fvm::laplacian(rho_*DkEff(), k_)
==
(betav*G + GR)
- fvm::SuSp((2.0/3.0)*betav*rho_*divU, k_)
- fvm::Sp(betav*rho_*epsilon_/k_, k_)
);
kEqn.ref().relax();
solve(kEqn);
bound(k_, kMin_);
}
// Re-calculate viscosity
nut_ = Cmu_*sqr(k_)/epsilon_;
nut_.correctBoundaryConditions();
// Re-calculate thermal diffusivity
//***HGWalphat_ = mut_/Prt_;
//alphat_.correctBoundaryConditions();
}

View File

@ -2,11 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -31,6 +28,30 @@ Description
Standard k-epsilon turbulence model with additional source terms
corresponding to PDR basic drag model (\link basic.H \endlink)
The default model coefficients correspond to the following:
@verbatim
PDRkEpsilonCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
C3 -0.33; // only for compressible
C4 0.1;
sigmak 1.0; // only for compressible
sigmaEps 1.3;
Prt 1.0; // only for compressible
}
@endverbatim
The turbulence source term \f$ G_{R} \f$ appears in the
\f$ \kappa-\epsilon \f$ equation for the generation of turbulence due to
interaction with unresolved obstacles.
In the \f$ \epsilon \f$ equation \f$ C_{1} G_{R} \f$ is added as a source
term.
In the \f$ \kappa \f$ equation \f$ G_{R} \f$ is added as a source term.
SourceFiles
PDRkEpsilon.C
@ -40,7 +61,6 @@ SourceFiles
#define compressiblePDRkEpsilon_H
#include "kEpsilon.H"
#include "ignition.H"
#include "turbulentFluidThermoModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -66,18 +86,10 @@ class PDRkEpsilon
>
>
{
// Private Data
// Private data
// Model coefficients
scalar C5_;
scalar C6_;
scalar maxLOverCellW_;
scalar lCoef_;
dimensionedScalar noTurbUntil_;
dimensionedScalar LOverLobs_;
dimensionedScalar LOverMobs_;
scalar bMin_;
bool flameFilteredG_;
dimensionedScalar C4_;
public:

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -36,9 +34,10 @@ Description
if (mesh.nInternalFaces())
{
scalarField sumPhi
scalarField sumPhi
(
fvc::surfaceSum(mag(phiSt))().primitiveField()/rho.primitiveField()
fvc::surfaceSum(mag(phiSt))().primitiveField()
/ rho.primitiveField()
);
StCoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue();

View File

@ -1,6 +1,9 @@
MRF.correctBoundaryVelocity(U);
fvVectorMatrix UEqn
(
betav*fvm::ddt(rho, U) + fvm::div(phi, U)
+ MRF.DDt(rho, U)
+ turbulence->divDevRhoReff(U)
==
betav*rho*g

View File

@ -1,261 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "BLMgMaXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(BLMgMaXiEq, 0);
addToRunTimeSelectionTable(XiEqModel, BLMgMaXiEq, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::BLMgMaXiEq::BLMgMaXiEq
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, modelType, thermo, turbulence, Su),
kaCoef_(XiEqModelCoeffs_.get<scalar>("kaCoef")),
lowK0_(XiEqModelCoeffs_.get<scalar>("lowK0")),
lowKg_(XiEqModelCoeffs_.get<scalar>("lowKg")),
XiEqCoef_(XiEqModelCoeffs_.get<scalar>("XiEqCoef")),
alphaCoefP_(XiEqModelCoeffs_.get<scalar>("alphaCoefP")),
betaCoefP_(XiEqModelCoeffs_.get<scalar>("betaCoefP")),
alphaCoefN_(XiEqModelCoeffs_.get<scalar>("alphaCoefN")),
betaCoefN_(XiEqModelCoeffs_.get<scalar>("betaCoefN")),
maLim_(XiEqModelCoeffs_.get<scalar>("maLim")),
maLim1_(XiEqModelCoeffs_.get<scalar>("maLim1")),
quenchCoef_(XiEqModelCoeffs_.get<scalar>("quenchCoef")),
quenchExp_(XiEqModelCoeffs_.get<scalar>("quenchExp")),
quenchM_(XiEqModelCoeffs_.get<scalar>("quenchM")),
quenchRate1_(XiEqModelCoeffs_.get<scalar>("quenchRate1")),
quenchRate2_(XiEqModelCoeffs_.get<scalar>("quenchRate2")),
lCoef_(XiEqModelCoeffs_.get<scalar>("lCoef")),
SuMin_(0.01*Su.average()),
uPrimeCoef_(XiEqModelCoeffs_.get<scalar>("uPrimeCoef")),
nrExp_(XiEqModelCoeffs_.get<scalar>("nrExp")),
subGridSchelkin_(XiEqModelCoeffs_.get<bool>("subGridSchelkin")),
MaModel
(
IOdictionary
(
IOobject
(
"combustionProperties",
Su.mesh().time().constant(),
Su.mesh(),
IOobject::MUST_READ
)
),
thermo
)
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::XiEqModels::BLMgMaXiEq::~BLMgMaXiEq()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::BLMgMaXiEq::XiEq() const
{
const volScalarField& k = turbulence_.k();
const volScalarField& epsilon = turbulence_.epsilon();
volScalarField up("up", sqrt((2.0/3.0)*k));
if (subGridSchelkin_)
{
up.primitiveFieldRef() +=
calculateSchelkinEffect(uPrimeCoef_, nrExp_);
}
volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
volScalarField Rl(up*l*thermo_.rhou()/thermo_.muu());
volScalarField upBySu("upBySu", up/(Su_ + SuMin_));
volScalarField K("K", kaCoef_*upBySu*upBySu/sqrt(Rl));
volScalarField Ma("Ma", MaModel.Ma());
volScalarField regime("regime", MaModel.Ma()*scalar(0.0));
tmp<volScalarField> tXiEq
(
new volScalarField
(
IOobject
(
"XiEq",
epsilon.time().timeName(),
epsilon.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
epsilon.mesh(),
dimensionedScalar(dimless, Zero)
)
);
const objectRegistry& db = Su_.db();
const volScalarField& b = db.lookupObject<volScalarField>("b");
const volScalarField multiP1(0.0*pos(b - 0.99) + 1.0*neg(b - 0.99));
const volScalarField multiP2(1.0*pos(b - 0.01) + 0.0*neg(b - 0.01));
volScalarField& xieq = tXiEq.ref();
forAll(xieq, celli)
{
scalar alpha;
scalar beta;
scalar gulderMa;
if (Ma[celli]>= 0)
{
gulderMa =
1.0
+ (0.1402 - 0.007*Ma[celli])
* upBySu[celli]*sqrt(upBySu[celli]/K[celli]);
regime[celli] = multiP1[celli]*multiP2[celli];
}
else
{
gulderMa =
1.0
+ (0.005*Ma[celli]*Ma[celli]+0.01*Ma[celli] + 0.125)
* upBySu[celli]*sqrt(upBySu[celli]/K[celli]);
regime[celli] = 2*multiP1[celli]*multiP2[celli];
}
if (K[celli] < (lowK0_ + lowKg_*Ma[celli]) )
{
xieq[celli] = gulderMa;
}
else
{
if (Ma[celli] >= 0.0)
{
alpha = alphaCoefP_*(maLim_ - Ma[celli]);
beta = betaCoefP_*(maLim_ - Ma[celli]);
regime[celli] = 3*multiP1[celli]*multiP2[celli];
}
else
{
alpha = alphaCoefN_*(maLim1_ - Ma[celli]) ;
beta = betaCoefN_*(maLim_ + Ma[celli]);
regime[celli] = 4*multiP1[celli]*multiP2[celli];
}
xieq[celli] = XiEqCoef_*alpha*pow(K[celli], beta)*upBySu[celli];
}
if (Ma[celli] > -3.0 && Ma[celli] < 11.0)
{
scalar K0p8 = quenchCoef_*pow( Ma[celli] - quenchM_, quenchExp_);
scalar quenchRate = quenchRate1_ + quenchRate2_*Ma[celli];
if (K[celli] > (K0p8 - 0.223/quenchRate))
{
xieq[celli] *= 0.8*exp(-quenchRate*(K[celli] - K0p8));
regime[celli] = 5*multiP1[celli]*multiP2[celli];
}
}
}
forAll(xieq.boundaryField(), patchi)
{
scalarField& xieqp = xieq.boundaryFieldRef()[patchi];
const scalarField& Kp = K.boundaryField()[patchi];
const scalarField& Map = Ma.boundaryField()[patchi];
const scalarField& upBySup = upBySu.boundaryField()[patchi];
forAll(xieqp, facei)
{
scalar alpha;
scalar beta;
if (Map[facei] > 0.0)
{
alpha = alphaCoefP_*(maLim_ - Map[facei]);
beta = betaCoefP_*(maLim_ - Map[facei]);
}
else
{
alpha = alphaCoefN_*(maLim_ - Map[facei]);
beta = betaCoefN_*(maLim_ + Map[facei]);
}
xieqp[facei] =
XiEqCoef_*alpha*pow(Kp[facei], beta)*upBySup[facei];
if (Map[facei] > -3.0 && Map[facei] < 11.0)
{
scalar K0p8 = quenchCoef_*pow(Map[facei] - quenchM_, quenchExp_);
scalar quenchRate = quenchRate1_ + quenchRate2_*Ma[facei];
if (Kp[facei] > (K0p8 - 0.223/quenchRate))
{
xieqp[facei] *= 0.8*exp(-quenchRate*(Kp[facei] - K0p8));
}
}
else
{
Info<<
"Markstein Number out of range for Quench Formulation" << endl;
}
}
}
return tXiEq;
}
bool Foam::XiEqModels::BLMgMaXiEq::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
return true;
}
// ************************************************************************* //

View File

@ -1,148 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModel::BLMgMaXiEq
Description
Model for XiEq based on Bradley, Lawes and Mansour (2011)
Cobustion and Falme, 158, 123 correlation
with a linear correction function to give a plausible profile for XiEq.
See \link SCOPELaminarFlameSpeed.H \endlink for details on the SCOPE laminar
flame speed model.
SourceFiles
BLMgMaXiEq.C
\*---------------------------------------------------------------------------*/
#ifndef BLMgMaXiEq_H
#define BLMgMaXiEq_H
#include "XiEqModel.H"
#include "SCOPELaminarFlameSpeed.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class BLMgMaXiEq Declaration
\*---------------------------------------------------------------------------*/
class BLMgMaXiEq
:
public XiEqModel
{
// Private data
// Model constants
scalar kaCoef_;
scalar lowK0_;
scalar lowKg_;
scalar XiEqCoef_;
scalar alphaCoefP_;
scalar betaCoefP_;
scalar alphaCoefN_;
scalar betaCoefN_;
scalar maLim_;
scalar maLim1_;
scalar quenchCoef_, quenchExp_, quenchM_;
scalar quenchRate1_, quenchRate2_;
scalar lCoef_;
//- Minimum Su
dimensionedScalar SuMin_;
//- Schelkin effect Model constants
scalar uPrimeCoef_;
scalar nrExp_;
//- Use sub-grid Schelkin effect
bool subGridSchelkin_;
//- The SCOPE laminar flame speed model used to obtain the
// Marstein number. Note: the laminar flame speed need not be
// obtained form the same model.
laminarFlameSpeedModels::SCOPE MaModel;
// Private Member Functions
//- Disallow copy construct
BLMgMaXiEq(const BLMgMaXiEq&);
//- Disallow default bitwise assignment
void operator=(const BLMgMaXiEq&);
public:
//- Runtime type information
TypeName("BLMgMaXiEq");
// Constructors
//- Construct from components
BLMgMaXiEq
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~BLMgMaXiEq();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2012 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -45,25 +43,23 @@ namespace XiEqModels
Foam::XiEqModels::Gulder::Gulder
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, modelType, thermo, turbulence, Su),
XiEqCoef_(XiEqModelCoeffs_.get<scalar>("XiEqCoef")),
XiEqModel(XiEqProperties, thermo, turbulence, Su),
XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))),
SuMin_(0.01*Su.average()),
uPrimeCoef_(XiEqModelCoeffs_.get<scalar>("uPrimeCoef")),
nrExp_(XiEqModelCoeffs_.get<scalar>("nrExp")),
uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef"))),
subGridSchelkin_
(
XiEqModelCoeffs_.get<bool>("subGridSchelkin")
readBool(XiEqModelCoeffs_.lookup("subGridSchelkin"))
)
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModels::Gulder::~Gulder()
{}
@ -78,7 +74,7 @@ Foam::tmp<Foam::volScalarField> Foam::XiEqModels::Gulder::XiEq() const
if (subGridSchelkin_)
{
up.primitiveFieldRef() += calculateSchelkinEffect(uPrimeCoef_, nrExp_);
up.primitiveFieldRef() += calculateSchelkinEffect(uPrimeCoef_);
}
volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon))));
@ -100,10 +96,9 @@ bool Foam::XiEqModels::Gulder::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
XiEqModelCoeffs_.readEntry("XiEqCoef", XiEqCoef_);
XiEqModelCoeffs_.readEntry("uPrimeCoef", uPrimeCoef_);
XiEqModelCoeffs_.readEntry("nrExp", nrExp_);
XiEqModelCoeffs_.readEntry("subGridSchelkin", subGridSchelkin_);
XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef_;
XiEqModelCoeffs_.lookup("uPrimeCoef") >> uPrimeCoef_;
XiEqModelCoeffs_.lookup("subGridSchelkin") >> subGridSchelkin_;
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2012 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -65,7 +63,6 @@ class Gulder
//- Schelkin effect Model constant
scalar uPrimeCoef_;
scalar nrExp_;
//- Use sub-grid Schelkin effect
bool subGridSchelkin_;
@ -92,7 +89,6 @@ public:
Gulder
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su

View File

@ -0,0 +1,93 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "SCOPEBlendXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(SCOPEBlend, 0);
addToRunTimeSelectionTable(XiEqModel, SCOPEBlend, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::SCOPEBlend::SCOPEBlend
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, thermo, turbulence, Su),
XiEqModelL_
(
XiEqModel::New
(
XiEqModelCoeffs_.subDict("XiEqModelL"),
thermo,
turbulence,
Su
)
),
XiEqModelH_
(
XiEqModel::New
(
XiEqModelCoeffs_.subDict("XiEqModelH"),
thermo,
turbulence,
Su
)
)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModels::SCOPEBlend::~SCOPEBlend()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEBlend::XiEq() const
{
return pow
(
pow4(1.0/XiEqModelL_->XiEq()) + pow4(1.0/XiEqModelH_->XiEq()),
-0.25
);
}
// ************************************************************************* //

View File

@ -0,0 +1,121 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::SCOPEBlend
Description
Simple SCOPEBlendXiEq model for XiEq based on SCOPEXiEqs correlation
with a linear correction function to give a plausible profile for XiEq.
See @link SCOPELaminarFlameSpeed.H @endlink for details on the SCOPE
laminar flame speed model.
SourceFiles
SCOPEBlend.C
\*---------------------------------------------------------------------------*/
#ifndef SCOPEBlend_H
#define SCOPEBlend_H
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class SCOPEBlend Declaration
\*---------------------------------------------------------------------------*/
class SCOPEBlend
:
public XiEqModel
{
// Private data
//- Low turbulence intensity equilibrium Xi model
autoPtr<XiEqModel> XiEqModelL_;
//- High turbulence intensity equilibrium Xi model
autoPtr<XiEqModel> XiEqModelH_;
// Private Member Functions
//- Disallow copy construct
SCOPEBlend(const SCOPEBlend&);
//- Disallow default bitwise assignment
void operator=(const SCOPEBlend&);
public:
//- Runtime type information
TypeName("SCOPEBlend");
// Constructors
//- Construct from components
SCOPEBlend
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~SCOPEBlend();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties)
{
return true;
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,160 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "SCOPEXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(SCOPEXiEq, 0);
addToRunTimeSelectionTable(XiEqModel, SCOPEXiEq, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::SCOPEXiEq::SCOPEXiEq
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, thermo, turbulence, Su),
XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))),
XiEqExp_(readScalar(XiEqModelCoeffs_.lookup("XiEqExp"))),
lCoef_(readScalar(XiEqModelCoeffs_.lookup("lCoef"))),
SuMin_(0.01*Su.average()),
uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef"))),
subGridSchelkin_
(
readBool(XiEqModelCoeffs_.lookup("subGridSchelkin"))
),
MaModel
(
Su.mesh().lookupObject<IOdictionary>("combustionProperties"),
thermo
)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModels::SCOPEXiEq::~SCOPEXiEq()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
{
const volScalarField& k = turbulence_.k();
const volScalarField& epsilon = turbulence_.epsilon();
volScalarField up(sqrt((2.0/3.0)*k));
if (subGridSchelkin_)
{
up.primitiveFieldRef() += calculateSchelkinEffect(uPrimeCoef_);
}
volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
volScalarField Rl(up*l*thermo_.rhou()/thermo_.muu());
volScalarField upBySu(up/(Su_ + SuMin_));
volScalarField K(0.157*upBySu/sqrt(Rl));
volScalarField Ma(MaModel.Ma());
tmp<volScalarField> tXiEq
(
new volScalarField
(
IOobject
(
"XiEq",
epsilon.time().timeName(),
epsilon.db(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
epsilon.mesh(),
dimensionedScalar("XiEq", dimless, 0.0)
)
);
volScalarField& xieq = tXiEq.ref();
forAll(xieq, celli)
{
if (Ma[celli] > 0.01)
{
xieq[celli] =
XiEqCoef_*pow(K[celli]*Ma[celli], -XiEqExp_)*upBySu[celli];
}
}
volScalarField::Boundary& xieqBf = xieq.boundaryFieldRef();
forAll(xieq.boundaryField(), patchi)
{
scalarField& xieqp = xieqBf[patchi];
const scalarField& Kp = K.boundaryField()[patchi];
const scalarField& Map = Ma.boundaryField()[patchi];
const scalarField& upBySup = upBySu.boundaryField()[patchi];
forAll(xieqp, facei)
{
if (Ma[facei] > 0.01)
{
xieqp[facei] =
XiEqCoef_*pow(Kp[facei]*Map[facei], -XiEqExp_)
*upBySup[facei];
}
}
}
return tXiEq;
}
bool Foam::XiEqModels::SCOPEXiEq::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef_;
XiEqModelCoeffs_.lookup("XiEqExp") >> XiEqExp_;
XiEqModelCoeffs_.lookup("lCoef") >> lCoef_;
XiEqModelCoeffs_.lookup("uPrimeCoef") >> uPrimeCoef_;
XiEqModelCoeffs_.lookup("subGridSchelkin") >> subGridSchelkin_;
return true;
}
// ************************************************************************* //

View File

@ -0,0 +1,135 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::SCOPEXiEq
Description
Simple SCOPEXiEq model for XiEq based on SCOPEXiEqs correlation
with a linear correction function to give a plausible profile for XiEq.
See \link SCOPELaminarFlameSpeed.H \endlink for details on the SCOPE laminar
flame speed model.
SourceFiles
SCOPEXiEq.C
\*---------------------------------------------------------------------------*/
#ifndef SCOPEXiEq_H
#define SCOPEXiEq_H
#include "XiEqModel.H"
#include "SCOPELaminarFlameSpeed.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class SCOPEXiEq Declaration
\*---------------------------------------------------------------------------*/
class SCOPEXiEq
:
public XiEqModel
{
// Private data
// Model constant
scalar XiEqCoef_;
// Model constant
scalar XiEqExp_;
// Model constant
scalar lCoef_;
//- Minimum Su
dimensionedScalar SuMin_;
//- Schelkin effect Model constant
scalar uPrimeCoef_;
//- Use sub-grid Schelkin effect
bool subGridSchelkin_;
//- The SCOPE laminar flame speed model used to obtain the
// Marstein number. Note: the laminar flame speed need not be
// obtained form the same model.
laminarFlameSpeedModels::SCOPE MaModel;
// Private Member Functions
//- Disallow copy construct
SCOPEXiEq(const SCOPEXiEq&);
//- Disallow default bitwise assignment
void operator=(const SCOPEXiEq&);
public:
//- Runtime type information
TypeName("SCOPEXiEq");
// Constructors
//- Construct from components
SCOPEXiEq
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~SCOPEXiEq();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -41,7 +39,6 @@ namespace Foam
Foam::XiEqModel::XiEqModel
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -51,7 +48,7 @@ Foam::XiEqModel::XiEqModel
(
XiEqProperties.subDict
(
XiEqProperties.get<word>(modelType) + "Coeffs"
word(XiEqProperties.lookup("XiEqModel")) + "Coeffs"
)
),
thermo_(thermo),
@ -60,7 +57,7 @@ Foam::XiEqModel::XiEqModel
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModel::~XiEqModel()
{}
@ -70,8 +67,7 @@ Foam::XiEqModel::~XiEqModel()
bool Foam::XiEqModel::read(const dictionary& XiEqProperties)
{
XiEqModelCoeffs_ = XiEqProperties.subDict(type() + "Coeffs");
XiEqModelCoeffs_ = XiEqProperties.optionalSubDict(type() + "Coeffs");
return true;
}
@ -79,20 +75,22 @@ bool Foam::XiEqModel::read(const dictionary& XiEqProperties)
void Foam::XiEqModel::writeFields() const
{
//***HGW It is not clear why B is written here
if (Su_.mesh().foundObject<volSymmTensorField>("B"))
{
const volSymmTensorField& B =
Su_.mesh().lookupObject<volSymmTensorField>("B");
B.write();
}
}
Foam::tmp<Foam::volScalarField>Foam::XiEqModel::calculateSchelkinEffect
(
const scalar uPrimeCoef,
const scalar nrExp
) const
Foam::tmp<Foam::volScalarField>
Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const
{
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volSymmTensorField& CT = mesh.lookupObject<volSymmTensorField>("CT");
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
const volSymmTensorField& nsv =
@ -112,33 +110,30 @@ Foam::tmp<Foam::volScalarField>Foam::XiEqModel::calculateSchelkinEffect
false
),
mesh,
dimensionedScalar(Nv.dimensions(), Zero)
dimensionedScalar("zero", Nv.dimensions(), 0.0)
)
);
volScalarField& N = tN.ref();
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
tmp<volSymmTensorField> tns
volSymmTensorField ns
(
new volSymmTensorField
IOobject
(
IOobject
(
"tns",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
"tns",
mesh.time().timeName(),
mesh,
dimensionedSymmTensor(nsv.dimensions(), Zero)
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedSymmTensor
(
"zero",
nsv.dimensions(),
Zero
)
);
volSymmTensorField& ns = tns.ref();
ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0);
const volVectorField Uhat
@ -152,11 +147,13 @@ Foam::tmp<Foam::volScalarField>Foam::XiEqModel::calculateSchelkinEffect
const scalarField upLocal(uPrimeCoef*sqrt((U & CT & U)*cellWidth));
//Re use tN
N.primitiveFieldRef() = upLocal*(max(scalar(1.0), pow(nr, nrExp)) - 1.0);
const scalarField deltaUp(upLocal*(max(scalar(1.0), pow(nr, 0.5)) - 1.0));
// Re use tN
N.primitiveFieldRef() = upLocal*(max(scalar(1.0), pow(nr, 0.5)) - 1.0);
return tN;
}
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -28,6 +26,12 @@ Class
Description
Base-class for all XiEq models used by the b-XiEq combustion model.
The available models are :
\link basicXiSubXiEq.H \endlink
\link Gulder.H \endlink
\link instabilityXiEq.H \endlink
\link SCOPEBlendXiEq.H \endlink
\link SCOPEXiEq.H \endlink
SourceFiles
XiEqModel.C
@ -70,6 +74,7 @@ protected:
//- Laminar burning velocity
const volScalarField& Su_;
private:
// Private Member Functions
@ -96,14 +101,12 @@ public:
dictionary,
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
),
(
XiEqProperties,
modelType,
thermo,
turbulence,
Su
@ -117,7 +120,6 @@ public:
static autoPtr<XiEqModel> New
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -130,7 +132,6 @@ public:
XiEqModel
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -144,14 +145,13 @@ public:
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const = 0;
virtual tmp<volScalarField> XiEq() const
{
return turbulence_.muEff();
}
// Only used by sperseded modles
tmp<volScalarField> calculateSchelkinEffect
(
const scalar uPrimeCoef,
const scalar nrExp
) const;
//- Return the sub-grid Schelkin effect
tmp<volScalarField> calculateSchelkinEffect(const scalar) const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties) = 0;

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -32,41 +30,29 @@ License
Foam::autoPtr<Foam::XiEqModel> Foam::XiEqModel::New
(
const dictionary& propDict,
const word& modelName,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
{
const word modelType(propDict.get<word>(modelName));
const word modelType(propDict.lookup("XiEqModel"));
Info<< "Selecting flame-wrinkling model Eq " << modelType << endl;
Info<< "Selecting flame-wrinkling model " << modelType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
if (!cstrIter.found())
{
FatalErrorIn
(
"XiEqModel::New"
"("
" const psiuReactionThermo& thermo,"
" const word& modelType,"
" const compressible::RASModel& turbulence,"
" const volScalarField& Su"
")"
) << "Unknown XiEqModel type "
FatalErrorInFunction
<< "Unknown XiEqModel type "
<< modelType << nl << nl
<< "Valid XiEqModels are : " << endl
<< dictionaryConstructorTablePtr_->sortedToc()
<< exit(FatalError);
}
return autoPtr<XiEqModel>(cstrIter()
(
propDict, modelName, thermo, turbulence, Su)
);
return autoPtr<XiEqModel>(cstrIter()(propDict, thermo, turbulence, Su));
}

View File

@ -1,141 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "instability2XiEq.H"
#include "addToRunTimeSelectionTable.H"
#include "IFstream.H"
#include "fvCFD.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(instability2XiEq, 0);
addToRunTimeSelectionTable(XiEqModel, instability2XiEq, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::instability2XiEq::instability2XiEq
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, modelType, thermo, turbulence, Su),
saModel_
(
IOdictionary
(
IOobject
(
"combustionProperties",
Su.mesh().time().constant(),
Su.mesh(),
IOobject::MUST_READ
)
),
thermo
),
CIn_(saModel_.CIn()),
defaultCIn_(XiEqModelCoeffs_.get<scalar>("defaultCIn")),
XiEqInFade_(XiEqModelCoeffs_.get<scalar>("XiEqInFade")),
XiEqModel_
(
XiEqModel::New(XiEqModelCoeffs_, modelType, thermo, turbulence, Su)
)
{
if (CIn_ <= 0.0)
{
CIn_ = defaultCIn_;
}
}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::XiEqModels::instability2XiEq::~instability2XiEq()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::instability2XiEq::XiEq() const
{
IOdictionary combustionProperties
(
IOobject
(
"combustionProperties",
Su_.mesh().time().constant(),
Su_.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
ignition ign(combustionProperties, Su_.mesh().time(), Su_.mesh());
//const scalar ignTim = ign.sites()[0].tmIgn();
scalar curTime = Su_.mesh().time().value();
scalar deltaT = Su_.mesh().time().deltaTValue();
const scalar ignTim = curTime - deltaT - ign.sites()[0].time();
volScalarField turbXiEq(XiEqModel_->XiEq());
volScalarField XiEqIn1("XiEqIn1", 0.0*turbXiEq);
dimensionedScalar CIn("CIn", dimensionSet(0, -2, 1, 0, 0, 0, 0), CIn_);
dimensionedScalar ignTm("ignTm", dimTime, ignTim);
XiEqIn1 = exp(CIn*Su_*Su_*ignTm) - 1.0;
return
(
1.0 + sqrt(XiEqInFade_*sqr(XiEqIn1) + sqr(turbXiEq - 1.0))
);
}
bool Foam::XiEqModels::instability2XiEq::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
XiEqModelCoeffs_.readEntry("defaultCIn", defaultCIn_);
XiEqModelCoeffs_.readEntry("XiEqInFade", XiEqInFade_);
return XiEqModel_->read(XiEqModelCoeffs_);
}
// ************************************************************************* //

View File

@ -1,133 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::instability2XiEq
Description
SourceFiles
instability2XiEq.C
\*---------------------------------------------------------------------------*/
#ifndef instability2XiEq_H
#define instability2XiEq_H
#include "laminarFlameSpeed.H"
#include "SCOPELaminarFlameSpeed.H"
#include "ignitionSite.H"
#include "ignition.H"
#include "Time.H"
#include "fvMesh.H"
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class instability2 Declaration
\*---------------------------------------------------------------------------*/
class instability2XiEq
:
public XiEqModel
{
// Private data
// -Laminar burning speed
laminarFlameSpeedModels::SCOPE saModel_;
//- GIn (initial instability G)divided by Su^2. Read from fuel file
scalar CIn_;
//- Default CIn if not in fuel file
scalar defaultCIn_;
//- Determines how fast XiEqIn fades out as turbulence comes in
scalar XiEqInFade_;
//- Equilibrium Xi model due to all other effects
autoPtr<XiEqModel> XiEqModel_;
// Private Member Functions
//- Disallow copy construct
instability2XiEq(const instability2XiEq&);
//- Disallow default bitwise assignment
void operator=(const instability2XiEq&);
public:
//- Runtime type information
TypeName("instability2XiEq");
// Constructors
//- Construct from components
instability2XiEq
(
const dictionary& XiEqProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~instability2XiEq();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,82 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "instabilityXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
defineTypeNameAndDebug(instability, 0);
addToRunTimeSelectionTable(XiEqModel, instability, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiEqModels::instability::instability
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiEqModel(XiEqProperties, thermo, turbulence, Su),
XiEqIn(readScalar(XiEqModelCoeffs_.lookup("XiEqIn"))),
XiEqModel_(XiEqModel::New(XiEqModelCoeffs_, thermo, turbulence, Su))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiEqModels::instability::~instability()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::instability::XiEq() const
{
volScalarField turbXiEq(XiEqModel_->XiEq());
return XiEqIn/turbXiEq + turbXiEq;
}
bool Foam::XiEqModels::instability::read(const dictionary& XiEqProperties)
{
XiEqModel::read(XiEqProperties);
XiEqModelCoeffs_.lookup("XiEqIn") >> XiEqIn;
return XiEqModel_->read(XiEqModelCoeffs_);
}
// ************************************************************************* //

View File

@ -0,0 +1,117 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::instability
Description
This is the equilibrium level of the flame wrinkling generated by
instability. It is a constant (default 2.5). It is used in
@link XiModel.H @endlink.
SourceFiles
instability.C
\*---------------------------------------------------------------------------*/
#ifndef instability_H
#define instability_H
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiEqModels
{
/*---------------------------------------------------------------------------*\
Class instability Declaration
\*---------------------------------------------------------------------------*/
class instability
:
public XiEqModel
{
// Private data
//- Equilibrium Xi due to instability only
scalar XiEqIn;
//- Equilibrium Xi model due to all other effects
autoPtr<XiEqModel> XiEqModel_;
// Private Member Functions
//- Disallow copy construct
instability(const instability&);
//- Disallow default bitwise assignment
void operator=(const instability&);
public:
//- Runtime type information
TypeName("instability");
// Constructors
//- Construct from components
instability
(
const dictionary& XiEqProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~instability();
// Member Functions
//- Return the flame-wrinking XiEq
virtual tmp<volScalarField> XiEq() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiEqModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -45,18 +43,17 @@ namespace XiGModels
Foam::XiGModels::KTS::KTS
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiGModel(XiGProperties,modelType, thermo, turbulence, Su),
GEtaCoef_(XiGModelCoeffs_.get<scalar>("GEtaCoef"))
XiGModel(XiGProperties, thermo, turbulence, Su),
GEtaCoef_(readScalar(XiGModelCoeffs_.lookup("GEtaCoef")))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiGModels::KTS::~KTS()
{}
@ -75,20 +72,11 @@ Foam::tmp<Foam::volScalarField> Foam::XiGModels::KTS::G() const
}
Foam::tmp<Foam::volScalarField> Foam::XiGModels::KTS::Db() const
{
const objectRegistry& db = Su_.db();
const volScalarField& Db1 = db.lookupObject<volScalarField>("Db");
//return turbulence_.muEff();
return Db1;
}
bool Foam::XiGModels::KTS::read(const dictionary& XiGProperties)
{
XiGModel::read(XiGProperties);
XiGModelCoeffs_.readEntry("GEtaCoef", GEtaCoef_);
XiGModelCoeffs_.lookup("GEtaCoef") >> GEtaCoef_;
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -27,8 +25,8 @@ Class
Foam::XiGModels::KTS
Description
Simple Kolmogorov time-scale (KTS) model for the flame-wrinkling
generation rate.
Simple Kolmogorov time-scale (KTS) model for the flame-wrinling generation
rate.
SourceFiles
KTS.C
@ -81,7 +79,6 @@ public:
KTS
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -97,9 +94,6 @@ public:
//- Return the flame-wrinking generation rate
virtual tmp<volScalarField> G() const;
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiGProperties);
};

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -41,7 +39,6 @@ namespace Foam
Foam::XiGModel::XiGModel
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -51,7 +48,7 @@ Foam::XiGModel::XiGModel
(
XiGProperties.subDict
(
XiGProperties.get<word>(modelType) + "Coeffs"
word(XiGProperties.lookup("XiGModel")) + "Coeffs"
)
),
thermo_(thermo),
@ -60,7 +57,7 @@ Foam::XiGModel::XiGModel
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiGModel::~XiGModel()
{}
@ -70,7 +67,7 @@ Foam::XiGModel::~XiGModel()
bool Foam::XiGModel::read(const dictionary& XiGProperties)
{
XiGModelCoeffs_ = XiGProperties.subDict(type() + "Coeffs");
XiGModelCoeffs_ = XiGProperties.optionalSubDict(type() + "Coeffs");
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -28,6 +26,9 @@ Class
Description
Base-class for all Xi generation models used by the b-Xi combustion model.
See Technical Report SH/RE/01R for details on the PDR modelling. For details
on the use of XiGModel see \link XiModel.H \endlink. The model available is
\link instabilityG.H \endlink
SourceFiles
XiGModel.C
@ -91,14 +92,12 @@ public:
dictionary,
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
),
(
XiGProperties,
modelType,
thermo,
turbulence,
Su
@ -112,7 +111,6 @@ public:
static autoPtr<XiGModel> New
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -125,7 +123,6 @@ public:
XiGModel
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
@ -142,7 +139,10 @@ public:
virtual tmp<volScalarField> G() const = 0;
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const = 0;
virtual tmp<volScalarField> Db() const
{
return turbulence_.muEff();
}
//- Update properties from given dictionary
virtual bool read(const dictionary& XiGProperties) = 0;

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -32,40 +30,29 @@ License
Foam::autoPtr<Foam::XiGModel> Foam::XiGModel::New
(
const dictionary& propDict,
const word& modelName,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
{
const word modelType(propDict.get<word>(modelName));
const word modelType(propDict.lookup("XiGModel"));
Info<< "Selecting flame-wrinkling model for G " << modelType << endl;
Info<< "Selecting flame-wrinkling model " << modelType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
if (!cstrIter.found())
{
FatalErrorIn
(
"XiGModel::New"
"("
" const psiuReactionThermo& thermo,"
" const compressible::RASModel& turbulence,"
" const volScalarField& Su"
")"
) << "Unknown XiGModel type "
FatalErrorInFunction
<< "Unknown XiGModel type "
<< modelType << nl << nl
<< "Valid XiGModels are : " << endl
<< dictionaryConstructorTablePtr_->sortedToc()
<< exit(FatalError);
}
return autoPtr<XiGModel>(cstrIter()
(
propDict, modelName, thermo, turbulence, Su)
);
return autoPtr<XiGModel>(cstrIter()(propDict, thermo, turbulence, Su));
}

View File

@ -1,171 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "IFstream.H"
#include "instability2G.H"
#include "addToRunTimeSelectionTable.H"
#include "fvCFD.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
defineTypeNameAndDebug(instability2G, 0);
addToRunTimeSelectionTable(XiGModel, instability2G, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiGModels::instability2G::instability2G
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiGModel(XiGProperties, modelType, thermo, turbulence, Su),
saModel_
(
IOdictionary
(
IOobject
(
"combustionProperties",
Su.mesh().time().constant(),
Su.mesh(),
IOobject::MUST_READ
)
),
thermo
),
CIn_(saModel_.CIn()),
defaultCIn_(XiGModelCoeffs_.get<scalar>("defaultCIn")),
GInFade_(XiGModelCoeffs_.get<scalar>("GInFade")),
GInMult_(XiGModelCoeffs_.get<scalar>("GInMult")),
lambdaIn_("lambdaIn", XiGModelCoeffs_),
XiGModel_
(
XiGModel::New(XiGModelCoeffs_,modelType,thermo, turbulence, Su)
)
{
if (CIn_ <= 0.0)
{
CIn_ = defaultCIn_;
}
}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
Foam::XiGModels::instability2G::~instability2G()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiGModels::instability2G::G() const
{
IOdictionary combustionProperties
(
IOobject
(
"combustionProperties",
Su_.mesh().time().constant(),
Su_.mesh(),
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
ignition ign(combustionProperties, Su_.mesh().time(), Su_.mesh());
scalar curTime = Su_.mesh().time().value();
scalar deltaT = Su_.mesh().time().deltaTValue();
const scalar ignTim = curTime - deltaT - ign.sites()[0].time();
volScalarField turbXiG(XiGModel_->G());
volScalarField GIn("GIn", 0.0*turbXiG);
forAll (GIn, i)
{
GIn[i] = CIn_*Su_[i]*Su_[i]*exp(CIn_*Su_[i]*Su_[i]*ignTim)*GInMult_;
}
dimensionedScalar CIn("CIn", dimensionSet(0, -2, 1, 0, 0, 0, 0), CIn_);
dimensionedScalar ignTm("ignTm", dimTime, ignTim);
GIn = CIn*Su_*Su_*exp(CIn*Su_*Su_*ignTm)*GInMult_;
GIn *=
GIn
/
(
GIn
+ GInFade_*turbXiG
+ dimensionedScalar("GSmall", inv(dimTime), SMALL)
);
return (GIn + turbXiG);
}
Foam::tmp<Foam::volScalarField> Foam::XiGModels::instability2G::Db() const
{
const objectRegistry& db = Su_.db();
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
const volScalarField& Db1 = db.lookupObject<volScalarField>("Db");
//return turbulence_.muEff()
return Db1
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*lambdaIn_)/(mgb + 1.0/lambdaIn_);
}
bool Foam::XiGModels::instability2G::read(const dictionary& XiGProperties)
{
XiGModel::read(XiGProperties);
XiGModelCoeffs_.readEntry("defaultCIn", defaultCIn_);
XiGModelCoeffs_.readEntry("GInFade", GInFade_);
XiGModelCoeffs_.readEntry("GInMult", GInMult_);
XiGModelCoeffs_.readEntry("lambdaIn", lambdaIn_);
return true;
}
// ************************************************************************* //

View File

@ -1,141 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiGModels::instability2G
Description
SourceFiles
instability2G.C
\*---------------------------------------------------------------------------*/
#ifndef instability2G_H
#define instability2G_H
#include "laminarFlameSpeed.H"
#include "SCOPELaminarFlameSpeed.H"
#include "XiGModel.H"
#include "ignitionSite.H"
#include "ignition.H"
#include "Time.H"
#include "fvMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiGModels
{
/*---------------------------------------------------------------------------*\
Class instability2G Declaration
\*---------------------------------------------------------------------------*/
class instability2G
:
public XiGModel
{
// Private data
laminarFlameSpeedModels::SCOPE saModel_;
// GIn (inituial instability G)divided by Su^2. Read from fuel file
scalar CIn_;
//- Default CIn if not in fuel file
scalar defaultCIn_;
// Determine how fast GIn fades out as turbulence starts
scalar GInFade_;
// Set GIn large so that XiEq determines Xi value. Son increase byfactor:
scalar GInMult_;
//- instability2G length-scale
dimensionedScalar lambdaIn_;
//- Xi generation rate model due to all other processes
autoPtr<XiGModel> XiGModel_;
// Private Member Functions
//- Disallow copy construct
instability2G(const instability2G&);
//- Disallow default bitwise assignment
void operator=(const instability2G&);
public:
//- Runtime type information
TypeName("instability2G");
// Constructors
//- Construct from components
instability2G
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
);
//- Destructor
virtual ~instability2G();
// Member Functions
//- Return the flame-wrinking generation rate
virtual tmp<volScalarField> G() const;
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiGProperties);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiGModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -45,20 +43,19 @@ namespace XiGModels
Foam::XiGModels::instabilityG::instabilityG
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su
)
:
XiGModel(XiGProperties, modelType, thermo, turbulence, Su),
GIn_("GIn", XiGModelCoeffs_),
lambdaIn_("lambdaIn", XiGModelCoeffs_),
XiGModel_(XiGModel::New(XiGModelCoeffs_,modelType,thermo, turbulence, Su))
XiGModel(XiGProperties, thermo, turbulence, Su),
GIn_(XiGModelCoeffs_.lookup("GIn")),
lambdaIn_(XiGModelCoeffs_.lookup("lambdaIn")),
XiGModel_(XiGModel::New(XiGModelCoeffs_, thermo, turbulence, Su))
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiGModels::instabilityG::~instabilityG()
{}
@ -77,14 +74,11 @@ Foam::tmp<Foam::volScalarField> Foam::XiGModels::instabilityG::Db() const
{
const objectRegistry& db = Su_.db();
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
const volScalarField& Xp = db.lookupObject<volScalarField>("Xp");
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
const volScalarField& Db1 = db.lookupObject<volScalarField>("Db");
//return turbulence_.muEff()
return Db1
+ rho*Su_*(Xp*Xi - 1.0)*mgb*(0.5*lambdaIn_)/(mgb + 1.0/lambdaIn_);
return XiGModel_->Db()
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*lambdaIn_)/(mgb + 1.0/lambdaIn_);
}
@ -92,8 +86,8 @@ bool Foam::XiGModels::instabilityG::read(const dictionary& XiGProperties)
{
XiGModel::read(XiGProperties);
XiGModelCoeffs_.readEntry("GIn", GIn_);
XiGModelCoeffs_.readEntry("lambdaIn", lambdaIn_);
XiGModelCoeffs_.lookup("GIn") >> GIn_;
XiGModelCoeffs_.lookup("lambdaIn") >> lambdaIn_;
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -30,6 +28,7 @@ Description
Flame-surface instabilityG flame-wrinking generation rate coefficient model
used in \link XiModel.H \endlink.
See Technical Report SH/RE/01R for details on the PDR modelling.
SourceFiles
instabilityG.C
@ -89,7 +88,6 @@ public:
instabilityG
(
const dictionary& XiGProperties,
const word& modelType,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -53,7 +51,7 @@ Foam::XiModel::XiModel
(
XiProperties.subDict
(
XiProperties.get<word>("XiModel") + "Coeffs"
word(XiProperties.lookup("XiModel")) + "Coeffs"
)
),
thermo_(thermo),
@ -73,23 +71,11 @@ Foam::XiModel::XiModel
IOobject::AUTO_WRITE
),
b.mesh()
),
Xp_
(
IOobject
(
"Xp",
b.time().timeName(),
b.db(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
b.mesh()
)
)
{}
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiModel::~XiModel()
{}
@ -99,7 +85,7 @@ Foam::XiModel::~XiModel()
bool Foam::XiModel::read(const dictionary& XiProperties)
{
XiModelCoeffs_ = XiProperties.subDict(type() + "Coeffs");
XiModelCoeffs_ = XiProperties.optionalSubDict(type() + "Coeffs");
return true;
}

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -95,8 +93,8 @@ SourceFiles
#include "IOdictionary.H"
#include "psiuReactionThermo.H"
#include "turbulentFluidThermoModel.H"
#include "fvcDiv.H"
#include "multivariateSurfaceInterpolationScheme.H"
#include "fvcDiv.H"
#include "runTimeSelectionTables.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -127,8 +125,6 @@ protected:
//- Flame wrinking field
volScalarField Xi_;
//- Flame wrinking field for the subgrid obstacles
volScalarField Xp_;
private:
@ -217,31 +213,19 @@ public:
return Xi_;
}
//- Return the obstacle-flame-wrinking Xp
virtual const volScalarField& Xp() const
{
return Xp_;
}
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const
{
const objectRegistry& db = Su_.db();
const volScalarField& Db1 = db.lookupObject<volScalarField>("Db");
//return turbulence_.muEff();
return Db1;
return turbulence_.muEff();
}
//- Add Xi to the multivariateSurfaceInterpolationScheme table
// if required
void addXi
virtual void addXi
(
multivariateSurfaceInterpolationScheme<scalar>::fieldTable& fields
multivariateSurfaceInterpolationScheme<scalar>::fieldTable&
)
{
fields.add(Xi_);
fields.add(Xp_);
}
{}
//- Correct the flame-wrinking Xi
virtual void correct() = 0;

View File

@ -2,10 +2,8 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -40,19 +38,17 @@ Foam::autoPtr<Foam::XiModel> Foam::XiModel::New
const surfaceScalarField& phi
)
{
const word modelType(propDict.get<word>("XiModel"));
const word modelType(propDict.lookup("XiModel"));
Info<< "Selecting flame-wrinkling model " << modelType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
if (!cstrIter.found())
{
FatalErrorIn
(
"XiModel::New"
) << "Unknown XiModel type "
FatalErrorInFunction
<< "Unknown XiModel type "
<< modelType << nl << nl
<< "Valid XiModels are : " << endl
<< dictionaryConstructorTablePtr_->sortedToc()

View File

@ -0,0 +1,98 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "algebraic.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiModels
{
defineTypeNameAndDebug(algebraic, 0);
addToRunTimeSelectionTable(XiModel, algebraic, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiModels::algebraic::algebraic
(
const dictionary& XiProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su,
const volScalarField& rho,
const volScalarField& b,
const surfaceScalarField& phi
)
:
XiModel(XiProperties, thermo, turbulence, Su, rho, b, phi),
XiShapeCoef(readScalar(XiModelCoeffs_.lookup("XiShapeCoef"))),
XiEqModel_(XiEqModel::New(XiProperties, thermo, turbulence, Su)),
XiGModel_(XiGModel::New(XiProperties, thermo, turbulence, Su))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiModels::algebraic::~algebraic()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::tmp<Foam::volScalarField> Foam::XiModels::algebraic::Db() const
{
return XiGModel_->Db();
}
void Foam::XiModels::algebraic::correct()
{
volScalarField XiEqEta(XiEqModel_->XiEq());
volScalarField GEta(XiGModel_->G());
volScalarField R(GEta*XiEqEta/(XiEqEta - 0.999));
volScalarField XiEqStar(R/(R - GEta));
Xi_ == 1.0 + (1.0 + (2*XiShapeCoef)*(0.5 - b_))*(XiEqStar - 1.0);
}
bool Foam::XiModels::algebraic::read(const dictionary& XiProperties)
{
XiModel::read(XiProperties);
XiModelCoeffs_.lookup("XiShapeCoef") >> XiShapeCoef;
return true;
}
// ************************************************************************* //

View File

@ -0,0 +1,131 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiModels::algebraic
Description
Simple algebraic model for Xi based on Gulders correlation
with a linear correction function to give a plausible profile for Xi.
See report TR/HGW/10 for details on the Weller two equations model.
See \link XiModel.H \endlink for more details on flame wrinkling modelling.
SourceFiles
algebraic.C
\*---------------------------------------------------------------------------*/
#ifndef algebraic_H
#define algebraic_H
#include "XiModel.H"
#include "XiEqModel.H"
#include "XiGModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace XiModels
{
/*---------------------------------------------------------------------------*\
Class algebraic Declaration
\*---------------------------------------------------------------------------*/
class algebraic
:
public XiModel
{
// Private data
scalar XiShapeCoef;
autoPtr<XiEqModel> XiEqModel_;
autoPtr<XiGModel> XiGModel_;
// Private Member Functions
//- Disallow copy construct
algebraic(const algebraic&);
//- Disallow default bitwise assignment
void operator=(const algebraic&);
public:
//- Runtime type information
TypeName("algebraic");
// Constructors
//- Construct from components
algebraic
(
const dictionary& XiProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su,
const volScalarField& rho,
const volScalarField& b,
const surfaceScalarField& phi
);
//- Destructor
virtual ~algebraic();
// Member Functions
//- Return the flame diffusivity
virtual tmp<volScalarField> Db() const;
//- Correct the flame-wrinking Xi
virtual void correct();
//- Update properties from given dictionary
virtual bool read(const dictionary& XiProperties);
//- Write fields of the XiEq model
virtual void writeFields()
{
XiEqModel_().writeFields();
}
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace XiModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,72 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/
#include "fixed.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
namespace XiModels
{
defineTypeNameAndDebug(fixed, 0);
addToRunTimeSelectionTable(XiModel, fixed, dictionary);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::XiModels::fixed::fixed
(
const dictionary& XiProperties,
const psiuReactionThermo& thermo,
const compressible::RASModel& turbulence,
const volScalarField& Su,
const volScalarField& rho,
const volScalarField& b,
const surfaceScalarField& phi
)
:
XiModel(XiProperties, thermo, turbulence, Su, rho, b, phi)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::XiModels::fixed::~fixed()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
bool Foam::XiModels::fixed::read(const dictionary& XiProperties)
{
return XiModel::read(XiProperties);
}
// ************************************************************************* //

Some files were not shown because too many files have changed in this diff Show More