Compare commits
4 Commits
feature-fv
...
develop.mo
| Author | SHA1 | Date | |
|---|---|---|---|
| 8c9b0d9f1d | |||
| aad9dff0fb | |||
| 3154b7766d | |||
| 60840eb031 |
@ -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 : v2412|v2406|v2312|v2306|v2212 etc
|
OpenFOAM version : v2312|v2306|v2212|v2206|v2112 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,37 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Run from OPENFOAM top-level directory only
|
|
||||||
cd "${0%/*}" || exit
|
|
||||||
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 -no-recursion "$@" || \
|
|
||||||
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,37 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Run from OPENFOAM top-level directory only
|
|
||||||
cd "${0%/*}" || exit
|
|
||||||
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 -no-recursion "$@" || \
|
|
||||||
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=2412
|
api=2310
|
||||||
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-v2412 version:
|
For example, for the OpenFOAM-v2312 version:
|
||||||
```
|
```
|
||||||
source /installation/path/OpenFOAM-v2412/etc/bashrc
|
source /installation/path/OpenFOAM-v2312/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-v2412
|
|-- OpenFOAM-v2312
|
||||||
\-- ThirdParty-v2412
|
\-- ThirdParty-v2312
|
||||||
```
|
```
|
||||||
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-sandbox2312, 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*, `v2412-myCustom`,
|
* allows for an updated value of VERSION, *eg*, `v2312-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-v2412/` would be found.
|
be `2312` and the original `ThirdParty-v2312/` 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-2023 OpenCFD Ltd
|
||||||
|
|||||||
@ -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))));
|
||||||
|
|
||||||
|
|||||||
@ -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_))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -5,17 +5,13 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
|
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
|
||||||
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
|
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
|
||||||
-I$(LIB_SRC)/transportModels \
|
-I$(LIB_SRC)/transportModels \
|
||||||
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
|
||||||
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
|
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lfvOptions \
|
-lfvOptions \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-lsampling \
|
-lsampling \
|
||||||
-ldynamicMesh \
|
|
||||||
-ldynamicFvMesh \
|
|
||||||
-lturbulenceModels \
|
-lturbulenceModels \
|
||||||
-lincompressibleTurbulenceModels \
|
-lincompressibleTurbulenceModels \
|
||||||
-lincompressibleTransportModels \
|
-lincompressibleTransportModels \
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -64,7 +64,6 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "fvCFD.H"
|
#include "fvCFD.H"
|
||||||
#include "dynamicFvMesh.H"
|
|
||||||
#include "singlePhaseTransportModel.H"
|
#include "singlePhaseTransportModel.H"
|
||||||
#include "turbulentTransportModel.H"
|
#include "turbulentTransportModel.H"
|
||||||
#include "simpleControl.H"
|
#include "simpleControl.H"
|
||||||
@ -84,7 +83,7 @@ int main(int argc, char *argv[])
|
|||||||
#include "addCheckCaseOptions.H"
|
#include "addCheckCaseOptions.H"
|
||||||
#include "setRootCaseLists.H"
|
#include "setRootCaseLists.H"
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
#include "createDynamicFvMesh.H"
|
#include "createMesh.H"
|
||||||
#include "createControl.H"
|
#include "createControl.H"
|
||||||
#include "createFields.H"
|
#include "createFields.H"
|
||||||
#include "initContinuityErrs.H"
|
#include "initContinuityErrs.H"
|
||||||
@ -99,14 +98,6 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||||
|
|
||||||
// Do any mesh changes
|
|
||||||
mesh.controlledUpdate();
|
|
||||||
|
|
||||||
if (mesh.changing())
|
|
||||||
{
|
|
||||||
MRF.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Pressure-velocity SIMPLE corrector
|
// --- Pressure-velocity SIMPLE corrector
|
||||||
{
|
{
|
||||||
#include "UEqn.H"
|
#include "UEqn.H"
|
||||||
|
|||||||
@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -74,11 +74,8 @@ Foam::compressibleInterPhaseTransportModel::compressibleInterPhaseTransportModel
|
|||||||
const volScalarField& alpha1(mixture_.alpha1());
|
const volScalarField& alpha1(mixture_.alpha1());
|
||||||
const volScalarField& alpha2(mixture_.alpha2());
|
const volScalarField& alpha2(mixture_.alpha2());
|
||||||
|
|
||||||
const tmp<volScalarField> trho1 = mixture_.thermo1().rho();
|
const volScalarField& rho1 = mixture_.thermo1().rho();
|
||||||
const tmp<volScalarField> trho2 = mixture_.thermo2().rho();
|
const volScalarField& rho2 = mixture_.thermo2().rho();
|
||||||
|
|
||||||
const auto& rho1 = trho1();
|
|
||||||
const auto& rho2 = trho2();
|
|
||||||
|
|
||||||
alphaRhoPhi1_ =
|
alphaRhoPhi1_ =
|
||||||
(
|
(
|
||||||
@ -188,8 +185,8 @@ void Foam::compressibleInterPhaseTransportModel::correctPhasePhi()
|
|||||||
{
|
{
|
||||||
if (twoPhaseTransport_)
|
if (twoPhaseTransport_)
|
||||||
{
|
{
|
||||||
const tmp<volScalarField> rho1 = mixture_.thermo1().rho();
|
const volScalarField& rho1 = mixture_.thermo1().rho();
|
||||||
const tmp<volScalarField> rho2 = mixture_.thermo2().rho();
|
const volScalarField& rho2 = mixture_.thermo2().rho();
|
||||||
|
|
||||||
alphaRhoPhi1_.ref() = fvc::interpolate(rho1)*alphaPhi10_;
|
alphaRhoPhi1_.ref() = fvc::interpolate(rho1)*alphaPhi10_;
|
||||||
alphaRhoPhi2_.ref() = fvc::interpolate(rho2)*(phi_ - alphaPhi10_);
|
alphaRhoPhi2_.ref() = fvc::interpolate(rho2)*(phi_ - alphaPhi10_);
|
||||||
|
|||||||
@ -4,19 +4,26 @@ if (nAlphaSubCycles > 1)
|
|||||||
{
|
{
|
||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
|
|
||||||
talphaPhi1.reset
|
talphaPhi1 = new surfaceScalarField
|
||||||
(
|
(
|
||||||
new surfaceScalarField
|
IOobject
|
||||||
(
|
(
|
||||||
mesh.newIOobject("alphaPhi1"),
|
"alphaPhi1",
|
||||||
mesh,
|
runTime.timeName(),
|
||||||
dimensionedScalar(alphaPhi10.dimensions(), Zero)
|
mesh
|
||||||
)
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar(alphaPhi10.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -160,8 +160,7 @@ void VoFPatchTransfer::correct
|
|||||||
const volScalarField& heVoF = thermo.thermo1().he();
|
const volScalarField& heVoF = thermo.thermo1().he();
|
||||||
const volScalarField& TVoF = thermo.thermo1().T();
|
const volScalarField& TVoF = thermo.thermo1().T();
|
||||||
const volScalarField CpVoF(thermo.thermo1().Cp());
|
const volScalarField CpVoF(thermo.thermo1().Cp());
|
||||||
const tmp<volScalarField> trhoVoF(thermo.thermo1().rho());
|
const volScalarField& rhoVoF = thermo.thermo1().rho()();
|
||||||
const volScalarField& rhoVoF = trhoVoF();
|
|
||||||
const volScalarField& alphaVoF = thermo.alpha1();
|
const volScalarField& alphaVoF = thermo.alpha1();
|
||||||
|
|
||||||
forAll(patchIDs_, pidi)
|
forAll(patchIDs_, pidi)
|
||||||
|
|||||||
@ -13,19 +13,26 @@ if (nAlphaSubCycles > 1)
|
|||||||
{
|
{
|
||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
|
|
||||||
talphaPhi1.reset
|
talphaPhi1 = new surfaceScalarField
|
||||||
(
|
(
|
||||||
new surfaceScalarField
|
IOobject
|
||||||
(
|
(
|
||||||
mesh.newIOobject("alphaPhi1"),
|
"alphaPhi1",
|
||||||
mesh,
|
runTime.timeName(),
|
||||||
dimensionedScalar(alphaPhi10.dimensions(), Zero)
|
mesh
|
||||||
)
|
),
|
||||||
|
mesh,
|
||||||
|
dimensionedScalar(alphaPhi10.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -135,14 +135,14 @@ public:
|
|||||||
virtual volScalarField& he()
|
virtual volScalarField& he()
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return const_cast<volScalarField&>(volScalarField::null());
|
return thermo1_->he();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Enthalpy/Internal energy [J/kg]
|
//- Enthalpy/Internal energy [J/kg]
|
||||||
virtual const volScalarField& he() const
|
virtual const volScalarField& he() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return volScalarField::null();
|
return thermo1_->he();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Enthalpy/Internal energy
|
//- Enthalpy/Internal energy
|
||||||
@ -213,7 +213,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Heat capacity at constant volume [J/kg/K]
|
//- Heat capacity at constant volume [J/kg/K]
|
||||||
@ -236,7 +236,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Gamma = Cp/Cv []
|
//- Gamma = Cp/Cv []
|
||||||
|
|||||||
@ -164,6 +164,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new alphaContactAngleFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
alphaContactAngleFvPatchScalarField
|
alphaContactAngleFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -171,19 +180,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 alphaContactAngleFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -99,8 +99,7 @@ Foam::multiphaseMixtureThermo::multiphaseMixtureThermo
|
|||||||
mesh_.time().timeName(),
|
mesh_.time().timeName(),
|
||||||
mesh_,
|
mesh_,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE,
|
IOobject::AUTO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimless, Zero)
|
dimensionedScalar(dimless, Zero)
|
||||||
@ -999,12 +998,19 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixtureThermo::K
|
|||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::volScalarField>
|
||||||
Foam::multiphaseMixtureThermo::nearInterface() const
|
Foam::multiphaseMixtureThermo::nearInterface() const
|
||||||
{
|
{
|
||||||
auto tnearInt = volScalarField::New
|
tmp<volScalarField> tnearInt
|
||||||
(
|
(
|
||||||
"nearInterface",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(dimless, Zero)
|
(
|
||||||
|
"nearInterface",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimless, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const phaseModel& phase : phases_)
|
for (const phaseModel& phase : phases_)
|
||||||
|
|||||||
@ -243,14 +243,14 @@ public:
|
|||||||
virtual volScalarField& he()
|
virtual volScalarField& he()
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return const_cast<volScalarField&>(volScalarField::null());
|
return phases_[0].thermo().he();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Enthalpy/Internal energy [J/kg]
|
//- Enthalpy/Internal energy [J/kg]
|
||||||
virtual const volScalarField& he() const
|
virtual const volScalarField& he() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return volScalarField::null();
|
return phases_[0].thermo().he();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Enthalpy/Internal energy
|
//- Enthalpy/Internal energy
|
||||||
@ -327,7 +327,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Heat capacity at constant volume [J/kg/K]
|
//- Heat capacity at constant volume [J/kg/K]
|
||||||
@ -350,7 +350,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Gamma = Cp/Cv []
|
//- Gamma = Cp/Cv []
|
||||||
|
|||||||
@ -28,8 +28,7 @@
|
|||||||
forAllConstIters(mixture.phases(), phase)
|
forAllConstIters(mixture.phases(), phase)
|
||||||
{
|
{
|
||||||
const rhoThermo& thermo = phase().thermo();
|
const rhoThermo& thermo = phase().thermo();
|
||||||
const tmp<volScalarField> trho(thermo.rho());
|
const volScalarField& rho = thermo.rho()();
|
||||||
const volScalarField& rho = trho();
|
|
||||||
|
|
||||||
p_rghEqnComps.set
|
p_rghEqnComps.set
|
||||||
(
|
(
|
||||||
|
|||||||
@ -18,7 +18,12 @@
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField alphaPhiSum
|
surfaceScalarField alphaPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("alphaPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"alphaPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(phi.dimensions(), Zero)
|
dimensionedScalar(phi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -158,11 +158,13 @@ Foam::tmp<Foam::volSymmTensorField> Foam::relativeVelocityModel::tauDm() const
|
|||||||
// Calculate the relative velocity of the continuous phase w.r.t the mean
|
// Calculate the relative velocity of the continuous phase w.r.t the mean
|
||||||
volVectorField Ucm(betad*Udm_/betac);
|
volVectorField Ucm(betad*Udm_/betac);
|
||||||
|
|
||||||
return volSymmTensorField::New
|
return tmp<volSymmTensorField>
|
||||||
(
|
(
|
||||||
"tauDm",
|
new volSymmTensorField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
betad*sqr(Udm_) + betac*sqr(Ucm)
|
"tauDm",
|
||||||
|
betad*sqr(Udm_) + betac*sqr(Ucm)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -130,17 +130,10 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#include "UEqn.H"
|
||||||
#include "YEqns.H"
|
#include "YEqns.H"
|
||||||
#include "TEqn.H"
|
#include "TEqn.H"
|
||||||
|
|
||||||
if (pimple.frozenFlow())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "UEqn.H"
|
|
||||||
|
|
||||||
// --- Pressure corrector loop
|
// --- Pressure corrector loop
|
||||||
while (pimple.correct())
|
while (pimple.correct())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2017-2024 OpenCFD Ltd
|
Copyright (C) 2017-2019 OpenCFD Ltd
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -206,13 +206,9 @@ public:
|
|||||||
//- Construct as copy
|
//- Construct as copy
|
||||||
DTRMParticle(const DTRMParticle& p);
|
DTRMParticle(const DTRMParticle& p);
|
||||||
|
|
||||||
//- Return a clone
|
|
||||||
virtual autoPtr<particle> clone() const
|
|
||||||
{
|
|
||||||
return particle::Clone(*this);
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Factory class to read-construct particles (for parallel transfer)
|
//- Factory class to read-construct particles used for
|
||||||
|
// parallel transfer
|
||||||
class iNew
|
class iNew
|
||||||
{
|
{
|
||||||
const polyMesh& mesh_;
|
const polyMesh& mesh_;
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2017-2023 OpenCFD Ltd.
|
Copyright (C) 2017-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -407,8 +407,7 @@ Foam::radiation::laserDTRM::laserDTRM(const volScalarField& T)
|
|||||||
mesh_.time().timeName(),
|
mesh_.time().timeName(),
|
||||||
mesh_,
|
mesh_,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE,
|
IOobject::AUTO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimPower/dimVolume, Zero)
|
dimensionedScalar(dimPower/dimVolume, Zero)
|
||||||
@ -505,8 +504,7 @@ Foam::radiation::laserDTRM::laserDTRM
|
|||||||
mesh_.time().timeName(),
|
mesh_.time().timeName(),
|
||||||
mesh_,
|
mesh_,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE,
|
IOobject::AUTO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimPower/pow3(dimLength), Zero)
|
dimensionedScalar(dimPower/pow3(dimLength), Zero)
|
||||||
@ -537,23 +535,42 @@ Foam::label Foam::radiation::laserDTRM::nBands() const
|
|||||||
|
|
||||||
void Foam::radiation::laserDTRM::calculate()
|
void Foam::radiation::laserDTRM::calculate()
|
||||||
{
|
{
|
||||||
auto treflectingCells = volScalarField::New
|
tmp<volScalarField> treflectingCells
|
||||||
(
|
(
|
||||||
"reflectingCellsVol",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar("zero", dimless, -1)
|
(
|
||||||
|
"reflectingCellsVol",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar("zero", dimless, -1)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& reflectingCellsVol = treflectingCells.ref();
|
volScalarField& reflectingCellsVol = treflectingCells.ref();
|
||||||
|
|
||||||
auto tnHat = volVectorField::New
|
|
||||||
|
tmp<volVectorField> tnHat
|
||||||
(
|
(
|
||||||
"nHat",
|
new volVectorField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedVector(dimless, Zero)
|
(
|
||||||
|
"nHat",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedVector(dimless, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& nHat = tnHat.ref();
|
volVectorField& nHat = tnHat.ref();
|
||||||
|
|
||||||
|
|
||||||
// Reset the field
|
// Reset the field
|
||||||
@ -669,9 +686,9 @@ void Foam::radiation::laserDTRM::calculate()
|
|||||||
|
|
||||||
globalIndex::gatherInplaceOp(lines);
|
globalIndex::gatherInplaceOp(lines);
|
||||||
|
|
||||||
if (UPstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
OBJstream os(type() + "-particlePath.obj");
|
OBJstream os(type() + ":particlePath.obj");
|
||||||
|
|
||||||
for (label pointi = 0; pointi < lines.size(); pointi += 2)
|
for (label pointi = 0; pointi < lines.size(); pointi += 2)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -88,14 +88,25 @@ Foam::radiation::localDensityAbsorptionEmission::localDensityAbsorptionEmission
|
|||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::volScalarField>
|
||||||
Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const
|
Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const
|
||||||
{
|
{
|
||||||
auto ta = volScalarField::New
|
tmp<volScalarField> ta
|
||||||
(
|
(
|
||||||
"a",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(inv(dimLength), Zero)
|
(
|
||||||
|
"a",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
IOobject::NO_REGISTER
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(inv(dimLength), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& a = ta.ref();
|
|
||||||
|
volScalarField& a = ta.ref();
|
||||||
|
|
||||||
forAll(alphaNames_, i)
|
forAll(alphaNames_, i)
|
||||||
{
|
{
|
||||||
@ -110,14 +121,25 @@ Foam::radiation::localDensityAbsorptionEmission::aCont(const label bandI) const
|
|||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::volScalarField>
|
||||||
Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const
|
Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const
|
||||||
{
|
{
|
||||||
auto te = volScalarField::New
|
tmp<volScalarField> te
|
||||||
(
|
(
|
||||||
"e",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(inv(dimLength), Zero)
|
(
|
||||||
|
"e",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
IOobject::NO_REGISTER
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(inv(dimLength), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
auto& e = te.ref();
|
|
||||||
|
volScalarField& e = te.ref();
|
||||||
|
|
||||||
forAll(alphaNames_, i)
|
forAll(alphaNames_, i)
|
||||||
{
|
{
|
||||||
@ -132,12 +154,22 @@ Foam::radiation::localDensityAbsorptionEmission::eCont(const label bandI) const
|
|||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::volScalarField>
|
||||||
Foam::radiation::localDensityAbsorptionEmission::ECont(const label bandI) const
|
Foam::radiation::localDensityAbsorptionEmission::ECont(const label bandI) const
|
||||||
{
|
{
|
||||||
auto tE = volScalarField::New
|
tmp<volScalarField> tE
|
||||||
(
|
(
|
||||||
"E",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
(
|
||||||
|
"E",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
IOobject::NO_REGISTER
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
scalarField& E = tE.ref().primitiveFieldRef();
|
scalarField& E = tE.ref().primitiveFieldRef();
|
||||||
|
|||||||
@ -171,8 +171,16 @@ Foam::temperaturePhaseChangeTwoPhaseMixtures::constant::TSource() const
|
|||||||
|
|
||||||
const volScalarField& T = mesh_.lookupObject<volScalarField>("T");
|
const volScalarField& T = mesh_.lookupObject<volScalarField>("T");
|
||||||
|
|
||||||
auto tTSource = tmp<fvScalarMatrix>::New(T, dimEnergy/dimTime);
|
tmp<fvScalarMatrix> tTSource
|
||||||
auto& TSource = tTSource.ref();
|
(
|
||||||
|
new fvScalarMatrix
|
||||||
|
(
|
||||||
|
T,
|
||||||
|
dimEnergy/dimTime
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
fvScalarMatrix& TSource = tTSource.ref();
|
||||||
|
|
||||||
const twoPhaseMixtureEThermo& thermo =
|
const twoPhaseMixtureEThermo& thermo =
|
||||||
refCast<const twoPhaseMixtureEThermo>
|
refCast<const twoPhaseMixtureEThermo>
|
||||||
|
|||||||
@ -382,7 +382,7 @@ Foam::tmp<Foam::volScalarField> Foam::twoPhaseMixtureEThermo::kappaEff
|
|||||||
const volScalarField& kappat
|
const volScalarField& kappat
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
tmp<volScalarField> kappaEff(kappa() + kappat);
|
tmp<Foam::volScalarField> kappaEff(kappa() + kappat);
|
||||||
kappaEff.ref().rename("kappaEff");
|
kappaEff.ref().rename("kappaEff");
|
||||||
return kappaEff;
|
return kappaEff;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -86,14 +86,14 @@ public:
|
|||||||
virtual volScalarField& he()
|
virtual volScalarField& he()
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return const_cast<volScalarField&>(volScalarField::null());
|
return p();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return access to the internal energy field [J/Kg]
|
//- Return access to the internal energy field [J/Kg]
|
||||||
virtual const volScalarField& he() const
|
virtual const volScalarField& he() const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return volScalarField::null();
|
return p();
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Enthalpy/Internal energy
|
//- Enthalpy/Internal energy
|
||||||
@ -182,7 +182,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return Cv of the mixture
|
//- Return Cv of the mixture
|
||||||
@ -205,7 +205,7 @@ public:
|
|||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
return nullptr;
|
return tmp<scalarField>::New(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Gamma = Cp/Cv []
|
//- Gamma = Cp/Cv []
|
||||||
|
|||||||
@ -3,7 +3,12 @@ if (nAlphaSubCycles > 1)
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -32,7 +32,12 @@ if (nAlphaSubCycles > 1)
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -21,7 +21,12 @@
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -50,8 +50,7 @@
|
|||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE,
|
IOobject::AUTO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(dimVelocity*dimArea, Zero)
|
dimensionedScalar(dimVelocity*dimArea, Zero)
|
||||||
|
|||||||
@ -164,6 +164,15 @@ public:
|
|||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new alphaContactAngleFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
alphaContactAngleFvPatchScalarField
|
alphaContactAngleFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -171,19 +180,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 alphaContactAngleFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -68,9 +68,8 @@ Foam::multiphaseMixture::multiphaseMixture
|
|||||||
"transportProperties",
|
"transportProperties",
|
||||||
U.time().constant(),
|
U.time().constant(),
|
||||||
U.db(),
|
U.db(),
|
||||||
IOobject::READ_MODIFIED,
|
IOobject::MUST_READ_IF_MODIFIED,
|
||||||
IOobject::NO_WRITE,
|
IOobject::NO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -86,7 +85,9 @@ Foam::multiphaseMixture::multiphaseMixture
|
|||||||
(
|
(
|
||||||
"rhoPhi",
|
"rhoPhi",
|
||||||
mesh_.time().timeName(),
|
mesh_.time().timeName(),
|
||||||
mesh_
|
mesh_,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimMass/dimTime, Zero)
|
dimensionedScalar(dimMass/dimTime, Zero)
|
||||||
@ -100,8 +101,7 @@ Foam::multiphaseMixture::multiphaseMixture
|
|||||||
mesh_.time().timeName(),
|
mesh_.time().timeName(),
|
||||||
mesh_,
|
mesh_,
|
||||||
IOobject::NO_READ,
|
IOobject::NO_READ,
|
||||||
IOobject::AUTO_WRITE,
|
IOobject::AUTO_WRITE
|
||||||
IOobject::REGISTER
|
|
||||||
),
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimless, Zero)
|
dimensionedScalar(dimless, Zero)
|
||||||
@ -257,12 +257,19 @@ Foam::multiphaseMixture::nuf() const
|
|||||||
Foam::tmp<Foam::surfaceScalarField>
|
Foam::tmp<Foam::surfaceScalarField>
|
||||||
Foam::multiphaseMixture::surfaceTensionForce() const
|
Foam::multiphaseMixture::surfaceTensionForce() const
|
||||||
{
|
{
|
||||||
auto tstf = surfaceScalarField::New
|
tmp<surfaceScalarField> tstf
|
||||||
(
|
(
|
||||||
"surfaceTensionForce",
|
new surfaceScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(dimensionSet(1, -2, -2, 0, 0), Zero)
|
(
|
||||||
|
"surfaceTensionForce",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimensionSet(1, -2, -2, 0, 0), Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
surfaceScalarField& stf = tstf.ref();
|
surfaceScalarField& stf = tstf.ref();
|
||||||
@ -317,7 +324,12 @@ void Foam::multiphaseMixture::solve()
|
|||||||
{
|
{
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh_.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh_
|
||||||
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(rhoPhi_.dimensions(), Zero)
|
dimensionedScalar(rhoPhi_.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
@ -540,12 +552,19 @@ Foam::tmp<Foam::volScalarField> Foam::multiphaseMixture::K
|
|||||||
Foam::tmp<Foam::volScalarField>
|
Foam::tmp<Foam::volScalarField>
|
||||||
Foam::multiphaseMixture::nearInterface() const
|
Foam::multiphaseMixture::nearInterface() const
|
||||||
{
|
{
|
||||||
auto tnearInt = volScalarField::New
|
tmp<volScalarField> tnearInt
|
||||||
(
|
(
|
||||||
"nearInterface",
|
new volScalarField
|
||||||
IOobject::NO_REGISTER,
|
(
|
||||||
mesh_,
|
IOobject
|
||||||
dimensionedScalar(dimless, Zero)
|
(
|
||||||
|
"nearInterface",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_
|
||||||
|
),
|
||||||
|
mesh_,
|
||||||
|
dimensionedScalar(dimless, Zero)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const phase& ph : phases_)
|
for (const phase& ph : phases_)
|
||||||
@ -630,7 +649,12 @@ void Foam::multiphaseMixture::solveAlphas
|
|||||||
|
|
||||||
volScalarField sumAlpha
|
volScalarField sumAlpha
|
||||||
(
|
(
|
||||||
mesh_.newIOobject("sumAlpha"),
|
IOobject
|
||||||
|
(
|
||||||
|
"sumAlpha",
|
||||||
|
mesh_.time().timeName(),
|
||||||
|
mesh_
|
||||||
|
),
|
||||||
mesh_,
|
mesh_,
|
||||||
dimensionedScalar(dimless, Zero)
|
dimensionedScalar(dimless, Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -12,11 +12,8 @@ for (int Ecorr=0; Ecorr<nEnergyCorrectors; Ecorr++)
|
|||||||
phaseModel& phase = fluid.anisothermalPhases()[anisothermalPhasei];
|
phaseModel& phase = fluid.anisothermalPhases()[anisothermalPhasei];
|
||||||
|
|
||||||
const volScalarField& alpha = phase;
|
const volScalarField& alpha = phase;
|
||||||
const tmp<volScalarField> trho = phase.rho();
|
const volScalarField& rho = phase.rho();
|
||||||
const tmp<volVectorField> tU = phase.U();
|
const volVectorField& U = phase.U();
|
||||||
|
|
||||||
const auto& rho = trho();
|
|
||||||
const auto& U = tU();
|
|
||||||
|
|
||||||
fvScalarMatrix EEqn
|
fvScalarMatrix EEqn
|
||||||
(
|
(
|
||||||
|
|||||||
@ -11,9 +11,7 @@
|
|||||||
|
|
||||||
UPtrList<volScalarField>& Y = phase.YActiveRef();
|
UPtrList<volScalarField>& Y = phase.YActiveRef();
|
||||||
const volScalarField& alpha = phase;
|
const volScalarField& alpha = phase;
|
||||||
const tmp<volScalarField> trho = phase.rho();
|
const volScalarField& rho = phase.rho();
|
||||||
|
|
||||||
const auto& rho = trho();
|
|
||||||
|
|
||||||
forAll(Y, i)
|
forAll(Y, i)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -14,11 +14,9 @@ PtrList<fvVectorMatrix> UEqns(phases.size());
|
|||||||
phaseModel& phase = fluid.movingPhases()[movingPhasei];
|
phaseModel& phase = fluid.movingPhases()[movingPhasei];
|
||||||
|
|
||||||
const volScalarField& alpha = phase;
|
const volScalarField& alpha = phase;
|
||||||
const tmp<volScalarField> trho = phase.rho();
|
const volScalarField& rho = phase.rho();
|
||||||
volVectorField& U = phase.URef();
|
volVectorField& U = phase.URef();
|
||||||
|
|
||||||
const auto& rho = trho();
|
|
||||||
|
|
||||||
UEqns.set
|
UEqns.set
|
||||||
(
|
(
|
||||||
phase.index(),
|
phase.index(),
|
||||||
|
|||||||
@ -17,11 +17,9 @@ PtrList<fvVectorMatrix> UEqns(phases.size());
|
|||||||
phaseModel& phase = fluid.movingPhases()[movingPhasei];
|
phaseModel& phase = fluid.movingPhases()[movingPhasei];
|
||||||
|
|
||||||
const volScalarField& alpha = phase;
|
const volScalarField& alpha = phase;
|
||||||
const tmp<volScalarField> trho = phase.rho();
|
const volScalarField& rho = phase.rho();
|
||||||
volVectorField& U = phase.URef();
|
volVectorField& U = phase.URef();
|
||||||
|
|
||||||
const auto& rho = trho();
|
|
||||||
|
|
||||||
UEqns.set
|
UEqns.set
|
||||||
(
|
(
|
||||||
phase.index(),
|
phase.index(),
|
||||||
|
|||||||
@ -272,7 +272,10 @@ while (pimple.correct())
|
|||||||
).ptr()
|
).ptr()
|
||||||
);
|
);
|
||||||
|
|
||||||
pEqnComps[phasei].faceFluxCorrectionPtr(nullptr);
|
deleteDemandDrivenData
|
||||||
|
(
|
||||||
|
pEqnComps[phasei].faceFluxCorrectionPtr()
|
||||||
|
);
|
||||||
|
|
||||||
pEqnComps[phasei].relax();
|
pEqnComps[phasei].relax();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,13 +6,11 @@ const volScalarField& alpha2 = phase2;
|
|||||||
|
|
||||||
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();
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,12 @@ if (nAlphaSubCycles > 1)
|
|||||||
dimensionedScalar totalDeltaT = runTime.deltaT();
|
dimensionedScalar totalDeltaT = runTime.deltaT();
|
||||||
surfaceScalarField rhoPhiSum
|
surfaceScalarField rhoPhiSum
|
||||||
(
|
(
|
||||||
mesh.newIOobject("rhoPhiSum"),
|
IOobject
|
||||||
|
(
|
||||||
|
"rhoPhiSum",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
dimensionedScalar(rhoPhi.dimensions(), Zero)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -50,7 +50,7 @@
|
|||||||
+ (
|
+ (
|
||||||
he2.name() == thermo2.phasePropertyName("e")
|
he2.name() == thermo2.phasePropertyName("e")
|
||||||
? fvc::div(fvc::absolute(alphaPhi2, alpha2, U2), p)
|
? fvc::div(fvc::absolute(alphaPhi2, alpha2, U2), p)
|
||||||
+ p*fvc::ddt(alpha2)
|
+ p*fvc::ddt(alpha1)
|
||||||
: -alpha2*dpdt
|
: -alpha2*dpdt
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -100,6 +100,15 @@ public:
|
|||||||
const tractionDisplacementFvPatchVectorField&
|
const tractionDisplacementFvPatchVectorField&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchVectorField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new tractionDisplacementFvPatchVectorField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
tractionDisplacementFvPatchVectorField
|
tractionDisplacementFvPatchVectorField
|
||||||
(
|
(
|
||||||
@ -107,19 +116,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 tractionDisplacementFvPatchVectorField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -98,6 +98,15 @@ public:
|
|||||||
const tractionDisplacementCorrectionFvPatchVectorField&
|
const tractionDisplacementCorrectionFvPatchVectorField&
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchVectorField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchVectorField>
|
||||||
|
(
|
||||||
|
new tractionDisplacementCorrectionFvPatchVectorField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
tractionDisplacementCorrectionFvPatchVectorField
|
tractionDisplacementCorrectionFvPatchVectorField
|
||||||
(
|
(
|
||||||
@ -105,19 +114,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 tractionDisplacementCorrectionFvPatchVectorField(*this, iF)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2018-2025 OpenCFD Ltd.
|
Copyright (C) 2018-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -25,12 +25,9 @@ License
|
|||||||
|
|
||||||
Description
|
Description
|
||||||
Test the sizeof for basic types.
|
Test the sizeof for basic types.
|
||||||
Also tests how the data mapping of OpenFOAM types to UPstream (MPI)
|
|
||||||
type ids are handled.
|
|
||||||
|
|
||||||
Can be compiled and run without any OpenFOAM libraries.
|
Can be compiled and run without any OpenFOAM libraries.
|
||||||
|
|
||||||
g++ -std=c++17 -oTest-machine-sizes Test-machine-sizes.cpp
|
g++ -std=c++11 -oTest-machine-sizes Test-machine-sizes.cpp
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -40,114 +37,6 @@ Description
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// Partial copy from UPstream.H
|
|
||||||
|
|
||||||
//- Some MPI data types
|
|
||||||
//
|
|
||||||
//- Mapping of some fundamental and aggregate types to MPI data types
|
|
||||||
enum class dataTypes : int
|
|
||||||
{
|
|
||||||
// Builtin Types [8]:
|
|
||||||
DataTypes_begin, //!< Begin builtin types (internal use)
|
|
||||||
type_byte = DataTypes_begin, // also for char, unsigned char
|
|
||||||
type_int32,
|
|
||||||
type_int64,
|
|
||||||
type_uint32,
|
|
||||||
type_uint64,
|
|
||||||
type_float,
|
|
||||||
type_double,
|
|
||||||
type_long_double,
|
|
||||||
invalid
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// Partial copy from UPstreamTraits.H
|
|
||||||
|
|
||||||
//- A supported UPstream data type (intrinsic or user-defined)
|
|
||||||
template<class T>
|
|
||||||
struct UPstream_base_dataType : std::false_type
|
|
||||||
{
|
|
||||||
static constexpr auto datatype_id = dataTypes::invalid;
|
|
||||||
};
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
// Specializations of the above,
|
|
||||||
// each to match the elements of UPstream::dataTypes
|
|
||||||
|
|
||||||
#undef defineUPstreamDataTraits
|
|
||||||
#define defineUPstreamDataTraits(TypeId, Type) \
|
|
||||||
template<> struct UPstream_base_dataType<Type> : std::true_type \
|
|
||||||
{ \
|
|
||||||
static constexpr auto datatype_id = dataTypes::TypeId; \
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
defineUPstreamDataTraits(type_byte, char);
|
|
||||||
defineUPstreamDataTraits(type_byte, unsigned char);
|
|
||||||
defineUPstreamDataTraits(type_int32, int32_t);
|
|
||||||
defineUPstreamDataTraits(type_int64, int64_t);
|
|
||||||
defineUPstreamDataTraits(type_uint32, uint32_t);
|
|
||||||
defineUPstreamDataTraits(type_uint64, uint64_t);
|
|
||||||
defineUPstreamDataTraits(type_float, float);
|
|
||||||
defineUPstreamDataTraits(type_double, double);
|
|
||||||
defineUPstreamDataTraits(type_long_double, long double);
|
|
||||||
|
|
||||||
#undef defineUPstreamDataTraits
|
|
||||||
|
|
||||||
|
|
||||||
//- Explicit handling of data type aliases. This is necessary since
|
|
||||||
//- different systems map things like 'unsigned long' differently but we
|
|
||||||
//- restrict ourselves to int32/int64 types
|
|
||||||
template<class T>
|
|
||||||
struct UPstream_alias_dataType
|
|
||||||
:
|
|
||||||
std::bool_constant
|
|
||||||
<
|
|
||||||
// Base type (no alias needed)
|
|
||||||
UPstream_base_dataType<std::remove_cv_t<T>>::value ||
|
|
||||||
(
|
|
||||||
// Or some int 32/64 type to re-map
|
|
||||||
std::is_integral_v<T>
|
|
||||||
&& (sizeof(T) == sizeof(int32_t) || sizeof(T) == sizeof(int64_t))
|
|
||||||
)
|
|
||||||
>
|
|
||||||
{
|
|
||||||
// Is it using the base type? (no alias needed)
|
|
||||||
static constexpr bool is_base =
|
|
||||||
UPstream_base_dataType<std::remove_cv_t<T>>::value;
|
|
||||||
|
|
||||||
using base = std::conditional_t
|
|
||||||
<
|
|
||||||
UPstream_base_dataType<std::remove_cv_t<T>>::value, // is_base
|
|
||||||
std::remove_cv_t<T>,
|
|
||||||
std::conditional_t
|
|
||||||
<
|
|
||||||
(
|
|
||||||
std::is_integral_v<T>
|
|
||||||
&& (sizeof(T) == sizeof(int32_t) || sizeof(T) == sizeof(int64_t))
|
|
||||||
),
|
|
||||||
std::conditional_t
|
|
||||||
<
|
|
||||||
(sizeof(T) == sizeof(int32_t)),
|
|
||||||
std::conditional_t<std::is_signed_v<T>, int32_t, uint32_t>,
|
|
||||||
std::conditional_t<std::is_signed_v<T>, int64_t, uint64_t>
|
|
||||||
>,
|
|
||||||
char // Fallback value (assuming it is contiguous)
|
|
||||||
>
|
|
||||||
>;
|
|
||||||
|
|
||||||
static constexpr auto datatype_id =
|
|
||||||
UPstream_base_dataType<base>::datatype_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
void print(const char* name, bool showLimits = true)
|
void print(const char* name, bool showLimits = true)
|
||||||
@ -158,78 +47,28 @@ void print(const char* name, bool showLimits = true)
|
|||||||
if (showLimits)
|
if (showLimits)
|
||||||
{
|
{
|
||||||
std::cout
|
std::cout
|
||||||
<< " max=<";
|
<< " \"max\"=" << std::numeric_limits<T>::max();
|
||||||
|
|
||||||
if constexpr (sizeof(T) == 1)
|
|
||||||
{
|
|
||||||
std::cout << int(std::numeric_limits<T>::max());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout << std::numeric_limits<T>::max();
|
|
||||||
}
|
|
||||||
std::cout << '>';
|
|
||||||
}
|
|
||||||
|
|
||||||
// A declared or deduced MPI type, or aliased
|
|
||||||
std::cout
|
|
||||||
<< " is_mpi=" << UPstream_base_dataType<T>::value
|
|
||||||
<< " (" << int(UPstream_base_dataType<T>::datatype_id) << ")";
|
|
||||||
|
|
||||||
if (UPstream_alias_dataType<T>::value)
|
|
||||||
{
|
|
||||||
if (UPstream_alias_dataType<T>::is_base)
|
|
||||||
{
|
|
||||||
std::cout<< " is_base";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout<< " is_alias ("
|
|
||||||
<< int(UPstream_alias_dataType<T>::datatype_id) << ")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout<< " no_alias";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout<< '\n';
|
std::cout<< '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
// Main program:
|
// Main program:
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
std::cout<< "c++ = " << __cplusplus << '\n';
|
std::cout<< "c++ = " << __cplusplus << '\n';
|
||||||
std::cout<< "machine sizes (and some MPI traits)\n---\n\n";
|
std::cout<< "machine sizes\n---\n\n";
|
||||||
|
|
||||||
print<int8_t>("int8_t");
|
|
||||||
print<uint8_t>("uint8_t");
|
|
||||||
print<int16_t>("int16_t");
|
|
||||||
print<uint16_t>("uint16_t");
|
|
||||||
print<int32_t>("int32_t");
|
|
||||||
print<uint32_t>("uint32_t");
|
|
||||||
print<int64_t>("int64_t");
|
|
||||||
print<uint64_t>("uint64_t");
|
|
||||||
|
|
||||||
std::cout << '\n';
|
|
||||||
print<char>("char");
|
|
||||||
print<unsigned char>("unsigned char");
|
|
||||||
print<short>("short");
|
print<short>("short");
|
||||||
print<int>("int");
|
print<int>("int");
|
||||||
print<unsigned>("unsigned");
|
|
||||||
print<long>("long");
|
print<long>("long");
|
||||||
print<unsigned long>("unsigned long");
|
print<unsigned long>("unsigned long");
|
||||||
|
print<std::size_t>("std::size_t");
|
||||||
print<long long>("long long");
|
print<long long>("long long");
|
||||||
|
|
||||||
std::cout << '\n';
|
|
||||||
print<std::size_t>("std::size_t");
|
|
||||||
print<std::streamsize>("std::streamsize");
|
|
||||||
|
|
||||||
std::cout << '\n';
|
|
||||||
print<float>("float");
|
print<float>("float");
|
||||||
print<double>("double");
|
print<double>("double");
|
||||||
print<long double>("long double");
|
print<long double>("long double");
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2020-2025 OpenCFD Ltd.
|
Copyright (C) 2020-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -38,11 +38,12 @@ Description
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "complex.H"
|
|
||||||
#include "Tensor.H"
|
#include "Tensor.H"
|
||||||
#include "SymmTensor.H"
|
#include "SymmTensor.H"
|
||||||
#include "SphericalTensor.H"
|
#include "SphericalTensor.H"
|
||||||
#include "DiagTensor.H"
|
#include "DiagTensor.H"
|
||||||
|
#include "scalar.H"
|
||||||
|
#include "complex.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -56,11 +57,45 @@ unsigned nTest_ = 0;
|
|||||||
unsigned nFail_ = 0;
|
unsigned nFail_ = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// Compare two floating point types, and print output.
|
||||||
|
// Do ++nFail_ if values of two objects are not equal within a given tolerance.
|
||||||
|
// The function is converted from PEP-485.
|
||||||
|
template<class Type>
|
||||||
|
typename std::enable_if<pTraits<Type>::rank == 0, void>::type
|
||||||
|
cmp
|
||||||
|
(
|
||||||
|
const word& msg,
|
||||||
|
const Type& x,
|
||||||
|
const Type& y,
|
||||||
|
const scalar relTol = 1e-8, //<! are values the same within 8 decimals
|
||||||
|
const scalar absTol = 0 //<! useful for cmps near zero
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Info<< msg << x << endl;
|
||||||
|
|
||||||
|
unsigned nFail = 0;
|
||||||
|
|
||||||
|
if (max(absTol, relTol*max(mag(x), mag(y))) < mag(x - y))
|
||||||
|
{
|
||||||
|
++nFail;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nFail)
|
||||||
|
{
|
||||||
|
Info<< nl
|
||||||
|
<< " #### Fail in " << nFail << " comps ####" << nl << endl;
|
||||||
|
++nFail_;
|
||||||
|
}
|
||||||
|
++nTest_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Compare two containers elementwise, and print output.
|
// Compare two containers elementwise, and print output.
|
||||||
// Do ++nFail_ if two components are not equal within a given tolerance.
|
// Do ++nFail_ if two components are not equal within a given tolerance.
|
||||||
// The function is converted from PEP-485
|
// The function is converted from PEP-485
|
||||||
template<class Type>
|
template<class Type>
|
||||||
void cmp
|
typename std::enable_if<pTraits<Type>::rank != 0, void>::type
|
||||||
|
cmp
|
||||||
(
|
(
|
||||||
const word& msg,
|
const word& msg,
|
||||||
const Type& x,
|
const Type& x,
|
||||||
@ -69,37 +104,18 @@ void cmp
|
|||||||
const scalar absTol = 0
|
const scalar absTol = 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const auto notEqual = [=](const auto& a, const auto& b) -> bool
|
Info<< msg << x << endl;
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
Foam::max(absTol, relTol*Foam::max(Foam::mag(a), Foam::mag(b)))
|
|
||||||
< Foam::mag(a - b)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned nFail = 0;
|
unsigned nFail = 0;
|
||||||
|
|
||||||
if constexpr (is_vectorspace_v<Type>)
|
for (direction i = 0; i < pTraits<Type>::nComponents; ++i)
|
||||||
{
|
{
|
||||||
for (direction i = 0; i < pTraits<Type>::nComponents; ++i)
|
if (max(absTol, relTol*max(mag(x[i]), mag(y[i]))) < mag(x[i] - y[i]))
|
||||||
{
|
|
||||||
if (notEqual(x[i], y[i]))
|
|
||||||
{
|
|
||||||
++nFail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (notEqual(x, y))
|
|
||||||
{
|
{
|
||||||
++nFail;
|
++nFail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< msg << x << endl;
|
|
||||||
|
|
||||||
if (nFail)
|
if (nFail)
|
||||||
{
|
{
|
||||||
Info<< nl
|
Info<< nl
|
||||||
@ -352,26 +368,27 @@ void test_global_opers(Type)
|
|||||||
|
|
||||||
// Do compile-time recursion over the given types
|
// Do compile-time recursion over the given types
|
||||||
template<std::size_t I = 0, typename... Tp>
|
template<std::size_t I = 0, typename... Tp>
|
||||||
void run_tests(const std::tuple<Tp...>& types, const List<word>& names)
|
inline typename std::enable_if<I == sizeof...(Tp), void>::type
|
||||||
|
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID){}
|
||||||
|
|
||||||
|
|
||||||
|
template<std::size_t I = 0, typename... Tp>
|
||||||
|
inline typename std::enable_if<I < sizeof...(Tp), void>::type
|
||||||
|
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID)
|
||||||
{
|
{
|
||||||
if constexpr (I < sizeof...(Tp))
|
Info<< nl << " ## Test constructors: "<< typeID[I] <<" ##" << nl;
|
||||||
{
|
test_constructors(std::get<I>(types));
|
||||||
const auto& name = names[I];
|
|
||||||
|
|
||||||
Info<< nl << " ## Test constructors: " << name << " ##" << nl;
|
Info<< nl << " ## Test member functions: "<< typeID[I] <<" ##" << nl;
|
||||||
test_constructors(std::get<I>(types));
|
test_member_funcs(std::get<I>(types));
|
||||||
|
|
||||||
Info<< nl << " ## Test member functions: " << name << " ##" << nl;
|
Info<< nl << " ## Test global functions: "<< typeID[I] << " ##" << nl;
|
||||||
test_member_funcs(std::get<I>(types));
|
test_global_funcs(std::get<I>(types));
|
||||||
|
|
||||||
Info<< nl << " ## Test global functions: " << name << " ##" << nl;
|
Info<< nl << " ## Test global operators: "<< typeID[I] <<" ##" << nl;
|
||||||
test_global_funcs(std::get<I>(types));
|
test_global_opers(std::get<I>(types));
|
||||||
|
|
||||||
Info<< nl << " ## Test global operators: " << name << " ##" << nl;
|
run_tests<I + 1, Tp...>(types, typeID);
|
||||||
test_global_opers(std::get<I>(types));
|
|
||||||
|
|
||||||
run_tests<I + 1, Tp...>(types, names);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -386,8 +403,8 @@ int main()
|
|||||||
|
|
||||||
const List<word> typeID
|
const List<word> typeID
|
||||||
({
|
({
|
||||||
"DiagTensor<float>",
|
"DiagTensor<floatScalar>",
|
||||||
"DiagTensor<double>",
|
"DiagTensor<doubleScalar>",
|
||||||
"DiagTensor<complex>"
|
"DiagTensor<complex>"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
3
applications/test/Dictionary/Make/files
Normal file
3
applications/test/Dictionary/Make/files
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Test-Dictionary.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_USER_APPBIN)/Test-Dictionary
|
||||||
@ -25,10 +25,10 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Application
|
Application
|
||||||
Test-PtrDictionary1
|
Test-Dictionary
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Tests for Dictionary (not dictionary) and PtrDictionary
|
Tests for Dictionary (not dictionary)
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::cout<< "iter type: "
|
std::cout<< "iter type: "
|
||||||
<< typeid(std::begin(scalarDict2)).name() << '\n';
|
<< typeid(stdFoam::begin(scalarDict2)).name() << '\n';
|
||||||
|
|
||||||
scalarDict.transfer(scalarDict2);
|
scalarDict.transfer(scalarDict2);
|
||||||
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2017 OpenFOAM Foundation
|
Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
Copyright (C) 2019-2025 OpenCFD Ltd.
|
Copyright (C) 2019-2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -85,7 +85,8 @@ void compileInfo()
|
|||||||
|
|
||||||
|
|
||||||
template<class FixedListType>
|
template<class FixedListType>
|
||||||
std::enable_if_t<(FixedListType::max_size() == 2), bool>
|
typename std::enable_if
|
||||||
|
<(FixedListType::max_size() == 2), bool>::type
|
||||||
is_pair()
|
is_pair()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -93,7 +94,7 @@ is_pair()
|
|||||||
|
|
||||||
|
|
||||||
template<class FixedListType>
|
template<class FixedListType>
|
||||||
std::enable_if_t<(FixedListType::max_size() != 2), std::string>
|
typename std::enable_if<(FixedListType::max_size() != 2), std::string>::type
|
||||||
is_pair()
|
is_pair()
|
||||||
{
|
{
|
||||||
return "not really at all";
|
return "not really at all";
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
|
-DFULLDEBUG -g \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude
|
-I$(LIB_SRC)/meshTools/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -70,10 +70,7 @@ int main(int argc, char *argv[])
|
|||||||
);
|
);
|
||||||
|
|
||||||
labelList cellToCoarse(identity(mesh.nCells()));
|
labelList cellToCoarse(identity(mesh.nCells()));
|
||||||
CompactListList<label> coarseToCell
|
labelListList coarseToCell(invertOneToMany(mesh.nCells(), cellToCoarse));
|
||||||
(
|
|
||||||
invertOneToManyCompact(mesh.nCells(), cellToCoarse)
|
|
||||||
);
|
|
||||||
|
|
||||||
++runTime;
|
++runTime;
|
||||||
|
|
||||||
@ -81,21 +78,23 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
volScalarField scalarAgglomeration
|
volScalarField scalarAgglomeration
|
||||||
(
|
(
|
||||||
mesh.thisDb().newIOobject("agglomeration"),
|
IOobject
|
||||||
|
(
|
||||||
|
"agglomeration",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
Foam::zero{},
|
dimensionedScalar(dimless, Zero)
|
||||||
dimless,
|
|
||||||
fvPatchFieldBase::zeroGradientType()
|
|
||||||
);
|
);
|
||||||
scalarField& fld = scalarAgglomeration.primitiveFieldRef();
|
scalarField& fld = scalarAgglomeration.primitiveFieldRef();
|
||||||
forAll(fld, celli)
|
forAll(fld, celli)
|
||||||
{
|
{
|
||||||
fld[celli] = cellToCoarse[celli];
|
fld[celli] = cellToCoarse[celli];
|
||||||
}
|
}
|
||||||
if (normalise)
|
fld /= max(fld);
|
||||||
{
|
|
||||||
fld /= max(fld);
|
|
||||||
}
|
|
||||||
scalarAgglomeration.correctBoundaryConditions();
|
scalarAgglomeration.correctBoundaryConditions();
|
||||||
scalarAgglomeration.write();
|
scalarAgglomeration.write();
|
||||||
|
|
||||||
@ -143,23 +142,31 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
forAll(addr, finei)
|
forAll(addr, fineI)
|
||||||
{
|
{
|
||||||
labelUIndList(cellToCoarse, coarseToCell[finei]) = addr[finei];
|
const labelList& cellLabels = coarseToCell[fineI];
|
||||||
|
forAll(cellLabels, i)
|
||||||
|
{
|
||||||
|
cellToCoarse[cellLabels[i]] = addr[fineI];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
coarseToCell = invertOneToManyCompact(coarseSize, cellToCoarse);
|
coarseToCell = invertOneToMany(coarseSize, cellToCoarse);
|
||||||
|
|
||||||
// Write agglomeration
|
// Write agglomeration
|
||||||
{
|
{
|
||||||
volScalarField scalarAgglomeration
|
volScalarField scalarAgglomeration
|
||||||
(
|
(
|
||||||
mesh.thisDb().newIOobject("agglomeration"),
|
IOobject
|
||||||
|
(
|
||||||
|
"agglomeration",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
mesh,
|
mesh,
|
||||||
Foam::zero{},
|
dimensionedScalar(dimless, Zero)
|
||||||
dimless,
|
|
||||||
fvPatchFieldBase::zeroGradientType()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
scalarField& fld = scalarAgglomeration.primitiveFieldRef();
|
scalarField& fld = scalarAgglomeration.primitiveFieldRef();
|
||||||
forAll(fld, celli)
|
forAll(fld, celli)
|
||||||
{
|
{
|
||||||
@ -186,9 +193,9 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Determine coarse cc
|
// Determine coarse cc
|
||||||
forAll(coarseToCell, coarsei)
|
forAll(coarseToCell, coarseI)
|
||||||
{
|
{
|
||||||
const auto& cellLabels = coarseToCell[coarsei];
|
const labelList& cellLabels = coarseToCell[coarseI];
|
||||||
|
|
||||||
point coarseCc = average
|
point coarseCc = average
|
||||||
(
|
(
|
||||||
@ -197,8 +204,10 @@ int main(int argc, char *argv[])
|
|||||||
meshTools::writeOBJ(str, coarseCc);
|
meshTools::writeOBJ(str, coarseCc);
|
||||||
vertI++;
|
vertI++;
|
||||||
|
|
||||||
for (label celli : cellLabels)
|
forAll(cellLabels, i)
|
||||||
{
|
{
|
||||||
|
label celli = cellLabels[i];
|
||||||
|
|
||||||
str << "l " << celli+1 << ' ' << vertI << nl;
|
str << "l " << celli+1 << ' ' << vertI << nl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -124,11 +124,11 @@ int main(int argc, char *argv[])
|
|||||||
<< "toc: " << flatOutput(table0.toc()) << nl;
|
<< "toc: " << flatOutput(table0.toc()) << nl;
|
||||||
|
|
||||||
HashTable<label, label, Hash<label>> table2
|
HashTable<label, label, Hash<label>> table2
|
||||||
(
|
({
|
||||||
// From key/value pairs
|
{3, 10},
|
||||||
labelList({3, 5, 7}),
|
{5, 12},
|
||||||
labelList({10, 12, 16})
|
{7, 16}
|
||||||
);
|
});
|
||||||
|
|
||||||
Info<< "table2: " << table2 << nl
|
Info<< "table2: " << table2 << nl
|
||||||
<< "toc: " << flatOutput(table2.toc()) << nl;
|
<< "toc: " << flatOutput(table2.toc()) << nl;
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
Test-HashTable4.cxx
|
Test-HashTable4.C
|
||||||
|
|
||||||
EXE = $(FOAM_USER_APPBIN)/Test-HashTable4
|
EXE = $(FOAM_USER_APPBIN)/Test-HashTable4
|
||||||
|
|||||||
@ -159,6 +159,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
|
|
||||||
cpuTime timer;
|
cpuTime timer;
|
||||||
|
memInfo mem;
|
||||||
|
|
||||||
Info<< "insert " << nElem << " (int) elements";
|
Info<< "insert " << nElem << " (int) elements";
|
||||||
if (optFnd)
|
if (optFnd)
|
||||||
@ -206,7 +207,7 @@ int main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
loopInsert(map, nElem);
|
loopInsert(map, nElem);
|
||||||
timer.resetCpuTimeIncrement();
|
(void)timer.cpuTimeIncrement();
|
||||||
|
|
||||||
unsigned long sum = 0;
|
unsigned long sum = 0;
|
||||||
for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
|
for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
|
||||||
@ -268,7 +269,7 @@ int main(int argc, char *argv[])
|
|||||||
HashSet<label, Hash<label>> map(32);
|
HashSet<label, Hash<label>> map(32);
|
||||||
|
|
||||||
loopInsert(map, nElem);
|
loopInsert(map, nElem);
|
||||||
timer.resetCpuTimeIncrement();
|
(void)timer.cpuTimeIncrement();
|
||||||
|
|
||||||
unsigned long sum = 0;
|
unsigned long sum = 0;
|
||||||
for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
|
for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
|
||||||
@ -305,8 +306,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
Info<< timer.cpuTimeIncrement() << " s\n";
|
Info<< timer.cpuTimeIncrement() << " s\n";
|
||||||
Foam::memInfo{}.writeEntry("mem-info", Info);
|
Info<< "mem info: " << mem.update() << endl;
|
||||||
Info<< endl;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2021-2025 OpenCFD Ltd.
|
Copyright (C) 2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -42,11 +42,9 @@ Note
|
|||||||
#include "Hash.H"
|
#include "Hash.H"
|
||||||
|
|
||||||
#ifdef FULLDEBUG
|
#ifdef FULLDEBUG
|
||||||
#define HashTypeInfo(Name) \
|
#define HashTypeInfo(Args) void info() { std::cerr<< "" Args << "\n"; }
|
||||||
static constexpr const char* name() noexcept { return Name; } \
|
|
||||||
void info() const { std::cerr<< name() << " hashing\n"; }
|
|
||||||
#else
|
#else
|
||||||
#define HashTypeInfo(Name) void info() const {}
|
#define HashTypeInfo(Args) void info() {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -55,36 +53,20 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class HashFunc Declaration
|
Class Hash Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
template<class T>
|
template<class T, class SFINAEType=bool>
|
||||||
struct HashFun
|
struct HashFun
|
||||||
{
|
{
|
||||||
void info() const
|
#ifdef FULLDEBUG
|
||||||
{
|
static constexpr const char* name() noexcept { return "default"; }
|
||||||
#ifdef FULLDEBUG
|
#endif
|
||||||
if constexpr (std::is_base_of_v<std::string, T>)
|
HashTypeInfo("plain hash")
|
||||||
{
|
|
||||||
std::cerr<< "std::string hashing\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cerr<< "default hashing\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned operator()(const T& obj, unsigned seed=0) const
|
unsigned operator()(const T& obj, unsigned seed=0) const
|
||||||
{
|
{
|
||||||
if constexpr (std::is_base_of_v<std::string, T>)
|
return Foam::Hasher(&obj, sizeof(obj), seed);
|
||||||
{
|
|
||||||
return Foam::Hasher(obj.data(), obj.size(), seed);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Foam::Hasher(&obj, sizeof(obj), seed);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -94,17 +76,45 @@ struct HashFun
|
|||||||
//- Hashing for label
|
//- Hashing for label
|
||||||
template<> struct HashFun<Foam::label> : Hash<label>
|
template<> struct HashFun<Foam::label> : Hash<label>
|
||||||
{
|
{
|
||||||
HashTypeInfo("label")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "label"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash label")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//- Hashing for pointers, interpret pointer as a integer type
|
//- Hashing for pointers, interpret pointer as a integer type
|
||||||
template<> struct HashFun<void*> : Hash<void *>
|
template<> struct HashFun<void*> : Hash<void *>
|
||||||
{
|
{
|
||||||
HashTypeInfo("pointer")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "pointer"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash ptr")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//- Hashing for string types
|
||||||
|
template<class StringType>
|
||||||
|
struct HashFun
|
||||||
|
<
|
||||||
|
StringType,
|
||||||
|
typename std::enable_if
|
||||||
|
<
|
||||||
|
std::is_base_of<std::string, StringType>::value, bool
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
{
|
||||||
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "string"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash string")
|
||||||
|
|
||||||
|
unsigned operator()(const std::string& obj, unsigned seed=0) const
|
||||||
|
{
|
||||||
|
return Foam::Hasher(obj.data(), obj.size(), seed);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // End namespace Foam
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -123,56 +133,83 @@ namespace Foam
|
|||||||
|
|
||||||
template<> struct HashFun<edge> : Hash<edge>
|
template<> struct HashFun<edge> : Hash<edge>
|
||||||
{
|
{
|
||||||
HashTypeInfo("edge")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "edge"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash edge")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<> struct HashFun<face> : Hash<face>
|
template<> struct HashFun<face> : Hash<face>
|
||||||
{
|
{
|
||||||
HashTypeInfo("face")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "face"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash face")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<> struct HashFun<triFace> : Hash<triFace>
|
template<> struct HashFun<triFace> : Hash<triFace>
|
||||||
{
|
{
|
||||||
HashTypeInfo("triFace")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "triFace"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash triFace")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
struct HashFun<Pair<T>> : Hash<Pair<T>>
|
struct HashFun<Pair<T>> : Hash<Pair<T>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("Pair")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "Pair"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash Pair")
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T1, class T2>
|
template<class T1, class T2>
|
||||||
struct HashFun<Tuple2<T1, T2>> : Hash<Tuple2<T1, T2>>
|
struct HashFun<Tuple2<T1, T2>> : Hash<Tuple2<T1, T2>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("Tuple2")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "Tuple2"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash Tuple2")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
struct HashFun<List<T>> : Hash<List<T>>
|
struct HashFun<List<T>> : Hash<List<T>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("List")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "List"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash List")
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T> struct HashFun<UList<T>> : Hash<UList<T>>
|
template<class T> struct HashFun<UList<T>> : Hash<UList<T>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("UList")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "UList"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash UList")
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T, int SizeMin>
|
template<class T, int SizeMin>
|
||||||
struct HashFun<DynamicList<T, SizeMin>> : Hash<DynamicList<T, SizeMin>>
|
struct HashFun<DynamicList<T, SizeMin>> : Hash<DynamicList<T, SizeMin>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("DynamicList")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "DynamicList"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash DynamicList")
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T, unsigned N>
|
template<class T, unsigned N>
|
||||||
struct HashFun<FixedList<T, N>> : Hash<FixedList<T, N>>
|
struct HashFun<FixedList<T, N>> : Hash<FixedList<T, N>>
|
||||||
{
|
{
|
||||||
HashTypeInfo("FixedList")
|
#ifdef FULLDEBUG
|
||||||
|
static constexpr const char* name() noexcept { return "FixedList"; }
|
||||||
|
#endif
|
||||||
|
HashTypeInfo("hash FixedList")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2018-2025 OpenCFD Ltd.
|
Copyright (C) 2018-2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -81,7 +81,7 @@ void infoHashString
|
|||||||
|
|
||||||
void reportHashList(const UList<string>& list)
|
void reportHashList(const UList<string>& list)
|
||||||
{
|
{
|
||||||
Info<< "contiguous = " << is_contiguous_v<string> << nl << nl;
|
Info<< "contiguous = " << is_contiguous<string>::value << nl << nl;
|
||||||
|
|
||||||
for (const string& val : list)
|
for (const string& val : list)
|
||||||
{
|
{
|
||||||
@ -94,7 +94,7 @@ void reportHashList(const UList<string>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<label>& list)
|
void reportHashList(const UList<label>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<label> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<label>::value << nl << nl;
|
||||||
|
|
||||||
for (const label val : list)
|
for (const label val : list)
|
||||||
{
|
{
|
||||||
@ -113,7 +113,7 @@ void reportHashList(const UList<label>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<face>& list)
|
void reportHashList(const UList<face>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<label> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<label>::value << nl << nl;
|
||||||
|
|
||||||
for (const face& f : list)
|
for (const face& f : list)
|
||||||
{
|
{
|
||||||
@ -154,7 +154,7 @@ void reportHashList(const UList<labelList>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<wordPair>& list)
|
void reportHashList(const UList<wordPair>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<wordPair> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<wordPair>::value << nl << nl;
|
||||||
|
|
||||||
for (const wordPair& pr : list)
|
for (const wordPair& pr : list)
|
||||||
{
|
{
|
||||||
@ -179,7 +179,7 @@ void reportHashList(const UList<wordPair>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<labelPair>& list)
|
void reportHashList(const UList<labelPair>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<labelPair> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<labelPair>::value << nl << nl;
|
||||||
|
|
||||||
for (const labelPair& pr : list)
|
for (const labelPair& pr : list)
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ void reportHashList(const UList<labelPair>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<labelPairPair>& list)
|
void reportHashList(const UList<labelPairPair>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<labelPairPair> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<labelPairPair>::value << nl << nl;
|
||||||
|
|
||||||
for (const labelPairPair& pr : list)
|
for (const labelPairPair& pr : list)
|
||||||
{
|
{
|
||||||
@ -221,7 +221,7 @@ void reportHashList(const UList<labelPairPair>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<edge>& list)
|
void reportHashList(const UList<edge>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<edge> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<edge>::value << nl << nl;
|
||||||
|
|
||||||
for (const edge& e : list)
|
for (const edge& e : list)
|
||||||
{
|
{
|
||||||
@ -242,7 +242,7 @@ void reportHashList(const UList<edge>& list)
|
|||||||
|
|
||||||
void reportHashList(const UList<triFace>& list)
|
void reportHashList(const UList<triFace>& list)
|
||||||
{
|
{
|
||||||
Info<<"contiguous = " << is_contiguous_v<triFace> << nl << nl;
|
Info<<"contiguous = " << is_contiguous<triFace>::value << nl << nl;
|
||||||
|
|
||||||
for (const triFace& f : list)
|
for (const triFace& f : list)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -188,6 +188,8 @@ int main(int argc, char *argv[])
|
|||||||
argList::addBoolOption("label", "Use label for tests (default)");
|
argList::addBoolOption("label", "Use label for tests (default)");
|
||||||
argList::addBoolOption("ref", "Test writing by ref");
|
argList::addBoolOption("ref", "Test writing by ref");
|
||||||
|
|
||||||
|
#include "addTimeOptions.H"
|
||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
#include "createTime.H"
|
#include "createTime.H"
|
||||||
#include "createPolyMesh.H"
|
#include "createPolyMesh.H"
|
||||||
@ -213,10 +215,11 @@ int main(int argc, char *argv[])
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
Info<< "points path: " << io.typeFilePath<pointIOField>() << nl;
|
Info<< "points path: " << io.typeFilePath<labelIOList>() << nl;
|
||||||
|
Info<< "points path: " << io.typeFilePath<void>() << nl;
|
||||||
|
|
||||||
io.resetHeader("bad-points");
|
io.resetHeader("bad-points");
|
||||||
Info<< "bad path: " << io.typeFilePath<labelIOList>() << nl;
|
Info<< "bad path: " << io.typeFilePath<void>() << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
IOobject io
|
IOobject io
|
||||||
@ -277,6 +280,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
IOFieldRef<vector>(ioOutput, mesh.points()).write();
|
IOFieldRef<vector>(ioOutput, mesh.points()).write();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -45,7 +45,7 @@ using namespace Foam;
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
word report()
|
word report()
|
||||||
{
|
{
|
||||||
if constexpr (is_globalIOobject<Type>::value)
|
if (is_globalIOobject<Type>::value)
|
||||||
{
|
{
|
||||||
return "global";
|
return "global";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,2 +1,4 @@
|
|||||||
/* EXE_INC = */
|
EXE_INC = -DFULLDEBUG
|
||||||
/* EXE_LIBS = */
|
|
||||||
|
/* EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude */
|
||||||
|
/* EXE_LIBS = -lfiniteVolume */
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011 OpenFOAM Foundation
|
Copyright (C) 2011 OpenFOAM Foundation
|
||||||
Copyright (C) 2017-2024 OpenCFD Ltd.
|
Copyright (C) 2017-2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -156,24 +156,29 @@ int main(int argc, char *argv[])
|
|||||||
os.writeEntry("idl3", idl3);
|
os.writeEntry("idl3", idl3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UPstream::parRun())
|
if (Pstream::parRun())
|
||||||
{
|
{
|
||||||
if (UPstream::master())
|
if (Pstream::master())
|
||||||
{
|
{
|
||||||
Pout<< "full: " << flatOutput(idl3.values()) << nl
|
Pout<< "full: " << flatOutput(idl3.values()) << nl
|
||||||
<< "send: " << flatOutput(idl3) << endl;
|
<< "send: " << flatOutput(idl3) << endl;
|
||||||
|
|
||||||
for (const int proci : UPstream::subProcs())
|
for (const int proci : Pstream::subProcs())
|
||||||
{
|
{
|
||||||
OPstream::send(idl3, proci);
|
OPstream toSlave(Pstream::commsTypes::scheduled, proci);
|
||||||
|
toSlave << idl3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// From master
|
// From master
|
||||||
List<label> recv;
|
IPstream fromMaster
|
||||||
|
(
|
||||||
|
Pstream::commsTypes::scheduled,
|
||||||
|
Pstream::masterNo()
|
||||||
|
);
|
||||||
|
|
||||||
IPstream::recv(recv, UPstream::masterNo());
|
List<label> recv(fromMaster);
|
||||||
|
|
||||||
Pout<<"recv: " << flatOutput(recv) << endl;
|
Pout<<"recv: " << flatOutput(recv) << endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2011-2016 OpenFOAM Foundation
|
Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
Copyright (C) 2017-2025 OpenCFD Ltd.
|
Copyright (C) 2017-2023 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -118,7 +118,7 @@ Ostream& printListOutputType(const char* what)
|
|||||||
{
|
{
|
||||||
Info<< what
|
Info<< what
|
||||||
<< " (contiguous="
|
<< " (contiguous="
|
||||||
<< is_contiguous_v<T> << " no_linebreak="
|
<< is_contiguous<T>::value << " no_linebreak="
|
||||||
<< Detail::ListPolicy::no_linebreak<T>::value
|
<< Detail::ListPolicy::no_linebreak<T>::value
|
||||||
<< " short_length="
|
<< " short_length="
|
||||||
<< Detail::ListPolicy::short_length<T>::value << ')';
|
<< Detail::ListPolicy::short_length<T>::value << ')';
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2021-2025 OpenCFD Ltd.
|
Copyright (C) 2021 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -128,17 +128,18 @@ void test_member_funcs(Type)
|
|||||||
|
|
||||||
// Do compile-time recursion over the given types
|
// Do compile-time recursion over the given types
|
||||||
template<std::size_t I = 0, typename... Tp>
|
template<std::size_t I = 0, typename... Tp>
|
||||||
void run_tests(const std::tuple<Tp...>& types, const List<word>& names)
|
inline typename std::enable_if<I == sizeof...(Tp), void>::type
|
||||||
|
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID){}
|
||||||
|
|
||||||
|
|
||||||
|
template<std::size_t I = 0, typename... Tp>
|
||||||
|
inline typename std::enable_if<I < sizeof...(Tp), void>::type
|
||||||
|
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID)
|
||||||
{
|
{
|
||||||
if constexpr (I < sizeof...(Tp))
|
Info<< nl << " ## Test member functions: "<< typeID[I] <<" ##" << nl;
|
||||||
{
|
test_member_funcs(std::get<I>(types));
|
||||||
const auto& name = names[I];
|
|
||||||
|
|
||||||
Info<< nl << " ## Test member functions: " << name << " ##" << nl;
|
run_tests<I + 1, Tp...>(types, typeID);
|
||||||
test_member_funcs(std::get<I>(types));
|
|
||||||
|
|
||||||
run_tests<I + 1, Tp...>(types, names);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
Test-OCountStream.cxx
|
Test-OCountStream.C
|
||||||
|
|
||||||
EXE = $(FOAM_USER_APPBIN)/Test-OCountStream
|
EXE = $(FOAM_USER_APPBIN)/Test-OCountStream
|
||||||
|
|||||||
@ -65,11 +65,11 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
OCountStream cnt;
|
OCountStream cnt;
|
||||||
OCharStream cstr;
|
OCharStream cstr;
|
||||||
OStringStream sstr;
|
OStringStream str;
|
||||||
ocountstream plain;
|
ocountstream plain;
|
||||||
|
|
||||||
generateOutput(cstr);
|
generateOutput(cstr);
|
||||||
generateOutput(sstr);
|
generateOutput(str);
|
||||||
generateOutput(cnt);
|
generateOutput(cnt);
|
||||||
generateOutput(plain);
|
generateOutput(plain);
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl
|
Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl
|
||||||
<< "via char-stream: " << label(cstr.view().size()) << " chars" << nl
|
<< "via char-stream: " << label(cstr.view().size()) << " chars" << nl
|
||||||
<< "via string-stream: " << label(sstr.count()) << " chars" << nl
|
<< "via string-stream: " << str.str().size() << " chars" << nl
|
||||||
<< "via ocountstream: " << plain.count() << " chars" << endl;
|
<< "via ocountstream: " << plain.count() << " chars" << endl;
|
||||||
|
|
||||||
fileName outputName;
|
fileName outputName;
|
||||||
@ -5,7 +5,7 @@
|
|||||||
\\ / A nd | www.openfoam.com
|
\\ / A nd | www.openfoam.com
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2022-2024 OpenCFD Ltd.
|
Copyright (C) 2022 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -32,14 +32,10 @@ Description
|
|||||||
#include "IOstreams.H"
|
#include "IOstreams.H"
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
#include "argList.H"
|
#include "argList.H"
|
||||||
#include "clock.H"
|
|
||||||
#include "Switch.H"
|
|
||||||
#include "ListOps.H"
|
#include "ListOps.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
std::string time_stamp;
|
|
||||||
|
|
||||||
void listFiles(const fileName& dir)
|
void listFiles(const fileName& dir)
|
||||||
{
|
{
|
||||||
wordList files = ListOps::create<word>
|
wordList files = ListOps::create<word>
|
||||||
@ -59,150 +55,25 @@ void listFiles(const fileName& dir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OSstream& printInfo(OFstream& os)
|
|
||||||
{
|
|
||||||
InfoErr
|
|
||||||
<< "open: " << os.name() << nl
|
|
||||||
<< "appending: " << Switch::name(os.is_appending())
|
|
||||||
<< " tellp: "<< os.stdStream().tellp()
|
|
||||||
<< " gz: " << Switch::name(os.compression()) << nl;
|
|
||||||
|
|
||||||
return InfoErr.stream();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void withHeader(OFstream& os)
|
|
||||||
{
|
|
||||||
const auto tellp = os.stdStream().tellp();
|
|
||||||
|
|
||||||
if (tellp <= 0)
|
|
||||||
{
|
|
||||||
InfoErr
|
|
||||||
<< "Add header" << nl;
|
|
||||||
os << "HEADER: " << time_stamp.c_str() << nl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class OSstreamType>
|
|
||||||
void generateLines(OSstreamType& os, label count = 1)
|
|
||||||
{
|
|
||||||
for (label line = 1; line <= count; ++line)
|
|
||||||
{
|
|
||||||
os << "[" << line
|
|
||||||
<< "] =============================================" << nl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class OSstreamType>
|
|
||||||
void generateContent
|
|
||||||
(
|
|
||||||
OSstreamType& os,
|
|
||||||
const bool with_seekend,
|
|
||||||
const bool test_overwrite = false,
|
|
||||||
const int64_t seek_out = -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (with_seekend)
|
|
||||||
{
|
|
||||||
os.stdStream().seekp(0, std::ios_base::end);
|
|
||||||
// OR? os.seek_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
printInfo(os);
|
|
||||||
|
|
||||||
withHeader(os);
|
|
||||||
|
|
||||||
if (test_overwrite && seek_out >= 0)
|
|
||||||
{
|
|
||||||
InfoErr<< "... seekp(" << seek_out << ")" << nl;
|
|
||||||
|
|
||||||
auto& oss = os.stdStream();
|
|
||||||
|
|
||||||
// Actually std::streampos, but cannot increment that
|
|
||||||
|
|
||||||
int64_t pos(seek_out);
|
|
||||||
|
|
||||||
const int64_t tellp_end = oss.tellp();
|
|
||||||
|
|
||||||
if (pos >= 0 && pos < tellp_end)
|
|
||||||
{
|
|
||||||
InfoErr
|
|
||||||
<< "... fill from " << label(pos)
|
|
||||||
<< " to " << label(tellp_end) << nl;
|
|
||||||
|
|
||||||
oss.seekp(pos);
|
|
||||||
|
|
||||||
while (pos < tellp_end)
|
|
||||||
{
|
|
||||||
// Fill with char 'X', rely on streambuf buffering
|
|
||||||
oss << 'X';
|
|
||||||
++pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
oss.seekp(seek_out);
|
|
||||||
os << "More content [at " << seek_out << ']' << endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
generateLines(os, 4);
|
|
||||||
|
|
||||||
printInfo(os)
|
|
||||||
<< "... sleep" << endl;
|
|
||||||
|
|
||||||
listFiles(os.name().path());
|
|
||||||
|
|
||||||
sleep(2);
|
|
||||||
|
|
||||||
os << "[new content] +++++++++++++++++++++++++++++++++++" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class OSstreamType>
|
|
||||||
void generateOverwriteContent
|
|
||||||
(
|
|
||||||
OSstreamType& os,
|
|
||||||
const bool with_seekend,
|
|
||||||
const int64_t seek_out = -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
generateContent(os, with_seekend, true, seek_out);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
// Main program:
|
// Main program:
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
argList::addBoolOption("gz", "Use compression");
|
argList::addBoolOption("gz", "Use compression");
|
||||||
argList::addBoolOption("append-app", "Use append app mode");
|
argList::addBoolOption("append", "Use append mode");
|
||||||
argList::addBoolOption("append-ate", "Use append ate mode");
|
|
||||||
argList::addBoolOption("seekend", "Seek to end after non-append open");
|
|
||||||
argList::addOption("seek", "value", "Seek from start (default: 100)");
|
|
||||||
argList::addBoolOption("atomic", "Use atomic");
|
argList::addBoolOption("atomic", "Use atomic");
|
||||||
argList::addBoolOption("keep", "Do not remove test directory");
|
argList::addBoolOption("keep", "Do not remove test directory");
|
||||||
argList::addOption("write", "file", "test writing to file");
|
argList::addOption("write", "file", "test writing to file");
|
||||||
|
|
||||||
#include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
|
|
||||||
// Same time-stamp for all generated files
|
|
||||||
time_stamp = clock::dateTime();
|
|
||||||
|
|
||||||
const fileName baseDir("Test-OFstream-directory");
|
const fileName baseDir("Test-OFstream-directory");
|
||||||
|
|
||||||
Foam::mkDir(baseDir);
|
Foam::mkDir(baseDir);
|
||||||
|
|
||||||
InfoErr<< "mkdir: " << baseDir << endl;
|
InfoErr<< "mkdir: " << baseDir << endl;
|
||||||
|
|
||||||
Info<< "start:" << nl;
|
|
||||||
listFiles(baseDir);
|
|
||||||
|
|
||||||
const bool with_seekend = args.found("seekend");
|
|
||||||
|
|
||||||
const int seek_out = args.getOrDefault<int>("seek", 100);
|
|
||||||
|
|
||||||
IOstreamOption streamOpt;
|
IOstreamOption streamOpt;
|
||||||
|
|
||||||
if (args.found("gz"))
|
if (args.found("gz"))
|
||||||
@ -212,11 +83,10 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
IOstreamOption::appendType append =
|
IOstreamOption::appendType append =
|
||||||
(
|
(
|
||||||
args.found("append-app") ? IOstreamOption::APPEND_APP
|
args.found("append")
|
||||||
: args.found("append-ate") ? IOstreamOption::APPEND_ATE
|
? IOstreamOption::APPEND
|
||||||
: IOstreamOption::NO_APPEND
|
: IOstreamOption::NON_APPEND
|
||||||
);
|
);
|
||||||
|
|
||||||
IOstreamOption::atomicType atomic =
|
IOstreamOption::atomicType atomic =
|
||||||
(
|
(
|
||||||
args.found("atomic")
|
args.found("atomic")
|
||||||
@ -227,6 +97,7 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
OFstream(baseDir/"dummy")() << "Some file content" << endl;
|
OFstream(baseDir/"dummy")() << "Some file content" << endl;
|
||||||
|
|
||||||
|
Foam::ln("dummy", baseDir/"Test2.txt");
|
||||||
Foam::ln("dummy", baseDir/"Test3.txt");
|
Foam::ln("dummy", baseDir/"Test3.txt");
|
||||||
Foam::ln("dummy", baseDir/"Test4.txt");
|
Foam::ln("dummy", baseDir/"Test4.txt");
|
||||||
Foam::ln("dummy", baseDir/"Test4.txt.gz");
|
Foam::ln("dummy", baseDir/"Test4.txt.gz");
|
||||||
@ -243,31 +114,16 @@ int main(int argc, char *argv[])
|
|||||||
append
|
append
|
||||||
);
|
);
|
||||||
|
|
||||||
generateOverwriteContent(os, with_seekend, seek_out);
|
os << "=========================" << endl;
|
||||||
}
|
|
||||||
|
|
||||||
{
|
InfoErr<< "open: " << os.name() << endl;
|
||||||
OFstream os
|
InfoErr<< "... sleep" << endl;
|
||||||
(
|
|
||||||
atomic,
|
|
||||||
baseDir/"Test1-app.txt",
|
|
||||||
streamOpt,
|
|
||||||
IOstreamOption::APPEND_APP
|
|
||||||
);
|
|
||||||
|
|
||||||
generateOverwriteContent(os, with_seekend, seek_out);
|
listFiles(baseDir);
|
||||||
}
|
|
||||||
|
|
||||||
{
|
sleep(2);
|
||||||
OFstream os
|
|
||||||
(
|
|
||||||
atomic,
|
|
||||||
baseDir/"Test1-ate.txt",
|
|
||||||
streamOpt,
|
|
||||||
IOstreamOption::APPEND_ATE
|
|
||||||
);
|
|
||||||
|
|
||||||
generateOverwriteContent(os, with_seekend, seek_out);
|
os << "+++++++++++++++++++++++++++++++++++" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -276,21 +132,39 @@ int main(int argc, char *argv[])
|
|||||||
atomic,
|
atomic,
|
||||||
baseDir/"Test2.txt",
|
baseDir/"Test2.txt",
|
||||||
streamOpt
|
streamOpt
|
||||||
|
// NON_APPEND
|
||||||
);
|
);
|
||||||
|
|
||||||
generateContent(os, with_seekend);
|
os << "=========================" << endl;
|
||||||
}
|
|
||||||
|
|
||||||
|
InfoErr<< "open: " << os.name() << endl;
|
||||||
|
InfoErr<< "... sleep" << endl;
|
||||||
|
|
||||||
|
listFiles(baseDir);
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
os << "+++++++++++++++++++++++++++++++++++" << endl;
|
||||||
|
}
|
||||||
{
|
{
|
||||||
OFstream os
|
OFstream os
|
||||||
(
|
(
|
||||||
atomic,
|
atomic,
|
||||||
baseDir/"Test3.txt",
|
baseDir/"Test3.txt",
|
||||||
streamOpt,
|
streamOpt,
|
||||||
IOstreamOption::APPEND_APP
|
IOstreamOption::APPEND
|
||||||
);
|
);
|
||||||
|
|
||||||
generateContent(os, with_seekend, with_seekend);
|
os << "=========================" << endl;
|
||||||
|
|
||||||
|
InfoErr<< "open: " << os.name() << endl;
|
||||||
|
InfoErr<< "... sleep" << endl;
|
||||||
|
|
||||||
|
listFiles(baseDir);
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
os << "+++++++++++++++++++++++++++++++++++" << endl;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OFstream os
|
OFstream os
|
||||||
@ -300,17 +174,35 @@ int main(int argc, char *argv[])
|
|||||||
IOstreamOption::COMPRESSED
|
IOstreamOption::COMPRESSED
|
||||||
);
|
);
|
||||||
|
|
||||||
// No seekend with COMPRESSED
|
os << "=========================" << endl;
|
||||||
generateContent(os, false);
|
|
||||||
|
InfoErr<< "open: " << os.name() << endl;
|
||||||
|
InfoErr<< "... sleep" << endl;
|
||||||
|
|
||||||
|
listFiles(baseDir);
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
os << "+++++++++++++++++++++++++++++++++++" << endl;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OFstream os
|
OFstream os
|
||||||
(
|
(
|
||||||
IOstreamOption::ATOMIC,
|
IOstreamOption::ATOMIC,
|
||||||
baseDir/"Test5.txt"
|
baseDir/"Test5.txt"
|
||||||
|
// ASCII UNCOMPRESSED NON_APPEND
|
||||||
);
|
);
|
||||||
|
|
||||||
generateContent(os, with_seekend);
|
os << "=========================" << endl;
|
||||||
|
|
||||||
|
InfoErr<< "open: " << os.name() << endl;
|
||||||
|
InfoErr<< "... sleep" << endl;
|
||||||
|
|
||||||
|
listFiles(baseDir);
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
os << "+++++++++++++++++++++++++++++++++++" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< nl << "done:" << endl;
|
Info<< nl << "done:" << endl;
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
|
-DFULLDEBUG \
|
||||||
-I$(LIB_SRC)/mesh/blockMesh/lnInclude
|
-I$(LIB_SRC)/mesh/blockMesh/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
| ========= | |
|
| ========= | |
|
||||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
| \\ / O peration | Version: v2412 |
|
| \\ / O peration | Version: v2306 |
|
||||||
| \\ / A nd | Website: www.openfoam.com |
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
| \\/ M anipulation | |
|
| \\/ M anipulation | |
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
|
-DFULLDEBUG -g -O0 \
|
||||||
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
|
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
|
||||||
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
|
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user