Compare commits
3 Commits
develop
...
demand-dri
| Author | SHA1 | Date | |
|---|---|---|---|
| 47062b614c | |||
| 205719d449 | |||
| 916d3b902f |
3
.gitignore
vendored
3
.gitignore
vendored
@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
# File-browser settings - anywhere
|
# File-browser settings - anywhere
|
||||||
.directory
|
.directory
|
||||||
.DS_Store # OSX app store
|
|
||||||
|
|
||||||
# Backup/recovery versions - anywhere
|
# Backup/recovery versions - anywhere
|
||||||
.#*
|
.#*
|
||||||
@ -39,8 +38,6 @@ linux*Gcc*/
|
|||||||
linux*Icc*/
|
linux*Icc*/
|
||||||
solaris*Gcc*/
|
solaris*Gcc*/
|
||||||
SunOS*Gcc*/
|
SunOS*Gcc*/
|
||||||
darwin*Clang*/
|
|
||||||
darwin*Gcc*/
|
|
||||||
platforms/
|
platforms/
|
||||||
|
|
||||||
# Top-level build directories
|
# Top-level build directories
|
||||||
|
|||||||
@ -49,10 +49,10 @@
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
Providing details of your set-up can help us identify any issues, e.g.
|
Providing details of your set-up can help us identify any issues, e.g.
|
||||||
OpenFOAM version : v2506|v2412|v2406|v2312|v2306 etc
|
OpenFOAM version : v2306|v2212|v2206|v2112|v2106 etc
|
||||||
Operating system : ubuntu|openSUSE|RedHat etc
|
Operating system : ubuntu|openSUSE|centos etc
|
||||||
Hardware info : any info that may help?
|
Hardware info : any info that may help?
|
||||||
Compiler : gcc|clang etc
|
Compiler : gcc|intel|clang etc
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- OpenFOAM version :
|
- OpenFOAM version :
|
||||||
|
|||||||
9
.gitmodules
vendored
9
.gitmodules
vendored
@ -1,8 +1,8 @@
|
|||||||
[submodule "cfmesh"]
|
[submodule "cfmesh"]
|
||||||
path = plugins/cfmesh
|
path = modules/cfmesh
|
||||||
url = https://develop.openfoam.com/Community/integration-cfmesh.git
|
url = https://develop.openfoam.com/Community/integration-cfmesh.git
|
||||||
[submodule "avalanche"]
|
[submodule "avalanche"]
|
||||||
path = plugins/avalanche
|
path = modules/avalanche
|
||||||
url = https://develop.openfoam.com/Community/avalanche.git
|
url = https://develop.openfoam.com/Community/avalanche.git
|
||||||
[submodule "adios"]
|
[submodule "adios"]
|
||||||
path = modules/adios
|
path = modules/adios
|
||||||
@ -18,8 +18,5 @@
|
|||||||
path = modules/external-solver
|
path = modules/external-solver
|
||||||
url = https://develop.openfoam.com/Modules/external-solver.git
|
url = https://develop.openfoam.com/Modules/external-solver.git
|
||||||
[submodule "turbulence-community"]
|
[submodule "turbulence-community"]
|
||||||
path = plugins/turbulence-community
|
path = modules/turbulence-community
|
||||||
url = https://gitlab.com/openfoam/community/tc-turbulence/turbulence-community.git
|
url = https://gitlab.com/openfoam/community/tc-turbulence/turbulence-community.git
|
||||||
[submodule "plugins/data-community"]
|
|
||||||
path = plugins/data-community
|
|
||||||
url = https://gitlab.com/openfoam/community/sig-data-modelling/data-community.git
|
|
||||||
|
|||||||
17
Allwmake
17
Allwmake
@ -68,34 +68,19 @@ src/Allwmake $targetType $*
|
|||||||
# OpenFOAM applications
|
# OpenFOAM applications
|
||||||
applications/Allwmake $targetType $*
|
applications/Allwmake $targetType $*
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# Additional components
|
|
||||||
|
|
||||||
|
# Additional components/modules
|
||||||
case "$FOAM_MODULE_PREFIX" in
|
case "$FOAM_MODULE_PREFIX" in
|
||||||
(false | none)
|
(false | none)
|
||||||
echo ========================================
|
echo ========================================
|
||||||
echo "OpenFOAM modules disabled (prefix=${FOAM_MODULE_PREFIX})"
|
echo "OpenFOAM modules disabled (prefix=${FOAM_MODULE_PREFIX})"
|
||||||
echo "Can be built separately:"
|
|
||||||
echo
|
|
||||||
echo " ./Allwmake-modules -prefix=..."
|
|
||||||
echo
|
|
||||||
echo ========================================
|
|
||||||
echo
|
echo
|
||||||
;;
|
;;
|
||||||
(*)
|
(*)
|
||||||
# Use wmake -all instead of Allwmake to allow for overrides
|
# Use wmake -all instead of Allwmake to allow for overrides
|
||||||
( cd "$WM_PROJECT_DIR/modules" 2>/dev/null && wmake -all )
|
( cd "$WM_PROJECT_DIR/modules" 2>/dev/null && wmake -all )
|
||||||
|
|
||||||
echo ========================================
|
|
||||||
echo "The optional plugins can be built separately:"
|
|
||||||
echo
|
|
||||||
echo " ./Allwmake-plugins -prefix=..."
|
|
||||||
echo
|
|
||||||
echo ========================================
|
|
||||||
echo
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# Count files in given directory. Ignore "Test-*" binaries.
|
# Count files in given directory. Ignore "Test-*" binaries.
|
||||||
_foamCountDirEntries()
|
_foamCountDirEntries()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,39 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
cd "${0%/*}" || exit # Run from this directory
|
|
||||||
set -- -all="${0##*/}" "$@" # Execute this instead of ./Allwmake
|
|
||||||
|
|
||||||
# Run from OPENFOAM top-level directory only
|
|
||||||
wmake -check-dir "$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
|
|
||||||
echo "Error (${0##*/}) : WM_PROJECT_DIR appears to be incorrect"
|
|
||||||
echo " Check your OpenFOAM environment and installation"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# Additional components
|
|
||||||
|
|
||||||
case "$FOAM_MODULE_PREFIX" in
|
|
||||||
(false | none)
|
|
||||||
echo ========================================
|
|
||||||
echo "OpenFOAM modules disabled (prefix=${FOAM_MODULE_PREFIX})"
|
|
||||||
echo "Can be built separately:"
|
|
||||||
echo
|
|
||||||
echo " ./Allwmake-modules -prefix=..."
|
|
||||||
echo
|
|
||||||
echo ========================================
|
|
||||||
echo
|
|
||||||
;;
|
|
||||||
(*)
|
|
||||||
# Use wmake -all instead of Allwmake to allow for overrides
|
|
||||||
( cd "$WM_PROJECT_DIR/modules" 2>/dev/null && wmake -all $* )
|
|
||||||
esac
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
cd "${0%/*}" || exit # Run from this directory
|
|
||||||
set -- -all="${0##*/}" "$@" # Execute this instead of ./Allwmake
|
|
||||||
|
|
||||||
# Run from OPENFOAM top-level directory only
|
|
||||||
wmake -check-dir "$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
|
|
||||||
echo "Error (${0##*/}) : WM_PROJECT_DIR appears to be incorrect"
|
|
||||||
echo " Check your OpenFOAM environment and installation"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
# Additional components
|
|
||||||
|
|
||||||
case "$FOAM_MODULE_PREFIX" in
|
|
||||||
(false | none)
|
|
||||||
echo ========================================
|
|
||||||
echo "OpenFOAM plugins disabled (prefix=${FOAM_MODULE_PREFIX})"
|
|
||||||
echo "Can be built separately:"
|
|
||||||
echo
|
|
||||||
echo " ./Allwmake-plugins -prefix=..."
|
|
||||||
echo
|
|
||||||
echo ========================================
|
|
||||||
echo
|
|
||||||
;;
|
|
||||||
(*)
|
|
||||||
# Use wmake -all instead of Allwmake to allow for overrides
|
|
||||||
( cd "$WM_PROJECT_DIR/plugins" 2>/dev/null && wmake -all $* )
|
|
||||||
esac
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
@ -9,7 +9,6 @@ It is likely incomplete...
|
|||||||
- Yu Ankun
|
- Yu Ankun
|
||||||
- Tetsuo Aoyagi
|
- Tetsuo Aoyagi
|
||||||
- Akira Azami
|
- Akira Azami
|
||||||
- Pete Bachant
|
|
||||||
- William Bainbridge
|
- William Bainbridge
|
||||||
- Gabriel Barajas
|
- Gabriel Barajas
|
||||||
- Kutalmis Bercin
|
- Kutalmis Bercin
|
||||||
@ -27,7 +26,6 @@ It is likely incomplete...
|
|||||||
- Bernhard Gschaider
|
- Bernhard Gschaider
|
||||||
- Andrew Heather
|
- Andrew Heather
|
||||||
- David Hill
|
- David Hill
|
||||||
- Crist<73>bal Ib<49><62>ez
|
|
||||||
- Yoshiaki Inoue
|
- Yoshiaki Inoue
|
||||||
- Mattijs Janssens
|
- Mattijs Janssens
|
||||||
- Andrew Jackson
|
- Andrew Jackson
|
||||||
@ -48,7 +46,6 @@ It is likely incomplete...
|
|||||||
- Victor Olesen
|
- Victor Olesen
|
||||||
- Evangelos Papoutsis-Kiachagias
|
- Evangelos Papoutsis-Kiachagias
|
||||||
- Juho Peltola
|
- Juho Peltola
|
||||||
- Josep Pocurull
|
|
||||||
- Johan Roenby
|
- Johan Roenby
|
||||||
- Henrik Rusche
|
- Henrik Rusche
|
||||||
- Bruno Santos
|
- Bruno Santos
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
api=2507
|
api=2309
|
||||||
patch=0
|
patch=0
|
||||||
|
|||||||
16
README.md
16
README.md
@ -40,9 +40,9 @@ Violations of the Trademark are monitored, and will be duly prosecuted.
|
|||||||
|
|
||||||
If OpenFOAM has already been compiled on your system, simply source
|
If OpenFOAM has already been compiled on your system, simply source
|
||||||
the appropriate `etc/bashrc` or `etc/cshrc` file and get started.
|
the appropriate `etc/bashrc` or `etc/cshrc` file and get started.
|
||||||
For example, for the OpenFOAM-v2506 version:
|
For example, for the OpenFOAM-v2306 version:
|
||||||
```
|
```
|
||||||
source /installation/path/OpenFOAM-v2506/etc/bashrc
|
source /installation/path/OpenFOAM-v2306/etc/bashrc
|
||||||
```
|
```
|
||||||
|
|
||||||
## Compiling OpenFOAM
|
## Compiling OpenFOAM
|
||||||
@ -127,8 +127,8 @@ These 3rd-party sources are normally located in a directory parallel
|
|||||||
to the OpenFOAM directory. For example,
|
to the OpenFOAM directory. For example,
|
||||||
```
|
```
|
||||||
/path/parent
|
/path/parent
|
||||||
|-- OpenFOAM-v2506
|
|-- OpenFOAM-v2306
|
||||||
\-- ThirdParty-v2506
|
\-- ThirdParty-v2306
|
||||||
```
|
```
|
||||||
There are, however, many cases where this simple convention is inadequate:
|
There are, however, many cases where this simple convention is inadequate:
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ There are, however, many cases where this simple convention is inadequate:
|
|||||||
operating system or cluster installation provides it)
|
operating system or cluster installation provides it)
|
||||||
|
|
||||||
* When we have changed the OpenFOAM directory name to some arbitrary
|
* When we have changed the OpenFOAM directory name to some arbitrary
|
||||||
directory name, e.g. openfoam-sandbox2412, etc..
|
directory name, e.g. openfoam-sandbox2306, etc..
|
||||||
|
|
||||||
* When we would like any additional 3rd party software to be located
|
* When we would like any additional 3rd party software to be located
|
||||||
inside of the OpenFOAM directory to ensure that the installation is
|
inside of the OpenFOAM directory to ensure that the installation is
|
||||||
@ -156,9 +156,9 @@ when locating the ThirdParty directory with the following precedence:
|
|||||||
2. PREFIX/ThirdParty-VERSION
|
2. PREFIX/ThirdParty-VERSION
|
||||||
* this corresponds to the traditional approach
|
* this corresponds to the traditional approach
|
||||||
3. PREFIX/ThirdParty-vAPI
|
3. PREFIX/ThirdParty-vAPI
|
||||||
* allows for an updated value of VERSION, *eg*, `v2506-myCustom`,
|
* allows for an updated value of VERSION, *eg*, `v2306-myCustom`,
|
||||||
without requiring a renamed ThirdParty. The API value would still
|
without requiring a renamed ThirdParty. The API value would still
|
||||||
be `2412` and the original `ThirdParty-v2506/` would be found.
|
be `2306` and the original `ThirdParty-v2306/` would be found.
|
||||||
4. PREFIX/ThirdParty-API
|
4. PREFIX/ThirdParty-API
|
||||||
* same as the previous example, but using an unadorned API value.
|
* same as the previous example, but using an unadorned API value.
|
||||||
5. PREFIX/ThirdParty-common
|
5. PREFIX/ThirdParty-common
|
||||||
@ -213,4 +213,4 @@ ThirdParty directory will contain either an `Allwmake` file or a
|
|||||||
- [Governance](http://www.openfoam.com/governance/), [Governance Projects](https://www.openfoam.com/governance/projects)
|
- [Governance](http://www.openfoam.com/governance/), [Governance Projects](https://www.openfoam.com/governance/projects)
|
||||||
- [Contacting OpenCFD](http://www.openfoam.com/contact/)
|
- [Contacting OpenCFD](http://www.openfoam.com/contact/)
|
||||||
|
|
||||||
Copyright 2016-2024 OpenCFD Ltd
|
Copyright 2016-2022 OpenCFD Ltd
|
||||||
|
|||||||
@ -30,6 +30,6 @@ volVectorField U
|
|||||||
|
|
||||||
#include "createPhi.H"
|
#include "createPhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
#include "readTurbulenceProperties.H"
|
#include "readTurbulenceProperties.H"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
const dictionary& potentialFlow
|
const dictionary& potentialFlow
|
||||||
(
|
(
|
||||||
mesh.solutionDict().subDict("potentialFlow")
|
mesh.solution().solutionDict("potentialFlow")
|
||||||
);
|
);
|
||||||
|
|
||||||
const int nNonOrthCorr
|
const int nNonOrthCorr
|
||||||
|
|||||||
@ -13,13 +13,7 @@ volVectorField U
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Initialise the velocity internal field to zero
|
// Initialise the velocity internal field to zero
|
||||||
// Note: explicitly bypass evaluation of contraint patch overrides
|
U = dimensionedVector(U.dimensions(), Zero);
|
||||||
// (e.g. swirlFanVelocity might lookup phi,rho)
|
|
||||||
//U = Zero;
|
|
||||||
{
|
|
||||||
U.internalFieldRef() = Zero;
|
|
||||||
U.boundaryFieldRef() = Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
surfaceScalarField phi
|
surfaceScalarField phi
|
||||||
(
|
(
|
||||||
@ -119,6 +113,6 @@ setRefCell
|
|||||||
PhiRefCell,
|
PhiRefCell,
|
||||||
PhiRefValue
|
PhiRefValue
|
||||||
);
|
);
|
||||||
mesh.setFluxRequired(Phi.name());
|
mesh.schemes().setFluxRequired(Phi.name());
|
||||||
|
|
||||||
#include "createMRF.H"
|
#include "createMRF.H"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
const dictionary& potentialFlow
|
const dictionary& potentialFlow
|
||||||
(
|
(
|
||||||
mesh.solutionDict().subDict("potentialFlow")
|
mesh.solution().solutionDict("potentialFlow")
|
||||||
);
|
);
|
||||||
|
|
||||||
const int nNonOrthCorr
|
const int nNonOrthCorr
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2023 OpenCFD Ltd.
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -94,14 +93,24 @@ Foam::PDRDragModels::basic::~basic()
|
|||||||
|
|
||||||
Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
|
Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
|
||||||
{
|
{
|
||||||
auto tDragDcu = volSymmTensorField::New
|
tmp<volSymmTensorField> tDragDcu
|
||||||
(
|
(
|
||||||
"tDragDcu",
|
new volSymmTensorField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
U_.mesh(),
|
IOobject
|
||||||
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
|
(
|
||||||
|
"tDragDcu",
|
||||||
|
U_.mesh().time().constant(),
|
||||||
|
U_.mesh(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
U_.mesh(),
|
||||||
|
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& DragDcu = tDragDcu.ref();
|
|
||||||
|
volSymmTensorField& DragDcu = tDragDcu.ref();
|
||||||
|
|
||||||
if (on_)
|
if (on_)
|
||||||
{
|
{
|
||||||
@ -118,14 +127,24 @@ Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basic::Dcu() const
|
|||||||
|
|
||||||
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const
|
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basic::Gk() const
|
||||||
{
|
{
|
||||||
auto tGk = volScalarField::New
|
tmp<volScalarField> tGk
|
||||||
(
|
(
|
||||||
"tGk",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
U_.mesh(),
|
IOobject
|
||||||
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
(
|
||||||
|
"tGk",
|
||||||
|
U_.mesh().time().constant(),
|
||||||
|
U_.mesh(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
U_.mesh(),
|
||||||
|
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& Gk = tGk.ref();
|
|
||||||
|
volScalarField& Gk = tGk.ref();
|
||||||
|
|
||||||
if (on_)
|
if (on_)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -69,8 +69,7 @@ Foam::XiEqModels::Gulder::~Gulder()
|
|||||||
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::Gulder::XiEq() const
|
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::Gulder::XiEq() const
|
||||||
{
|
{
|
||||||
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
|
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
|
||||||
const tmp<volScalarField> tepsilon(turbulence_.epsilon());
|
const volScalarField& epsilon = turbulence_.epsilon();
|
||||||
const volScalarField& epsilon = tepsilon();
|
|
||||||
|
|
||||||
if (subGridSchelkin_)
|
if (subGridSchelkin_)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2023 OpenCFD Ltd.
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -76,10 +75,8 @@ Foam::XiEqModels::SCOPEXiEq::~SCOPEXiEq()
|
|||||||
|
|
||||||
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
|
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
|
||||||
{
|
{
|
||||||
const tmp<volScalarField> tk(turbulence_.k());
|
const volScalarField& k = turbulence_.k();
|
||||||
const volScalarField& k = tk();
|
const volScalarField& epsilon = turbulence_.epsilon();
|
||||||
const tmp<volScalarField> tepsilon(turbulence_.epsilon());
|
|
||||||
const volScalarField& epsilon = tepsilon();
|
|
||||||
|
|
||||||
volScalarField up(sqrt((2.0/3.0)*k));
|
volScalarField up(sqrt((2.0/3.0)*k));
|
||||||
if (subGridSchelkin_)
|
if (subGridSchelkin_)
|
||||||
@ -94,14 +91,23 @@ Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
|
|||||||
volScalarField K(0.157*upBySu/sqrt(Rl));
|
volScalarField K(0.157*upBySu/sqrt(Rl));
|
||||||
volScalarField Ma(MaModel.Ma());
|
volScalarField Ma(MaModel.Ma());
|
||||||
|
|
||||||
auto tXiEq = volScalarField::New
|
tmp<volScalarField> tXiEq
|
||||||
(
|
(
|
||||||
"XiEq",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
epsilon.mesh(),
|
IOobject
|
||||||
dimensionedScalar(dimless, Zero)
|
(
|
||||||
|
"XiEq",
|
||||||
|
epsilon.time().timeName(),
|
||||||
|
epsilon.db(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
epsilon.mesh(),
|
||||||
|
dimensionedScalar(dimless, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& xieq = tXiEq.ref();
|
volScalarField& xieq = tXiEq.ref();
|
||||||
|
|
||||||
forAll(xieq, celli)
|
forAll(xieq, celli)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -78,10 +78,11 @@ bool Foam::XiEqModel::read(const dictionary& XiEqProperties)
|
|||||||
void Foam::XiEqModel::writeFields() const
|
void Foam::XiEqModel::writeFields() const
|
||||||
{
|
{
|
||||||
//***HGW It is not clear why B is written here
|
//***HGW It is not clear why B is written here
|
||||||
const auto* B = Su_.mesh().cfindObject<volSymmTensorField>("B");
|
if (Su_.mesh().foundObject<volSymmTensorField>("B"))
|
||||||
if (B)
|
|
||||||
{
|
{
|
||||||
B->write();
|
const volSymmTensorField& B =
|
||||||
|
Su_.mesh().lookupObject<volSymmTensorField>("B");
|
||||||
|
B.write();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,26 +98,39 @@ Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const
|
|||||||
const volSymmTensorField& nsv =
|
const volSymmTensorField& nsv =
|
||||||
mesh.lookupObject<volSymmTensorField>("nsv");
|
mesh.lookupObject<volSymmTensorField>("nsv");
|
||||||
|
|
||||||
auto tN = volScalarField::New
|
tmp<volScalarField> tN
|
||||||
(
|
(
|
||||||
"tN",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh,
|
IOobject
|
||||||
dimensionedScalar(Nv.dimensions(), Zero)
|
(
|
||||||
|
"tN",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
IOobject::NO_REGISTER
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar(Nv.dimensions(), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& N = tN.ref();
|
volScalarField& N = tN.ref();
|
||||||
|
|
||||||
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
|
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
|
||||||
|
|
||||||
auto tns = volSymmTensorField::New
|
volSymmTensorField ns
|
||||||
(
|
(
|
||||||
"tns",
|
IOobject
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
|
"tns",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedSymmTensor(nsv.dimensions(), Zero)
|
dimensionedSymmTensor(nsv.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
auto& ns = tns.ref();
|
|
||||||
|
|
||||||
ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0);
|
ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0);
|
||||||
|
|
||||||
const volVectorField Uhat
|
const volVectorField Uhat
|
||||||
|
|||||||
@ -66,8 +66,7 @@ Foam::XiGModels::KTS::~KTS()
|
|||||||
Foam::tmp<Foam::volScalarField> Foam::XiGModels::KTS::G() const
|
Foam::tmp<Foam::volScalarField> Foam::XiGModels::KTS::G() const
|
||||||
{
|
{
|
||||||
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
|
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
|
||||||
const tmp<volScalarField> tepsilon(turbulence_.epsilon());
|
const volScalarField& epsilon = turbulence_.epsilon();
|
||||||
const volScalarField& epsilon = tepsilon();
|
|
||||||
|
|
||||||
volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon))));
|
volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon))));
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
|||||||
mesh,
|
mesh,
|
||||||
fields,
|
fields,
|
||||||
phi,
|
phi,
|
||||||
mesh.divScheme("div(phi,ft_b_ha_hau)")
|
mesh.schemes().div("div(phi,ft_b_ha_hau)")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ volVectorField U
|
|||||||
|
|
||||||
#include "compressibleCreatePhi.H"
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::RASModel> turbulence
|
autoPtr<compressible::RASModel> turbulence
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2017 OpenFOAM Foundation
|
Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
Copyright (C) 2023 OpenCFD Ltd.
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -256,14 +255,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Su0pTphi
|
|||||||
scalar phi
|
scalar phi
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
auto tSu0 = volScalarField::New
|
tmp<volScalarField> tSu0
|
||||||
(
|
(
|
||||||
"Su0",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
p.mesh(),
|
IOobject
|
||||||
dimensionedScalar(dimVelocity, Zero)
|
(
|
||||||
|
"Su0",
|
||||||
|
p.time().timeName(),
|
||||||
|
p.db(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
p.mesh(),
|
||||||
|
dimensionedScalar(dimVelocity, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& Su0 = tSu0.ref();
|
|
||||||
|
volScalarField& Su0 = tSu0.ref();
|
||||||
|
|
||||||
forAll(Su0, celli)
|
forAll(Su0, celli)
|
||||||
{
|
{
|
||||||
@ -295,14 +304,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Su0pTphi
|
|||||||
const volScalarField& phi
|
const volScalarField& phi
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
auto tSu0 = volScalarField::New
|
tmp<volScalarField> tSu0
|
||||||
(
|
(
|
||||||
"Su0",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
p.mesh(),
|
IOobject
|
||||||
dimensionedScalar(dimVelocity, Zero)
|
(
|
||||||
|
"Su0",
|
||||||
|
p.time().timeName(),
|
||||||
|
p.db(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
p.mesh(),
|
||||||
|
dimensionedScalar(dimVelocity, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& Su0 = tSu0.ref();
|
|
||||||
|
volScalarField& Su0 = tSu0.ref();
|
||||||
|
|
||||||
forAll(Su0, celli)
|
forAll(Su0, celli)
|
||||||
{
|
{
|
||||||
@ -339,14 +358,24 @@ Foam::tmp<Foam::volScalarField> Foam::laminarFlameSpeedModels::SCOPE::Ma
|
|||||||
const volScalarField& phi
|
const volScalarField& phi
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
auto tMa = volScalarField::New
|
tmp<volScalarField> tMa
|
||||||
(
|
(
|
||||||
"Ma",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
phi.mesh(),
|
IOobject
|
||||||
dimensionedScalar(dimless, Zero)
|
(
|
||||||
|
"Ma",
|
||||||
|
phi.time().timeName(),
|
||||||
|
phi.db(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
phi.mesh(),
|
||||||
|
dimensionedScalar(dimless, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& ma = tMa.ref();
|
|
||||||
|
volScalarField& ma = tMa.ref();
|
||||||
|
|
||||||
forAll(ma, celli)
|
forAll(ma, celli)
|
||||||
{
|
{
|
||||||
@ -389,12 +418,21 @@ Foam::laminarFlameSpeedModels::SCOPE::Ma() const
|
|||||||
{
|
{
|
||||||
const fvMesh& mesh = psiuReactionThermo_.p().mesh();
|
const fvMesh& mesh = psiuReactionThermo_.p().mesh();
|
||||||
|
|
||||||
return volScalarField::New
|
return tmp<volScalarField>
|
||||||
(
|
(
|
||||||
"Ma",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh,
|
IOobject
|
||||||
dimensionedScalar("Ma", dimless, Ma(equivalenceRatio_))
|
(
|
||||||
|
"Ma",
|
||||||
|
mesh.time().timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar("Ma", dimless, Ma(equivalenceRatio_))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,13 +36,11 @@ Description
|
|||||||
if (adjustTimeStep)
|
if (adjustTimeStep)
|
||||||
{
|
{
|
||||||
scalar maxDeltaTFact = maxCo/(CoNum + StCoNum + SMALL);
|
scalar maxDeltaTFact = maxCo/(CoNum + StCoNum + SMALL);
|
||||||
|
scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
|
||||||
const scalar deltaTFact =
|
|
||||||
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
|
|
||||||
|
|
||||||
runTime.setDeltaT
|
runTime.setDeltaT
|
||||||
(
|
(
|
||||||
Foam::min
|
min
|
||||||
(
|
(
|
||||||
deltaTFact*runTime.deltaTValue(),
|
deltaTFact*runTime.deltaTValue(),
|
||||||
maxDeltaT
|
maxDeltaT
|
||||||
|
|||||||
@ -44,7 +44,7 @@ volVectorField U
|
|||||||
|
|
||||||
#include "compressibleCreatePhi.H"
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -5,7 +5,7 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
|||||||
mesh,
|
mesh,
|
||||||
fields,
|
fields,
|
||||||
phi,
|
phi,
|
||||||
mesh.divScheme("div(phi,ft_b_ha_hau)")
|
mesh.schemes().div("div(phi,ft_b_ha_hau)")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
if (adjustTimeStep)
|
if (adjustTimeStep)
|
||||||
{
|
{
|
||||||
runTime.setDeltaT(Foam::min(dtChem, maxDeltaT));
|
runTime.setDeltaT(min(dtChem, maxDeltaT));
|
||||||
|
|
||||||
Info<< "deltaT = " << runTime.deltaTValue() << endl;
|
Info<< "deltaT = " << runTime.deltaTValue() << endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
|||||||
mesh,
|
mesh,
|
||||||
fields,
|
fields,
|
||||||
phi,
|
phi,
|
||||||
mesh.divScheme("div(phi,Yi_h)")
|
mesh.schemes().div("div(phi,Yi_h)")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
{
|
{
|
||||||
|
|||||||
@ -89,7 +89,7 @@ volScalarField p_rgh
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
#include "phrghEqn.H"
|
#include "phrghEqn.H"
|
||||||
|
|
||||||
|
|||||||
@ -10,8 +10,7 @@ if (pimple.dict().getOrDefault("hydrostaticInitialization", false))
|
|||||||
"0",
|
"0",
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::MUST_READ,
|
IOobject::MUST_READ,
|
||||||
IOobject::NO_WRITE,
|
IOobject::NO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh
|
mesh
|
||||||
)
|
)
|
||||||
|
|||||||
@ -54,18 +54,9 @@ if (adjustTimeStep)
|
|||||||
|
|
||||||
runTime.setDeltaT
|
runTime.setDeltaT
|
||||||
(
|
(
|
||||||
Foam::min
|
min
|
||||||
(
|
(
|
||||||
dt0
|
dt0*min(min(TFactorFluid, min(TFactorFilm, TFactorSolid)), 1.2),
|
||||||
* Foam::min
|
|
||||||
(
|
|
||||||
Foam::min
|
|
||||||
(
|
|
||||||
TFactorFluid,
|
|
||||||
Foam::min(TFactorFilm, TFactorSolid)
|
|
||||||
),
|
|
||||||
1.2
|
|
||||||
),
|
|
||||||
maxDeltaT
|
maxDeltaT
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -21,11 +21,6 @@
|
|||||||
+ fvOptions(rho, he)
|
+ fvOptions(rho, he)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (MRF.active())
|
|
||||||
{
|
|
||||||
EEqn += fvc::div(MRF.phi(), p);
|
|
||||||
}
|
|
||||||
|
|
||||||
EEqn.relax();
|
EEqn.relax();
|
||||||
|
|
||||||
fvOptions.constrain(EEqn);
|
fvOptions.constrain(EEqn);
|
||||||
|
|||||||
@ -5,7 +5,7 @@ tmp<fv::convectionScheme<scalar>> mvConvection
|
|||||||
mesh,
|
mesh,
|
||||||
fields,
|
fields,
|
||||||
phi,
|
phi,
|
||||||
mesh.divScheme("div(phi,Yi_h)")
|
mesh.schemes().div("div(phi,Yi_h)")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ volScalarField& p = thermo.p();
|
|||||||
|
|
||||||
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info << "Creating turbulence model.\n" << nl;
|
Info << "Creating turbulence model.\n" << nl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -48,7 +48,7 @@ volScalarField& p = thermo.p();
|
|||||||
|
|
||||||
#include "compressibleCreatePhi.H"
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info << "Creating turbulence model.\n" << nl;
|
Info << "Creating turbulence model.\n" << nl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -49,7 +49,7 @@ volScalarField& p = thermo.p();
|
|||||||
|
|
||||||
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
|
|
||||||
Info << "Creating turbulence model.\n" << nl;
|
Info << "Creating turbulence model.\n" << nl;
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2013-2016 OpenFOAM Foundation
|
Copyright (C) 2013-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2020,2025 OpenCFD Ltd.
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -57,23 +57,11 @@ License
|
|||||||
// (relative to reference value)
|
// (relative to reference value)
|
||||||
scalar alphaY(pimpleDict.getOrDefault<scalar>("alphaY", 1.0));
|
scalar alphaY(pimpleDict.getOrDefault<scalar>("alphaY", 1.0));
|
||||||
|
|
||||||
|
|
||||||
// The old reciprocal time scale field, with any damping factor
|
|
||||||
tmp<volScalarField> rDeltaT0_damped;
|
|
||||||
|
|
||||||
// Calculate damped value before applying any other changes
|
|
||||||
if
|
|
||||||
(
|
|
||||||
rDeltaTDampingCoeff < 1
|
|
||||||
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Info<< "Time scales min/max:" << endl;
|
Info<< "Time scales min/max:" << endl;
|
||||||
|
|
||||||
|
// Cache old reciprocal time scale field
|
||||||
|
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
|
||||||
|
|
||||||
// Flow time scale
|
// Flow time scale
|
||||||
{
|
{
|
||||||
rDeltaT.ref() =
|
rDeltaT.ref() =
|
||||||
@ -82,14 +70,12 @@ License
|
|||||||
/((2*maxCo)*mesh.V()*rho())
|
/((2*maxCo)*mesh.V()*rho())
|
||||||
);
|
);
|
||||||
|
|
||||||
// Limit the largest time scale (=> smallest reciprocal time)
|
// Limit the largest time scale
|
||||||
rDeltaT.clamp_min(1/maxDeltaT);
|
rDeltaT.max(1/maxDeltaT);
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< " Flow = "
|
Info<< " Flow = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< 1/gMax(rDeltaT.primitiveField()) << ", "
|
||||||
|
<< 1/gMin(rDeltaT.primitiveField()) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Heat release rate time scale
|
// Heat release rate time scale
|
||||||
@ -100,13 +86,11 @@ License
|
|||||||
mag(Qdot)/(alphaTemp*rho*thermo.Cp()*T)
|
mag(Qdot)/(alphaTemp*rho*thermo.Cp()*T)
|
||||||
);
|
);
|
||||||
|
|
||||||
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
|
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaTT.field());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< " Temperature = "
|
Info<< " Temperature = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< 1/(gMax(rDeltaTT.field()) + VSMALL) << ", "
|
||||||
|
<< 1/(gMin(rDeltaTT.field()) + VSMALL) << endl;
|
||||||
|
|
||||||
|
rDeltaT.ref() = max(rDeltaT(), rDeltaTT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reaction rate time scale
|
// Reaction rate time scale
|
||||||
@ -154,13 +138,11 @@ License
|
|||||||
|
|
||||||
if (foundY)
|
if (foundY)
|
||||||
{
|
{
|
||||||
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTY);
|
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaTY.field());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< " Composition = "
|
Info<< " Composition = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< 1/(gMax(rDeltaTY.field()) + VSMALL) << ", "
|
||||||
|
<< 1/(gMin(rDeltaTY.field()) + VSMALL) << endl;
|
||||||
|
|
||||||
|
rDeltaT.ref() = max(rDeltaT(), rDeltaTY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -179,22 +161,28 @@ License
|
|||||||
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Limit rate of change of time scale (=> smallest reciprocal time)
|
// Limit rate of change of time scale
|
||||||
// - reduce as much as required
|
// - reduce as much as required
|
||||||
// - only increase at a fraction of old time scale
|
// - only increase at a fraction of old time scale
|
||||||
if (rDeltaT0_damped)
|
if
|
||||||
|
(
|
||||||
|
rDeltaTDampingCoeff < 1
|
||||||
|
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
|
||||||
|
)
|
||||||
{
|
{
|
||||||
rDeltaT.clamp_min(rDeltaT0_damped());
|
rDeltaT = max
|
||||||
|
(
|
||||||
|
rDeltaT,
|
||||||
|
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update tho boundary values of the reciprocal time-step
|
// Update tho boundary values of the reciprocal time-step
|
||||||
rDeltaT.correctBoundaryConditions();
|
rDeltaT.correctBoundaryConditions();
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaT.field());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< " Overall = "
|
Info<< " Overall = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< 1/gMax(rDeltaT.primitiveField())
|
||||||
|
<< ", " << 1/gMin(rDeltaT.primitiveField()) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||||
Copyright (C) 2020,2025 OpenCFD Ltd.
|
Copyright (C) 2020 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -106,7 +106,7 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
|
|||||||
if (!this->readValueEntry(dict))
|
if (!this->readValueEntry(dict))
|
||||||
{
|
{
|
||||||
// Fallback: set to the internal field
|
// Fallback: set to the internal field
|
||||||
this->extrapolateInternal();
|
fvPatchField<scalar>::patchInternalField(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
refValue() = *this;
|
refValue() = *this;
|
||||||
|
|||||||
@ -110,6 +110,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new smoluchowskiJumpTFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
smoluchowskiJumpTFvPatchScalarField
|
smoluchowskiJumpTFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -117,22 +126,18 @@ public:
|
|||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<scalar>> clone() const
|
virtual tmp<fvPatchScalarField> clone
|
||||||
{
|
|
||||||
return fvPatchField<scalar>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<scalar>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<scalar>::Clone(*this, iF);
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new smoluchowskiJumpTFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Mapping functions
|
// Mapping functions
|
||||||
|
|
||||||
//- Map (and resize as needed) from self given a mapping object
|
//- Map (and resize as needed) from self given a mapping object
|
||||||
|
|||||||
@ -118,6 +118,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchVectorField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new maxwellSlipUFvPatchVectorField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
maxwellSlipUFvPatchVectorField
|
maxwellSlipUFvPatchVectorField
|
||||||
(
|
(
|
||||||
@ -125,19 +134,16 @@ public:
|
|||||||
const DimensionedField<vector, volMesh>&
|
const DimensionedField<vector, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<vector>> clone() const
|
virtual tmp<fvPatchVectorField> clone
|
||||||
{
|
|
||||||
return fvPatchField<vector>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<vector>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<vector, volMesh>& iF
|
const DimensionedField<vector, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<vector>::Clone(*this, iF);
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new maxwellSlipUFvPatchVectorField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -135,6 +135,15 @@ public:
|
|||||||
const fixedRhoFvPatchScalarField&
|
const fixedRhoFvPatchScalarField&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedRhoFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
fixedRhoFvPatchScalarField
|
fixedRhoFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -142,19 +151,16 @@ public:
|
|||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<scalar>> clone() const
|
virtual tmp<fvPatchScalarField> clone
|
||||||
{
|
|
||||||
return fvPatchField<scalar>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<scalar>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<scalar>::Clone(*this, iF);
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new fixedRhoFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
volScalarField& p = thermo.p();
|
volScalarField& p = thermo.p();
|
||||||
const volScalarField& T = thermo.T();
|
const volScalarField& T = thermo.T();
|
||||||
const volScalarField& psi = thermo.psi();
|
const volScalarField& psi = thermo.psi();
|
||||||
|
const volScalarField& mu = thermo.mu();
|
||||||
|
|
||||||
bool inviscid(true);
|
bool inviscid(true);
|
||||||
if (max(thermo.mu().cref().primitiveField()) > 0.0)
|
if (max(mu.primitiveField()) > 0.0)
|
||||||
{
|
{
|
||||||
inviscid = false;
|
inviscid = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
word fluxScheme("Kurganov");
|
word fluxScheme("Kurganov");
|
||||||
if (mesh.schemesDict().readIfPresent("fluxScheme", fluxScheme))
|
if (mesh.schemes().dict().readIfPresent("fluxScheme", fluxScheme))
|
||||||
{
|
{
|
||||||
if ((fluxScheme == "Tadmor") || (fluxScheme == "Kurganov"))
|
if ((fluxScheme == "Tadmor") || (fluxScheme == "Kurganov"))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -23,11 +23,7 @@
|
|||||||
|
|
||||||
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
||||||
|
|
||||||
{
|
Info<< "Flow time scale min/max = "
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
|
|
||||||
Info<< "Flow time scale min/max = "
|
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,7 +79,7 @@ autoPtr<compressible::turbulenceModel> turbulence
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
#include "createMRF.H"
|
#include "createMRF.H"
|
||||||
|
|
||||||
|
|||||||
@ -20,11 +20,6 @@
|
|||||||
fvOptions(rho, he)
|
fvOptions(rho, he)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (MRF.active())
|
|
||||||
{
|
|
||||||
EEqn += fvc::div(MRF.phi(), p);
|
|
||||||
}
|
|
||||||
|
|
||||||
EEqn.relax();
|
EEqn.relax();
|
||||||
|
|
||||||
fvOptions.constrain(EEqn);
|
fvOptions.constrain(EEqn);
|
||||||
|
|||||||
@ -42,7 +42,7 @@ volVectorField U
|
|||||||
|
|
||||||
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
pressureControl pressureControl(p, rho, pimple.dict(), false);
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -56,7 +56,7 @@ if (mesh.changing())
|
|||||||
pcorrTypes
|
pcorrTypes
|
||||||
);
|
);
|
||||||
|
|
||||||
mesh.setFluxRequired(pcorr.name());
|
mesh.schemes().setFluxRequired(pcorr.name());
|
||||||
|
|
||||||
{
|
{
|
||||||
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
||||||
|
|||||||
@ -44,7 +44,7 @@ pressureControl pressureControl(p, rho, pimple.dict(), false);
|
|||||||
const dimensionedScalar rhoMax("rhoMax", dimDensity, GREAT, pimple.dict());
|
const dimensionedScalar rhoMax("rhoMax", dimDensity, GREAT, pimple.dict());
|
||||||
const dimensionedScalar rhoMin("rhoMin", dimDensity, Zero, pimple.dict());
|
const dimensionedScalar rhoMin("rhoMin", dimDensity, Zero, pimple.dict());
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
#include "createDpdt.H"
|
#include "createDpdt.H"
|
||||||
|
|
||||||
|
|||||||
@ -52,26 +52,18 @@
|
|||||||
// Update the boundary values of the reciprocal time-step
|
// Update the boundary values of the reciprocal time-step
|
||||||
rDeltaT.correctBoundaryConditions();
|
rDeltaT.correctBoundaryConditions();
|
||||||
|
|
||||||
{
|
Info<< "Flow time scale min/max = "
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
|
|
||||||
Info<< "Flow time scale min/max = "
|
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rDeltaTSmoothingCoeff < 1.0)
|
if (rDeltaTSmoothingCoeff < 1.0)
|
||||||
{
|
{
|
||||||
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
Info<< "Smoothed flow time scale min/max = "
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
|
|
||||||
Info<< "Smoothed flow time scale min/max = "
|
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Limit rate of change of time scale
|
// Limit rate of change of time scale
|
||||||
// - reduce as much as required
|
// - reduce as much as required
|
||||||
@ -86,10 +78,8 @@
|
|||||||
rDeltaT0
|
rDeltaT0
|
||||||
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
|
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< "Damped flow time scale min/max = "
|
Info<< "Damped flow time scale min/max = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,11 +14,6 @@
|
|||||||
fvOptions(rho, he)
|
fvOptions(rho, he)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (MRF.active())
|
|
||||||
{
|
|
||||||
EEqn += fvc::div(MRF.phi(), p);
|
|
||||||
}
|
|
||||||
|
|
||||||
EEqn.relax();
|
EEqn.relax();
|
||||||
|
|
||||||
fvOptions.constrain(EEqn);
|
fvOptions.constrain(EEqn);
|
||||||
|
|||||||
@ -40,7 +40,7 @@ volVectorField U
|
|||||||
|
|
||||||
pressureControl pressureControl(p, rho, simple.dict());
|
pressureControl pressureControl(p, rho, simple.dict());
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -40,7 +40,7 @@ volVectorField U
|
|||||||
|
|
||||||
pressureControl pressureControl(p, rho, simple.dict());
|
pressureControl pressureControl(p, rho, simple.dict());
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -9,11 +9,6 @@
|
|||||||
fvOptions(rho, e)
|
fvOptions(rho, e)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (MRF.active())
|
|
||||||
{
|
|
||||||
EEqn += fvc::div(MRF.phi(), p);
|
|
||||||
}
|
|
||||||
|
|
||||||
EEqn.relax();
|
EEqn.relax();
|
||||||
|
|
||||||
fvOptions.constrain(EEqn);
|
fvOptions.constrain(EEqn);
|
||||||
|
|||||||
@ -36,7 +36,7 @@ volVectorField U
|
|||||||
|
|
||||||
#include "compressibleCreatePhi.H"
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating turbulence model\n" << endl;
|
Info<< "Creating turbulence model\n" << endl;
|
||||||
autoPtr<compressible::turbulenceModel> turbulence
|
autoPtr<compressible::turbulenceModel> turbulence
|
||||||
|
|||||||
@ -46,4 +46,4 @@ volScalarField rho
|
|||||||
|
|
||||||
#include "compressibleCreatePhi.H"
|
#include "compressibleCreatePhi.H"
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|||||||
@ -114,5 +114,5 @@ label pRefCell = 0;
|
|||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, piso.dict(), pRefCell, pRefValue);
|
setRefCell(p, piso.dict(), pRefCell, pRefValue);
|
||||||
|
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
mesh.setFluxRequired(pB.name());
|
mesh.schemes().setFluxRequired(pB.name());
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
const dictionary& Bpiso = mesh.solutionDict().subDict("BPISO");
|
const dictionary& Bpiso = mesh.solution().solutionDict("BPISO");
|
||||||
|
|
||||||
const int nBcorr = Bpiso.getOrDefault<int>("nCorrectors", 1);
|
const int nBcorr = Bpiso.getOrDefault<int>("nCorrectors", 1);
|
||||||
|
|||||||
@ -155,4 +155,4 @@
|
|||||||
dimensionedScalar("one", dimless, 0.01)
|
dimensionedScalar("one", dimless, 0.01)
|
||||||
);
|
);
|
||||||
|
|
||||||
aMesh.setFluxRequired("h");
|
aMesh.schemes().setFluxRequired("h");
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
loopControl iters(runTime, aMesh.solutionDict(), "solution");
|
loopControl iters(runTime, aMesh.solution().solutionDict(), "solution");
|
||||||
|
|||||||
@ -119,7 +119,7 @@ if (p_rgh.needReference())
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
#include "createMRF.H"
|
#include "createMRF.H"
|
||||||
#include "createIncompressibleRadiationModel.H"
|
#include "createIncompressibleRadiationModel.H"
|
||||||
|
|||||||
@ -119,7 +119,7 @@ if (p_rgh.needReference())
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
#include "createMRF.H"
|
#include "createMRF.H"
|
||||||
#include "createIncompressibleRadiationModel.H"
|
#include "createIncompressibleRadiationModel.H"
|
||||||
|
|||||||
@ -74,7 +74,7 @@ volScalarField p_rgh
|
|||||||
// Force p_rgh to be consistent with p
|
// Force p_rgh to be consistent with p
|
||||||
p_rgh = p - rho*gh;
|
p_rgh = p - rho*gh;
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
|
|||||||
@ -56,7 +56,7 @@ if (mesh.changing())
|
|||||||
pcorrTypes
|
pcorrTypes
|
||||||
);
|
);
|
||||||
|
|
||||||
mesh.setFluxRequired(pcorr.name());
|
mesh.schemes().setFluxRequired(pcorr.name());
|
||||||
|
|
||||||
{
|
{
|
||||||
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
||||||
|
|||||||
@ -71,7 +71,7 @@ volScalarField p_rgh
|
|||||||
// Force p_rgh to be consistent with p
|
// Force p_rgh to be consistent with p
|
||||||
p_rgh = p - rho*gh;
|
p_rgh = p - rho*gh;
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
|
|||||||
@ -81,7 +81,7 @@ setRefCell
|
|||||||
pRefValue
|
pRefValue
|
||||||
);
|
);
|
||||||
|
|
||||||
mesh.setFluxRequired(p_rgh.name());
|
mesh.schemes().setFluxRequired(p_rgh.name());
|
||||||
|
|
||||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||||
dimensionedScalar totalVolume = sum(mesh.V());
|
dimensionedScalar totalVolume = sum(mesh.V());
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
scalar CoNum = -GREAT;
|
scalar CoNum = -GREAT;
|
||||||
forAll(fluidRegions, regionI)
|
forAll(fluidRegions, regionI)
|
||||||
{
|
{
|
||||||
CoNum = Foam::max
|
CoNum = max
|
||||||
(
|
(
|
||||||
compressibleCourantNo
|
compressibleCourantNo
|
||||||
(
|
(
|
||||||
|
|||||||
@ -174,7 +174,7 @@ forAll(fluidRegions, i)
|
|||||||
// Force p_rgh to be consistent with p
|
// Force p_rgh to be consistent with p
|
||||||
p_rghFluid[i] = thermoFluid[i].p() - rhoFluid[i]*ghFluid[i];
|
p_rghFluid[i] = thermoFluid[i].p() - rhoFluid[i]*ghFluid[i];
|
||||||
|
|
||||||
fluidRegions[i].setFluxRequired(p_rghFluid[i].name());
|
fluidRegions[i].schemes().setFluxRequired(p_rghFluid[i].name());
|
||||||
|
|
||||||
radiation.set
|
radiation.set
|
||||||
(
|
(
|
||||||
@ -185,7 +185,7 @@ forAll(fluidRegions, i)
|
|||||||
initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value();
|
initialMassFluid[i] = fvc::domainIntegrate(rhoFluid[i]).value();
|
||||||
|
|
||||||
const dictionary& simpleDict =
|
const dictionary& simpleDict =
|
||||||
fluidRegions[i].solutionDict().subDict("SIMPLE");
|
fluidRegions[i].solution().solutionDict("SIMPLE");
|
||||||
|
|
||||||
setRefCell
|
setRefCell
|
||||||
(
|
(
|
||||||
|
|||||||
@ -78,8 +78,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
rho = thermo.rho();
|
rho = thermo.rho();
|
||||||
|
rho = max(rho, rhoMin[i]);
|
||||||
rho.clamp_range(rhoMin[i], rhoMax[i]);
|
rho = min(rho, rhoMax[i]);
|
||||||
rho.relax();
|
rho.relax();
|
||||||
|
|
||||||
Info<< "Min/max rho:" << min(rho).value() << ' '
|
Info<< "Min/max rho:" << min(rho).value() << ' '
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dictionary& simple = fluidRegions[i].solutionDict().subDict("SIMPLE");
|
const dictionary& simple =
|
||||||
|
fluidRegions[i].solution().solutionDict("SIMPLE");
|
||||||
|
|
||||||
const int nNonOrthCorr =
|
const int nNonOrthCorr =
|
||||||
simple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
simple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dictionary& simple = mesh.solutionDict().subDict("SIMPLE");
|
const dictionary& simple =
|
||||||
|
mesh.solution().solutionDict("SIMPLE");
|
||||||
|
|
||||||
const int nNonOrthCorr =
|
const int nNonOrthCorr =
|
||||||
simple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
simple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
||||||
|
|||||||
@ -387,18 +387,15 @@ updateCoeffs()
|
|||||||
{
|
{
|
||||||
scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad());
|
scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad());
|
||||||
|
|
||||||
auto limits = gMinMax(Tp);
|
Info<< "T solid : " << nl << endl;
|
||||||
auto avg = gAverage(Tp);
|
|
||||||
|
|
||||||
Info<< "T solid : " << nl << endl;
|
Info
|
||||||
|
<< " heat transfer rate from solid:" << Q
|
||||||
Info
|
<< " walltemperature "
|
||||||
<< " heat transfer rate from solid:" << Q
|
<< " min:" << gMin(Tp)
|
||||||
<< " walltemperature "
|
<< " max:" << gMax(Tp)
|
||||||
<< " min:" << limits.min()
|
<< " avg:" << gAverage(Tp) << nl
|
||||||
<< " max:" << limits.max()
|
<< endl;
|
||||||
<< " avg:" << avg << nl
|
|
||||||
<< endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (regionType_ == fluid)
|
else if (regionType_ == fluid)
|
||||||
@ -448,16 +445,10 @@ updateCoeffs()
|
|||||||
scalarField qLiq((Tp - Tc)*KdeltaLiq);
|
scalarField qLiq((Tp - Tc)*KdeltaLiq);
|
||||||
scalarField qVap((Tp - Tv.patchInternalField())*KdeltaVap);
|
scalarField qVap((Tp - Tv.patchInternalField())*KdeltaVap);
|
||||||
|
|
||||||
auto infoT = gMinMax(Tp);
|
|
||||||
auto avgT = gAverage(Tp);
|
|
||||||
|
|
||||||
auto infoLiq = gMinMax(qLiq);
|
|
||||||
auto infoVap = gMinMax(qVap);
|
|
||||||
|
|
||||||
Info<< "T flow : " << nl << endl;
|
Info<< "T flow : " << nl << endl;
|
||||||
|
|
||||||
Info<< " qLiq: " << infoLiq.min() << " - " << infoLiq.max() << nl
|
Info<< " qLiq: " << gMin(qLiq) << " - " << gMax(qLiq) << endl;
|
||||||
<< " qVap: " << infoVap.min() << " - " << infoVap.max() << nl;
|
Info<< " qVap: " << gMin(qVap) << " - " << gMax(qVap) << endl;
|
||||||
|
|
||||||
scalar QLiq = gSum(qLiq*patch().magSf());
|
scalar QLiq = gSum(qLiq*patch().magSf());
|
||||||
scalar QVap = gSum(qVap*patch().magSf());
|
scalar QVap = gSum(qVap*patch().magSf());
|
||||||
@ -466,9 +457,9 @@ updateCoeffs()
|
|||||||
Info<< " Heat transfer to Vap: " << QVap << endl;
|
Info<< " Heat transfer to Vap: " << QVap << endl;
|
||||||
|
|
||||||
Info<< " walltemperature "
|
Info<< " walltemperature "
|
||||||
<< " min:" << infoT.min()
|
<< " min:" << gMin(Tp)
|
||||||
<< " max:" << infoT.max()
|
<< " max:" << gMax(Tp)
|
||||||
<< " avg:" << avgT
|
<< " avg:" << gAverage(Tp)
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -196,6 +196,18 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
*this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
|
turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -203,19 +215,20 @@ public:
|
|||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<scalar>> clone() const
|
virtual tmp<fvPatchScalarField> clone
|
||||||
{
|
|
||||||
return fvPatchField<scalar>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<scalar>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<scalar>::Clone(*this, iF);
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
|
||||||
|
(
|
||||||
|
*this,
|
||||||
|
iF
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
scalar regionCoNum =
|
CoNum =
|
||||||
0.5*gMax
|
0.5*gMax
|
||||||
(
|
(
|
||||||
sumPhi/fluidRegions[regioni].V().field()
|
sumPhi/fluidRegions[regioni].V().field()
|
||||||
@ -41,9 +41,9 @@
|
|||||||
(
|
(
|
||||||
fvc::surfaceSum(mag(phi1 - phi2))().primitiveField()
|
fvc::surfaceSum(mag(phi1 - phi2))().primitiveField()
|
||||||
/ fluidRegions[regioni].V().field()
|
/ fluidRegions[regioni].V().field()
|
||||||
)*runTime.deltaTValue();
|
)*runTime.deltaTValue(),
|
||||||
|
|
||||||
CoNum = Foam::max(CoNum, Foam::max(regionCoNum, UrCoNum));
|
CoNum = max(UrCoNum, CoNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -278,14 +278,14 @@ forAll(fluidRegions, i)
|
|||||||
phaseSystemFluid[i].phase1().thermo().p()
|
phaseSystemFluid[i].phase1().thermo().p()
|
||||||
- phaseSystemFluid[i].phase1().thermo().rho()*ghFluid[i];
|
- phaseSystemFluid[i].phase1().thermo().rho()*ghFluid[i];
|
||||||
|
|
||||||
fluidRegions[i].setFluxRequired(p_rghFluid[i].name());
|
fluidRegions[i].schemes().setFluxRequired(p_rghFluid[i].name());
|
||||||
|
|
||||||
Info<< " Correcting initialMassFluid\n" << endl;
|
Info<< " Correcting initialMassFluid\n" << endl;
|
||||||
initialMassFluid[i] =
|
initialMassFluid[i] =
|
||||||
fvc::domainIntegrate(phaseSystemFluid[i].rho()).value();
|
fvc::domainIntegrate(phaseSystemFluid[i].rho()).value();
|
||||||
|
|
||||||
const dictionary& pimpleDict =
|
const dictionary& pimpleDict =
|
||||||
fluidRegions[i].solutionDict().subDict("PIMPLE");
|
fluidRegions[i].solution().solutionDict("PIMPLE");
|
||||||
|
|
||||||
pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]);
|
pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]);
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dictionary& pimpleDict = mesh.solutionDict().subDict("PIMPLE");
|
const dictionary& pimpleDict =
|
||||||
|
mesh.solution().solutionDict("PIMPLE");
|
||||||
|
|
||||||
Switch faceMomentum
|
Switch faceMomentum
|
||||||
(
|
(
|
||||||
|
|||||||
@ -8,13 +8,11 @@
|
|||||||
|
|
||||||
volVectorField& U1 = phase1.URef();
|
volVectorField& U1 = phase1.URef();
|
||||||
surfaceScalarField& phi1 = phase1.phiRef();
|
surfaceScalarField& phi1 = phase1.phiRef();
|
||||||
const tmp<surfaceScalarField> talphaPhi1 = phase1.alphaPhi();
|
const surfaceScalarField& alphaPhi1 = phase1.alphaPhi();
|
||||||
const auto& alphaPhi1 = talphaPhi1();
|
|
||||||
|
|
||||||
volVectorField& U2 = phase2.URef();
|
volVectorField& U2 = phase2.URef();
|
||||||
surfaceScalarField& phi2 = phase2.phiRef();
|
surfaceScalarField& phi2 = phase2.phiRef();
|
||||||
const tmp<surfaceScalarField> talphaPhi2 = phase2.alphaPhi();
|
const surfaceScalarField& alphaPhi2 = phase2.alphaPhi();
|
||||||
const auto& alphaPhi2 = talphaPhi2();
|
|
||||||
|
|
||||||
surfaceScalarField& phi = fluid.phi();
|
surfaceScalarField& phi = fluid.phi();
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ if (Y.size())
|
|||||||
mesh,
|
mesh,
|
||||||
fields,
|
fields,
|
||||||
phi,
|
phi,
|
||||||
mesh.divScheme("div(phi,Yi_h)")
|
mesh.schemes().div("div(phi,Yi_h)")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
forAll(fluidRegions, regioni)
|
forAll(fluidRegions, regioni)
|
||||||
{
|
{
|
||||||
CoNum = Foam::max
|
CoNum = max
|
||||||
(
|
(
|
||||||
compressibleCourantNo
|
compressibleCourantNo
|
||||||
(
|
(
|
||||||
@ -17,7 +17,7 @@
|
|||||||
/*
|
/*
|
||||||
forAll(porousFluidRegions, porousi)
|
forAll(porousFluidRegions, porousi)
|
||||||
{
|
{
|
||||||
CoNum = Foam::max
|
CoNum = max
|
||||||
(
|
(
|
||||||
compressibleCourantNo
|
compressibleCourantNo
|
||||||
(
|
(
|
||||||
|
|||||||
@ -189,7 +189,7 @@ forAll(fluidRegions, i)
|
|||||||
// Force p_rgh to be consistent with p
|
// Force p_rgh to be consistent with p
|
||||||
p_rghFluid[i] = thermoFluid[i].p() - rhoFluid[i]*ghFluid[i];
|
p_rghFluid[i] = thermoFluid[i].p() - rhoFluid[i]*ghFluid[i];
|
||||||
|
|
||||||
fluidRegions[i].setFluxRequired(p_rghFluid[i].name());
|
fluidRegions[i].schemes().setFluxRequired(p_rghFluid[i].name());
|
||||||
|
|
||||||
Info<< " Adding to radiationFluid\n" << endl;
|
Info<< " Adding to radiationFluid\n" << endl;
|
||||||
radiation.set
|
radiation.set
|
||||||
@ -260,7 +260,8 @@ forAll(fluidRegions, i)
|
|||||||
);
|
);
|
||||||
|
|
||||||
const dictionary& pimpleDict =
|
const dictionary& pimpleDict =
|
||||||
fluidRegions[i].solutionDict().subDict("PIMPLE");
|
fluidRegions[i].solution().solutionDict("PIMPLE");
|
||||||
|
|
||||||
pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]);
|
pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]);
|
||||||
|
|
||||||
rhoMaxFluid.set
|
rhoMaxFluid.set
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dictionary& pimple = mesh.solutionDict().subDict("PIMPLE");
|
const dictionary& pimple =
|
||||||
|
mesh.solution().solutionDict("PIMPLE");
|
||||||
|
|
||||||
const int nCorr =
|
const int nCorr =
|
||||||
pimple.getOrDefault<int>("nCorrectors", 1);
|
pimple.getOrDefault<int>("nCorrectors", 1);
|
||||||
|
|||||||
@ -47,10 +47,10 @@ if (adjustTimeStep)
|
|||||||
|
|
||||||
runTime.setDeltaT
|
runTime.setDeltaT
|
||||||
(
|
(
|
||||||
Foam::min
|
min
|
||||||
(
|
(
|
||||||
Foam::min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(),
|
min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(),
|
||||||
Foam::min(runTime.deltaTValue(), maxDeltaT)
|
min(runTime.deltaTValue(), maxDeltaT)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
Info<< "deltaT = " << runTime.deltaTValue() << endl;
|
Info<< "deltaT = " << runTime.deltaTValue() << endl;
|
||||||
|
|||||||
@ -48,14 +48,18 @@ if (adjustTimeStep)
|
|||||||
scalar maxDeltaTFluid = maxCo/(CoNum + SMALL);
|
scalar maxDeltaTFluid = maxCo/(CoNum + SMALL);
|
||||||
scalar maxDeltaTSolid = maxDi/(DiNum + SMALL);
|
scalar maxDeltaTSolid = maxDi/(DiNum + SMALL);
|
||||||
|
|
||||||
const scalar deltaTFluid =
|
scalar deltaTFluid =
|
||||||
Foam::min(Foam::min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid), 1.2);
|
min
|
||||||
|
(
|
||||||
|
min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid),
|
||||||
|
1.2
|
||||||
|
);
|
||||||
|
|
||||||
runTime.setDeltaT
|
runTime.setDeltaT
|
||||||
(
|
(
|
||||||
Foam::min
|
min
|
||||||
(
|
(
|
||||||
Foam::min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(),
|
min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(),
|
||||||
maxDeltaT
|
maxDeltaT
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const dictionary& pimple = mesh.solutionDict().subDict("PIMPLE");
|
const dictionary& pimple =
|
||||||
|
mesh.solution().solutionDict("PIMPLE");
|
||||||
|
|
||||||
int nNonOrthCorr =
|
int nNonOrthCorr =
|
||||||
pimple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
pimple.getOrDefault<int>("nNonOrthogonalCorrectors", 0);
|
||||||
|
|||||||
@ -22,7 +22,7 @@ forAll(solidRegions, i)
|
|||||||
tmp<volScalarField> trho = thermo.rho();
|
tmp<volScalarField> trho = thermo.rho();
|
||||||
const volScalarField& rho = trho();
|
const volScalarField& rho = trho();
|
||||||
|
|
||||||
DiNum = Foam::max
|
DiNum = max
|
||||||
(
|
(
|
||||||
solidRegionDiffNo
|
solidRegionDiffNo
|
||||||
(
|
(
|
||||||
|
|||||||
@ -92,21 +92,19 @@ else
|
|||||||
|
|
||||||
// Consider mesh flux to correct for mesh deformation
|
// Consider mesh flux to correct for mesh deformation
|
||||||
bool meshFluxCorr(false);
|
bool meshFluxCorr(false);
|
||||||
if (mesh.solutionDict().found("SIMPLE"))
|
|
||||||
{
|
{
|
||||||
meshFluxCorr =
|
const dictionary& solutionDict = mesh.solution().solutionDict();
|
||||||
mesh.solutionDict().subDict("SIMPLE").getOrDefault<bool>
|
|
||||||
(
|
const dictionary* subdict = nullptr;
|
||||||
"meshFluxCorrection", false
|
|
||||||
);
|
if
|
||||||
}
|
(
|
||||||
else if (mesh.solutionDict().found("PIMPLE"))
|
((subdict = solutionDict.findDict("SIMPLE")) != nullptr)
|
||||||
{
|
|| ((subdict = solutionDict.findDict("PIMPLE")) != nullptr)
|
||||||
meshFluxCorr =
|
)
|
||||||
mesh.solutionDict().subDict("PIMPLE").getOrDefault<bool>
|
{
|
||||||
(
|
meshFluxCorr = subdict->getOrDefault("meshFluxCorrection", false);
|
||||||
"meshFluxCorrection", false
|
}
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "createRadiationModel.H"
|
#include "createRadiationModel.H"
|
||||||
|
|||||||
@ -17,7 +17,7 @@ scalar DiNum = -GREAT;
|
|||||||
tmp<volScalarField> trho = thermo.rho();
|
tmp<volScalarField> trho = thermo.rho();
|
||||||
const volScalarField& rho = trho();
|
const volScalarField& rho = trho();
|
||||||
|
|
||||||
DiNum = Foam::max
|
DiNum = max
|
||||||
(
|
(
|
||||||
solidRegionDiffNo
|
solidRegionDiffNo
|
||||||
(
|
(
|
||||||
|
|||||||
@ -68,7 +68,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Info<< "\nEvolving thermodynamics\n" << endl;
|
Info<< "\nEvolving thermodynamics\n" << endl;
|
||||||
|
|
||||||
if (mesh.solutionDict().found("SIMPLE"))
|
if (mesh.solution().solutionDict().found("SIMPLE"))
|
||||||
{
|
{
|
||||||
simpleControl simple(mesh);
|
simpleControl simple(mesh);
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Info<< "\nEvolving thermodynamics\n" << endl;
|
Info<< "\nEvolving thermodynamics\n" << endl;
|
||||||
|
|
||||||
if (mesh.solutionDict().found("SIMPLE"))
|
if (mesh.solution().solutionDict().found("SIMPLE"))
|
||||||
{
|
{
|
||||||
simpleControl simple(mesh);
|
simpleControl simple(mesh);
|
||||||
|
|
||||||
|
|||||||
@ -43,8 +43,6 @@ Description
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#include "postProcess.H"
|
|
||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
#include "createMesh.H"
|
#include "createMesh.H"
|
||||||
@ -66,13 +64,13 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
// Solve all primal equations
|
// Solve all primal equations
|
||||||
om.solvePrimalEquations();
|
om.solvePrimalEquations();
|
||||||
|
|
||||||
// Clear sensitivities
|
|
||||||
om.clearSensitivities();
|
|
||||||
|
|
||||||
// Solve all adjoint equations
|
|
||||||
om.solveAdjointEquations();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update primal-based quantities of the adjoint solvers
|
||||||
|
om.updatePrimalBasedQuantities();
|
||||||
|
|
||||||
|
// Solve all adjoint equations
|
||||||
|
om.solveAdjointEquations();
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< "End\n" << endl;
|
Info<< "End\n" << endl;
|
||||||
|
|||||||
@ -85,6 +85,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new adjointOutletPressureFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
adjointOutletPressureFvPatchScalarField
|
adjointOutletPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -92,19 +101,16 @@ public:
|
|||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<scalar>> clone() const
|
virtual tmp<fvPatchScalarField> clone
|
||||||
{
|
|
||||||
return fvPatchField<scalar>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<scalar>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<scalar>::Clone(*this, iF);
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new adjointOutletPressureFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -85,6 +85,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchVectorField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new adjointOutletVelocityFvPatchVectorField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
adjointOutletVelocityFvPatchVectorField
|
adjointOutletVelocityFvPatchVectorField
|
||||||
(
|
(
|
||||||
@ -92,19 +101,16 @@ public:
|
|||||||
const DimensionedField<vector, volMesh>&
|
const DimensionedField<vector, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Return a clone
|
//- Construct and return a clone setting internal field reference
|
||||||
virtual tmp<fvPatchField<vector>> clone() const
|
virtual tmp<fvPatchVectorField> clone
|
||||||
{
|
|
||||||
return fvPatchField<vector>::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Clone with an internal field reference
|
|
||||||
virtual tmp<fvPatchField<vector>> clone
|
|
||||||
(
|
(
|
||||||
const DimensionedField<vector, volMesh>& iF
|
const DimensionedField<vector, volMesh>& iF
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
return fvPatchField<vector>::Clone(*this, iF);
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new adjointOutletVelocityFvPatchVectorField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -60,10 +60,13 @@ template<class Type>
|
|||||||
void zeroCells
|
void zeroCells
|
||||||
(
|
(
|
||||||
GeometricField<Type, fvPatchField, volMesh>& vf,
|
GeometricField<Type, fvPatchField, volMesh>& vf,
|
||||||
const labelUList& cells
|
const labelList& cells
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UIndirectList<Type>(vf.primitiveField(), cells) = Zero;
|
forAll(cells, i)
|
||||||
|
{
|
||||||
|
vf[cells[i]] = Zero;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -103,7 +106,7 @@ int main(int argc, char *argv[])
|
|||||||
// mesh.relaxationFactor("alpha")
|
// mesh.relaxationFactor("alpha")
|
||||||
// *(lambda*max(Ua & U, zeroSensitivity) - alpha);
|
// *(lambda*max(Ua & U, zeroSensitivity) - alpha);
|
||||||
alpha +=
|
alpha +=
|
||||||
mesh.fieldRelaxationFactor("alpha")
|
mesh.solution().fieldRelaxationFactor("alpha")
|
||||||
*(min(max(alpha + lambda*(Ua & U), zeroAlpha), alphaMax) - alpha);
|
*(min(max(alpha + lambda*(Ua & U), zeroAlpha), alphaMax) - alpha);
|
||||||
|
|
||||||
zeroCells(alpha, inletCells);
|
zeroCells(alpha, inletCells);
|
||||||
|
|||||||
@ -32,7 +32,7 @@ volVectorField U
|
|||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, simple.dict(), pRefCell, pRefValue);
|
setRefCell(p, simple.dict(), pRefCell, pRefValue);
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
|
|
||||||
Info<< "Reading field pa\n" << endl;
|
Info<< "Reading field pa\n" << endl;
|
||||||
@ -75,7 +75,7 @@ setRefCell
|
|||||||
paRefCell,
|
paRefCell,
|
||||||
paRefValue
|
paRefValue
|
||||||
);
|
);
|
||||||
mesh.setFluxRequired(pa.name());
|
mesh.schemes().setFluxRequired(pa.name());
|
||||||
|
|
||||||
|
|
||||||
singlePhaseTransportModel laminarTransport(U, phi);
|
singlePhaseTransportModel laminarTransport(U, phi);
|
||||||
@ -103,8 +103,8 @@ dimensionedScalar alphaMax
|
|||||||
laminarTransport
|
laminarTransport
|
||||||
);
|
);
|
||||||
|
|
||||||
const labelUList& inletCells = mesh.boundary()["inlet"].faceCells();
|
const labelList& inletCells = mesh.boundary()["inlet"].faceCells();
|
||||||
//const labelUList& outletCells = mesh.boundary()["outlet"].faceCells();
|
//const labelList& outletCells = mesh.boundary()["outlet"].faceCells();
|
||||||
|
|
||||||
volScalarField alpha
|
volScalarField alpha
|
||||||
(
|
(
|
||||||
|
|||||||
@ -54,5 +54,11 @@ volVectorField U
|
|||||||
|
|
||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
|
setRefCell
|
||||||
mesh.setFluxRequired(p.name());
|
(
|
||||||
|
p,
|
||||||
|
mesh.solution().solutionDict("PISO"),
|
||||||
|
pRefCell,
|
||||||
|
pRefValue
|
||||||
|
);
|
||||||
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|||||||
@ -36,5 +36,11 @@ singlePhaseTransportModel fluid(U, phi);
|
|||||||
|
|
||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
|
setRefCell
|
||||||
mesh.setFluxRequired(p.name());
|
(
|
||||||
|
p,
|
||||||
|
mesh.solution().solutionDict("PISO"),
|
||||||
|
pRefCell,
|
||||||
|
pRefValue
|
||||||
|
);
|
||||||
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|||||||
@ -43,7 +43,7 @@ surfaceScalarField phi
|
|||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
Info<< "Creating SRF model\n" << endl;
|
Info<< "Creating SRF model\n" << endl;
|
||||||
autoPtr<SRF::SRFModel> SRF
|
autoPtr<SRF::SRFModel> SRF
|
||||||
|
|||||||
@ -34,7 +34,7 @@ volVectorField U
|
|||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
|
|
||||||
singlePhaseTransportModel laminarTransport(U, phi);
|
singlePhaseTransportModel laminarTransport(U, phi);
|
||||||
|
|||||||
@ -33,12 +33,7 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
{
|
{
|
||||||
const DimensionedField<scalar, volMesh> contErr
|
volScalarField contErr(interpolatedCells*cellMask*fvc::div(phi));
|
||||||
(
|
|
||||||
interpolatedCells.internalField()
|
|
||||||
*cellMask.internalField()
|
|
||||||
*fvc::div(phi)().internalField()
|
|
||||||
);
|
|
||||||
|
|
||||||
scalar sumLocalContErr = runTime.deltaTValue()*
|
scalar sumLocalContErr = runTime.deltaTValue()*
|
||||||
mag(contErr)().weightedAverage(mesh.V()).value();
|
mag(contErr)().weightedAverage(mesh.V()).value();
|
||||||
|
|||||||
@ -55,7 +55,7 @@ if (mesh.changing())
|
|||||||
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
dimensionedScalar rAUf("rAUf", dimTime, 1.0);
|
||||||
|
|
||||||
const cellCellStencilObject& overlap = Stencil::New(mesh);
|
const cellCellStencilObject& overlap = Stencil::New(mesh);
|
||||||
const labelUList& cellTypes = overlap.cellTypes();
|
const labelList& cellTypes = overlap.cellTypes();
|
||||||
const labelIOList& zoneIDs = overlap.zoneID();
|
const labelIOList& zoneIDs = overlap.zoneID();
|
||||||
|
|
||||||
while (pimple.correctNonOrthogonal())
|
while (pimple.correctNonOrthogonal())
|
||||||
|
|||||||
@ -32,7 +32,7 @@ volVectorField U
|
|||||||
label pRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
setRefCell(p, pimple.dict(), pRefCell, pRefValue);
|
||||||
mesh.setFluxRequired(p.name());
|
mesh.schemes().setFluxRequired(p.name());
|
||||||
|
|
||||||
|
|
||||||
//- Overset specific
|
//- Overset specific
|
||||||
|
|||||||
@ -36,26 +36,18 @@
|
|||||||
// Update the boundary values of the reciprocal time-step
|
// Update the boundary values of the reciprocal time-step
|
||||||
rDeltaT.correctBoundaryConditions();
|
rDeltaT.correctBoundaryConditions();
|
||||||
|
|
||||||
{
|
Info<< "Flow time scale min/max = "
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
|
|
||||||
Info<< "Flow time scale min/max = "
|
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rDeltaTSmoothingCoeff < 1.0)
|
if (rDeltaTSmoothingCoeff < 1.0)
|
||||||
{
|
{
|
||||||
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
Info<< "Smoothed flow time scale min/max = "
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
|
|
||||||
Info<< "Smoothed flow time scale min/max = "
|
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Limit rate of change of time scale
|
// Limit rate of change of time scale
|
||||||
// - reduce as much as required
|
// - reduce as much as required
|
||||||
@ -70,10 +62,8 @@
|
|||||||
rDeltaT0
|
rDeltaT0
|
||||||
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
|
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
|
||||||
|
|
||||||
auto limits = gMinMax(rDeltaT.primitiveField());
|
|
||||||
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
|
|
||||||
|
|
||||||
Info<< "Damped flow time scale min/max = "
|
Info<< "Damped flow time scale min/max = "
|
||||||
<< limits.min() << ", " << limits.max() << endl;
|
<< gMin(1/rDeltaT.primitiveField())
|
||||||
|
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user