Compare commits

..

4 Commits

Author SHA1 Message Date
8c9b0d9f1d WIP: SUBMODULE update 2023-12-13 23:20:56 +01:00
aad9dff0fb CONFIG: foamPackRelease handling of recursive submodules 2023-12-13 23:20:56 +01:00
3154b7766d ENH: preserve origId in foamFormatConvert (fixes# #3051)
- previously read the cloud directly without any of the
  passiveParticle fields (origProcId, origId), which meant they would
  not actually be converted.
2023-12-13 22:52:22 +01:00
60840eb031 ENH: simplify construction of zero-sized Clouds
- use Foam::zero as a dispatch tag

FIX: return moleculeCloud::constProps() List by reference not copy

STYLE: more consistent typedefs / declarations for Clouds
2023-12-13 20:04:56 +01:00
13536 changed files with 74126 additions and 256218 deletions

View File

@ -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
View File

@ -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

View File

@ -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()
{ {

View File

@ -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
#------------------------------------------------------------------------------

View File

@ -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
#------------------------------------------------------------------------------

View File

@ -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

View File

@ -1,2 +1,2 @@
api=2501 api=2310
patch=0 patch=0

View File

@ -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

View File

@ -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_)
{ {

View File

@ -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_)
{ {

View File

@ -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)
{ {

View File

@ -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

View File

@ -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))));

View File

@ -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_))
)
); );
} }
} }

View File

@ -36,13 +36,11 @@ Description
if (adjustTimeStep) if (adjustTimeStep)
{ {
scalar maxDeltaTFact = maxCo/(CoNum + StCoNum + SMALL); scalar maxDeltaTFact = maxCo/(CoNum + StCoNum + SMALL);
scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
const scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
deltaTFact*runTime.deltaTValue(), deltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT

View File

@ -1,6 +1,5 @@
if (adjustTimeStep) if (adjustTimeStep)
{ {
runTime.setDeltaT(Foam::min(dtChem, maxDeltaT)); runTime.setDeltaT(min(dtChem, maxDeltaT));
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaTValue() << endl;
} }

View File

@ -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
) )

View File

@ -54,18 +54,9 @@ if (adjustTimeStep)
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
dt0 dt0*min(min(TFactorFluid, min(TFactorFilm, TFactorSolid)), 1.2),
* Foam::min
(
Foam::min
(
TFactorFluid,
Foam::min(TFactorFilm, TFactorSolid)
),
1.2
),
maxDeltaT maxDeltaT
) )
); );

View File

@ -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);

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2013-2016 OpenFOAM Foundation Copyright (C) 2013-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd. Copyright (C) 2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -57,23 +57,11 @@ License
// (relative to reference value) // (relative to reference value)
scalar alphaY(pimpleDict.getOrDefault<scalar>("alphaY", 1.0)); scalar alphaY(pimpleDict.getOrDefault<scalar>("alphaY", 1.0));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl; Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale // Flow time scale
{ {
rDeltaT.ref() = rDeltaT.ref() =
@ -82,14 +70,12 @@ License
/((2*maxCo)*mesh.V()*rho()) /((2*maxCo)*mesh.V()*rho())
); );
// Limit the largest time scale (=> smallest reciprocal time) // Limit the largest time scale
rDeltaT.clamp_min(1/maxDeltaT); rDeltaT.max(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Flow = " Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl; << 1/gMax(rDeltaT.primitiveField()) << ", "
<< 1/gMin(rDeltaT.primitiveField()) << endl;
} }
// Heat release rate time scale // Heat release rate time scale
@ -100,13 +86,11 @@ License
mag(Qdot)/(alphaTemp*rho*thermo.Cp()*T) mag(Qdot)/(alphaTemp*rho*thermo.Cp()*T)
); );
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = " Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl; << 1/(gMax(rDeltaTT.field()) + VSMALL) << ", "
<< 1/(gMin(rDeltaTT.field()) + VSMALL) << endl;
rDeltaT.ref() = max(rDeltaT(), rDeltaTT);
} }
// Reaction rate time scale // Reaction rate time scale
@ -154,13 +138,11 @@ License
if (foundY) if (foundY)
{ {
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTY);
auto limits = gMinMax(rDeltaTY.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Composition = " Info<< " Composition = "
<< limits.min() << ", " << limits.max() << endl; << 1/(gMax(rDeltaTY.field()) + VSMALL) << ", "
<< 1/(gMin(rDeltaTY.field()) + VSMALL) << endl;
rDeltaT.ref() = max(rDeltaT(), rDeltaTY);
} }
else else
{ {
@ -179,22 +161,28 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
} }
// Limit rate of change of time scale (=> smallest reciprocal time) // Limit rate of change of time scale
// - reduce as much as required // - reduce as much as required
// - only increase at a fraction of old time scale // - only increase at a fraction of old time scale
if (rDeltaT0_damped) if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{ {
rDeltaT.clamp_min(rDeltaT0_damped()); rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
} }
// Update tho boundary values of the reciprocal time-step // Update tho boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions(); rDeltaT.correctBoundaryConditions();
auto limits = gMinMax(rDeltaT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = " Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl; << 1/gMax(rDeltaT.primitiveField())
<< ", " << 1/gMin(rDeltaT.primitiveField()) << endl;
} }

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2015 OpenFOAM Foundation Copyright (C) 2011-2015 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd. Copyright (C) 2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -106,7 +106,7 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
if (!this->readValueEntry(dict)) if (!this->readValueEntry(dict))
{ {
// Fallback: set to the internal field // Fallback: set to the internal field
this->extrapolateInternal(); fvPatchField<scalar>::patchInternalField(*this);
} }
refValue() = *this; refValue() = *this;

View File

@ -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

View File

@ -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)
);
} }

View File

@ -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)
);
} }

View File

@ -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;
} }

View File

@ -23,11 +23,7 @@
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
{ Info<< "Flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
} }

View File

@ -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);

View File

@ -52,26 +52,18 @@
// Update the boundary values of the reciprocal time-step // Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions(); rDeltaT.correctBoundaryConditions();
{ Info<< "Flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
if (rDeltaTSmoothingCoeff < 1.0) if (rDeltaTSmoothingCoeff < 1.0)
{ {
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
} }
{ Info<< "Smoothed flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Smoothed flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
// Limit rate of change of time scale // Limit rate of change of time scale
// - reduce as much as required // - reduce as much as required
@ -86,10 +78,8 @@
rDeltaT0 rDeltaT0
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff); *max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Damped flow time scale min/max = " Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
} }
} }

View File

@ -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);

View File

@ -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);

View File

@ -1,7 +1,7 @@
scalar CoNum = -GREAT; scalar CoNum = -GREAT;
forAll(fluidRegions, regionI) forAll(fluidRegions, regionI)
{ {
CoNum = Foam::max CoNum = max
( (
compressibleCourantNo compressibleCourantNo
( (

View File

@ -78,8 +78,8 @@
} }
rho = thermo.rho(); rho = thermo.rho();
rho = max(rho, rhoMin[i]);
rho.clamp_range(rhoMin[i], rhoMax[i]); rho = min(rho, rhoMax[i]);
rho.relax(); rho.relax();
Info<< "Min/max rho:" << min(rho).value() << ' ' Info<< "Min/max rho:" << min(rho).value() << ' '

View File

@ -387,18 +387,15 @@ updateCoeffs()
{ {
scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad()); scalar Q = gSum(kappa(Tp)*patch().magSf()*snGrad());
auto limits = gMinMax(Tp); Info<< "T solid : " << nl << endl;
auto avg = gAverage(Tp);
Info<< "T solid : " << nl << endl; Info
<< " heat transfer rate from solid:" << Q
Info << " walltemperature "
<< " heat transfer rate from solid:" << Q << " min:" << gMin(Tp)
<< " walltemperature " << " max:" << gMax(Tp)
<< " min:" << limits.min() << " avg:" << gAverage(Tp) << nl
<< " max:" << limits.max() << endl;
<< " avg:" << avg << nl
<< endl;
} }
} }
else if (regionType_ == fluid) else if (regionType_ == fluid)
@ -448,16 +445,10 @@ updateCoeffs()
scalarField qLiq((Tp - Tc)*KdeltaLiq); scalarField qLiq((Tp - Tc)*KdeltaLiq);
scalarField qVap((Tp - Tv.patchInternalField())*KdeltaVap); scalarField qVap((Tp - Tv.patchInternalField())*KdeltaVap);
auto infoT = gMinMax(Tp);
auto avgT = gAverage(Tp);
auto infoLiq = gMinMax(qLiq);
auto infoVap = gMinMax(qVap);
Info<< "T flow : " << nl << endl; Info<< "T flow : " << nl << endl;
Info<< " qLiq: " << infoLiq.min() << " - " << infoLiq.max() << nl Info<< " qLiq: " << gMin(qLiq) << " - " << gMax(qLiq) << endl;
<< " qVap: " << infoVap.min() << " - " << infoVap.max() << nl; Info<< " qVap: " << gMin(qVap) << " - " << gMax(qVap) << endl;
scalar QLiq = gSum(qLiq*patch().magSf()); scalar QLiq = gSum(qLiq*patch().magSf());
scalar QVap = gSum(qVap*patch().magSf()); scalar QVap = gSum(qVap*patch().magSf());
@ -466,9 +457,9 @@ updateCoeffs()
Info<< " Heat transfer to Vap: " << QVap << endl; Info<< " Heat transfer to Vap: " << QVap << endl;
Info<< " walltemperature " Info<< " walltemperature "
<< " min:" << infoT.min() << " min:" << gMin(Tp)
<< " max:" << infoT.max() << " max:" << gMax(Tp)
<< " avg:" << avgT << " avg:" << gAverage(Tp)
<< endl; << endl;
} }
} }

View File

@ -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
)
);
} }

View File

@ -31,7 +31,7 @@
); );
scalar regionCoNum = CoNum =
0.5*gMax 0.5*gMax
( (
sumPhi/fluidRegions[regioni].V().field() sumPhi/fluidRegions[regioni].V().field()
@ -41,9 +41,9 @@
( (
fvc::surfaceSum(mag(phi1 - phi2))().primitiveField() fvc::surfaceSum(mag(phi1 - phi2))().primitiveField()
/ fluidRegions[regioni].V().field() / fluidRegions[regioni].V().field()
)*runTime.deltaTValue(); )*runTime.deltaTValue(),
CoNum = Foam::max(CoNum, Foam::max(regionCoNum, UrCoNum)); CoNum = max(UrCoNum, CoNum);
} }
} }

View File

@ -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();

View File

@ -2,7 +2,7 @@
forAll(fluidRegions, regioni) forAll(fluidRegions, regioni)
{ {
CoNum = Foam::max CoNum = max
( (
compressibleCourantNo compressibleCourantNo
( (
@ -17,7 +17,7 @@
/* /*
forAll(porousFluidRegions, porousi) forAll(porousFluidRegions, porousi)
{ {
CoNum = Foam::max CoNum = max
( (
compressibleCourantNo compressibleCourantNo
( (

View File

@ -47,10 +47,10 @@ if (adjustTimeStep)
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
Foam::min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(), min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(),
Foam::min(runTime.deltaTValue(), maxDeltaT) min(runTime.deltaTValue(), maxDeltaT)
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaTValue() << endl;

View File

@ -48,14 +48,18 @@ if (adjustTimeStep)
scalar maxDeltaTFluid = maxCo/(CoNum + SMALL); scalar maxDeltaTFluid = maxCo/(CoNum + SMALL);
scalar maxDeltaTSolid = maxDi/(DiNum + SMALL); scalar maxDeltaTSolid = maxDi/(DiNum + SMALL);
const scalar deltaTFluid = scalar deltaTFluid =
Foam::min(Foam::min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid), 1.2); min
(
min(maxDeltaTFluid, 1.0 + 0.1*maxDeltaTFluid),
1.2
);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
Foam::min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(), min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(),
maxDeltaT maxDeltaT
) )
); );

View File

@ -22,7 +22,7 @@ forAll(solidRegions, i)
tmp<volScalarField> trho = thermo.rho(); tmp<volScalarField> trho = thermo.rho();
const volScalarField& rho = trho(); const volScalarField& rho = trho();
DiNum = Foam::max DiNum = max
( (
solidRegionDiffNo solidRegionDiffNo
( (

View File

@ -17,7 +17,7 @@ scalar DiNum = -GREAT;
tmp<volScalarField> trho = thermo.rho(); tmp<volScalarField> trho = thermo.rho();
const volScalarField& rho = trho(); const volScalarField& rho = trho();
DiNum = Foam::max DiNum = max
( (
solidRegionDiffNo solidRegionDiffNo
( (

View File

@ -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;

View File

@ -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)
);
} }

View File

@ -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)
);
} }

View File

@ -60,10 +60,13 @@ template<class Type>
void zeroCells void zeroCells
( (
GeometricField<Type, fvPatchField, volMesh>& vf, GeometricField<Type, fvPatchField, volMesh>& vf,
const labelUList& cells const labelList& cells
) )
{ {
UIndirectList<Type>(vf.primitiveField(), cells) = Zero; forAll(cells, i)
{
vf[cells[i]] = Zero;
}
} }

View File

@ -103,8 +103,8 @@ dimensionedScalar alphaMax
laminarTransport laminarTransport
); );
const labelUList& inletCells = mesh.boundary()["inlet"].faceCells(); const labelList& inletCells = mesh.boundary()["inlet"].faceCells();
//const labelUList& outletCells = mesh.boundary()["outlet"].faceCells(); //const labelList& outletCells = mesh.boundary()["outlet"].faceCells();
volScalarField alpha volScalarField alpha
( (

View File

@ -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();

View File

@ -55,7 +55,7 @@ if (mesh.changing())
dimensionedScalar rAUf("rAUf", dimTime, 1.0); dimensionedScalar rAUf("rAUf", dimTime, 1.0);
const cellCellStencilObject& overlap = Stencil::New(mesh); const cellCellStencilObject& overlap = Stencil::New(mesh);
const labelUList& cellTypes = overlap.cellTypes(); const labelList& cellTypes = overlap.cellTypes();
const labelIOList& zoneIDs = overlap.zoneID(); const labelIOList& zoneIDs = overlap.zoneID();
while (pimple.correctNonOrthogonal()) while (pimple.correctNonOrthogonal())

View File

@ -36,26 +36,18 @@
// Update the boundary values of the reciprocal time-step // Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions(); rDeltaT.correctBoundaryConditions();
{ Info<< "Flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
if (rDeltaTSmoothingCoeff < 1.0) if (rDeltaTSmoothingCoeff < 1.0)
{ {
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
} }
{ Info<< "Smoothed flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Smoothed flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
// Limit rate of change of time scale // Limit rate of change of time scale
// - reduce as much as required // - reduce as much as required
@ -70,10 +62,8 @@
rDeltaT0 rDeltaT0
*max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff); *max(rDeltaT/rDeltaT0, scalar(1) - rDeltaTDampingCoeff);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< "Damped flow time scale min/max = " Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
} }
} }

View File

@ -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 \

View File

@ -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();

View File

@ -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"

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd. Copyright (C) 2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -54,22 +54,11 @@ License
scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05)); scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl; Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale // Flow time scale
{ {
rDeltaT.ref() = rDeltaT.ref() =
@ -78,14 +67,12 @@ License
/((2*maxCo)*mesh.V()*rho()) /((2*maxCo)*mesh.V()*rho())
); );
// Limit the largest time scale (=> smallest reciprocal time) // Limit the largest time scale
rDeltaT.clamp_min(1/maxDeltaT); rDeltaT.max(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Flow = " Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField()) << ", "
<< gMax(1/rDeltaT.primitiveField()) << endl;
} }
// Reaction source time scale // Reaction source time scale
@ -106,13 +93,15 @@ License
) )
); );
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = " Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/(rDeltaTT.field() + VSMALL)) << ", "
<< gMax(1/(rDeltaTT.field() + VSMALL)) << endl;
rDeltaT.ref() = max
(
rDeltaT(),
rDeltaTT
);
} }
// Update tho boundary values of the reciprocal time-step // Update tho boundary values of the reciprocal time-step
@ -124,19 +113,25 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
} }
// Limit rate of change of time scale (=> smallest reciprocal time) // Limit rate of change of time scale
// - reduce as much as required // - reduce as much as required
// - only increase at a fraction of old time scale // - only increase at a fraction of old time scale
if (rDeltaT0_damped) if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{ {
rDeltaT.clamp_min(rDeltaT0_damped()); rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
} }
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = " Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
} }

View File

@ -36,18 +36,13 @@ Description
if (adjustTimeStep) if (adjustTimeStep)
{ {
const scalar maxDeltaTFact = const scalar maxDeltaTFact =
Foam::min min(maxCo/(CoNum + SMALL), maxCo/(surfaceFilm.CourantNumber() + SMALL));
(
maxCo/(CoNum + SMALL),
maxCo/(surfaceFilm.CourantNumber() + SMALL)
);
const scalar deltaTFact = const scalar deltaTFact =
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2); min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
deltaTFact*runTime.deltaTValue(), deltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2020,2025 OpenCFD Ltd. Copyright (C) 2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -54,22 +54,11 @@ License
scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05)); scalar alphaTemp(pimpleDict.getOrDefault("alphaTemp", 0.05));
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
Info<< "Time scales min/max:" << endl; Info<< "Time scales min/max:" << endl;
// Cache old reciprocal time scale field
volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Flow time scale // Flow time scale
{ {
rDeltaT.ref() = rDeltaT.ref() =
@ -78,14 +67,12 @@ License
/((2*maxCo)*mesh.V()*rho()) /((2*maxCo)*mesh.V()*rho())
); );
// Limit the largest time scale (=> smallest reciprocal time) // Limit the largest time scale
rDeltaT.clamp_min(1/maxDeltaT); rDeltaT.max(1/maxDeltaT);
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Flow = " Info<< " Flow = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField()) << ", "
<< gMax(1/rDeltaT.primitiveField()) << endl;
} }
// Reaction source time scale // Reaction source time scale
@ -105,13 +92,15 @@ License
) )
); );
rDeltaT.primitiveFieldRef().clamp_min(rDeltaTT);
auto limits = gMinMax(rDeltaTT.field());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Temperature = " Info<< " Temperature = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/(rDeltaTT.field() + VSMALL)) << ", "
<< gMax(1/(rDeltaTT.field() + VSMALL)) << endl;
rDeltaT.ref() = max
(
rDeltaT(),
rDeltaTT
);
} }
// Update the boundary values of the reciprocal time-step // Update the boundary values of the reciprocal time-step
@ -123,22 +112,25 @@ License
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
} }
// Limit rate of change of time scale (=> smallest reciprocal time) // Limit rate of change of time scale
// - reduce as much as required // - reduce as much as required
// - only increase at a fraction of old time scale // - only increase at a fraction of old time scale
if (rDeltaT0_damped) if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{ {
rDeltaT.clamp_min(rDeltaT0_damped()); rDeltaT = max
(
rDeltaT,
(scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
} }
// Update the boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions();
auto limits = gMinMax(rDeltaT.primitiveField());
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL));
Info<< " Overall = " Info<< " Overall = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
} }

View File

@ -48,7 +48,8 @@ U.correctBoundaryConditions();
fvOptions.correct(U); fvOptions.correct(U);
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl; Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl;

View File

@ -49,7 +49,8 @@
fvOptions.correct(U); fvOptions.correct(U);
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl; Info<< "p min/max = " << min(p).value() << ", " << max(p).value() << endl;

View File

@ -1,5 +1,6 @@
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
volScalarField rAU(1.0/UEqn.A()); volScalarField rAU(1.0/UEqn.A());
@ -93,7 +94,8 @@ p.relax();
// Recalculate density from the relaxed pressure // Recalculate density from the relaxed pressure
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl; Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl;

View File

@ -1,5 +1,6 @@
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
volScalarField rAU(1.0/UEqn.A()); volScalarField rAU(1.0/UEqn.A());
@ -93,7 +94,8 @@ p.relax();
// Recalculate density from the relaxed pressure // Recalculate density from the relaxed pressure
rho = thermo.rho(); rho = thermo.rho();
rho.clamp_range(rhoMin, rhoMax); rho = max(rho, rhoMin);
rho = min(rho, rhoMax);
rho.relax(); rho.relax();
Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl; Info<< "rho min/max : " << min(rho).value() << " " << max(rho).value() << endl;

View File

@ -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)
); );

View File

@ -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)
); );

View File

@ -36,14 +36,13 @@ Description
if (adjustTimeStep) if (adjustTimeStep)
{ {
scalar maxDeltaTFact = scalar maxDeltaTFact =
Foam::min(maxCo/(CoNum + SMALL), maxAlphaCo/(alphaCoNum + SMALL)); min(maxCo/(CoNum + SMALL), maxAlphaCo/(alphaCoNum + SMALL));
const scalar deltaTFact = scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
deltaTFact*runTime.deltaTValue(), deltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT

View File

@ -53,21 +53,6 @@
pimpleDict.getOrDefault<scalar>("maxDeltaT", GREAT) pimpleDict.getOrDefault<scalar>("maxDeltaT", GREAT)
); );
// The old reciprocal time scale field, with any damping factor
tmp<volScalarField> rDeltaT0_damped;
// Calculate damped value before applying any other changes
if
(
rDeltaTDampingCoeff < 1
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{
rDeltaT0_damped = (scalar(1) - rDeltaTDampingCoeff)*(rDeltaT);
}
volScalarField rDeltaT0("rDeltaT0", rDeltaT); volScalarField rDeltaT0("rDeltaT0", rDeltaT);
// Set the reciprocal time-step from the local Courant number // Set the reciprocal time-step from the local Courant number
@ -98,13 +83,10 @@
// Update tho boundary values of the reciprocal time-step // Update tho boundary values of the reciprocal time-step
rDeltaT.correctBoundaryConditions(); rDeltaT.correctBoundaryConditions();
{ Info<< "Flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl;
}
if (rDeltaTSmoothingCoeff < 1.0) if (rDeltaTSmoothingCoeff < 1.0)
{ {
fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff); fvc::smooth(rDeltaT, rDeltaTSmoothingCoeff);
@ -128,25 +110,27 @@
fvc::sweep(rDeltaT, alpha1, nAlphaSweepIter, alphaSpreadDiff); fvc::sweep(rDeltaT, alpha1, nAlphaSweepIter, alphaSpreadDiff);
} }
{ Info<< "Smoothed flow time scale min/max = "
auto limits = gMinMax(rDeltaT.primitiveField()); << gMin(1/rDeltaT.primitiveField())
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); << ", " << gMax(1/rDeltaT.primitiveField()) << endl;
Info<< "Smoothed flow time scale min/max = " // Limit rate of change of time scale
<< limits.min() << ", " << limits.max() << endl;
}
// Limit rate of change of time scale (=> smallest reciprocal time)
// - reduce as much as required // - reduce as much as required
// - only increase at a fraction of old time scale // - only increase at a fraction of old time scale
if (rDeltaT0_damped) if
(
rDeltaTDampingCoeff < 1.0
&& runTime.timeIndex() > runTime.startTimeIndex() + 1
)
{ {
rDeltaT.clamp_min(rDeltaT0_damped()); rDeltaT = max
(
auto limits = gMinMax(rDeltaT.primitiveField()); rDeltaT,
limits.reset(1/(limits.max()+VSMALL), 1/(limits.min()+VSMALL)); (scalar(1) - rDeltaTDampingCoeff)*rDeltaT0
);
Info<< "Damped flow time scale min/max = " Info<< "Damped flow time scale min/max = "
<< limits.min() << ", " << limits.max() << endl; << gMin(1/rDeltaT.primitiveField())
<< ", " << gMax(1/rDeltaT.primitiveField()) << endl;
} }
} }

View File

@ -36,14 +36,13 @@ Description
if (adjustTimeStep) if (adjustTimeStep)
{ {
scalar maxDeltaTFact = scalar maxDeltaTFact =
Foam::min(maxCo/(CoNum + SMALL), maxAcousticCo/(acousticCoNum + SMALL)); min(maxCo/(CoNum + SMALL), maxAcousticCo/(acousticCoNum + SMALL));
const scalar deltaTFact = scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
deltaTFact*runTime.deltaTValue(), deltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT

View File

@ -37,15 +37,11 @@ if (adjustTimeStep)
if (CoNum > SMALL) if (CoNum > SMALL)
{ {
scalar maxDeltaTFact = scalar maxDeltaTFact =
Foam::min min(maxCo/(CoNum + SMALL), maxAcousticCo/(acousticCoNum + SMALL));
(
maxCo/(CoNum + SMALL),
maxAcousticCo/(acousticCoNum + SMALL)
);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
maxDeltaTFact*runTime.deltaTValue(), maxDeltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT

View File

@ -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_);

View File

@ -26,12 +26,12 @@ forAll(dgdt, celli)
{ {
if (dgdt[celli] > 0.0) if (dgdt[celli] > 0.0)
{ {
Sp[celli] -= dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Sp[celli] -= dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
Su[celli] += dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Su[celli] += dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
} }
else if (dgdt[celli] < 0.0) else if (dgdt[celli] < 0.0)
{ {
Sp[celli] += dgdt[celli]/Foam::max(alpha1[celli], 1e-4); Sp[celli] += dgdt[celli]/max(alpha1[celli], 1e-4);
} }
} }

View File

@ -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)
); );

View File

@ -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)
@ -210,7 +209,7 @@ void VoFPatchTransfer::correct
film().toRegion(patchi, Vp); film().toRegion(patchi, Vp);
const polyPatch& pp = pbm[patchi]; const polyPatch& pp = pbm[patchi];
const labelUList& faceCells = pp.faceCells(); const labelList& faceCells = pp.faceCells();
// Accumulate the total mass removed from patch // Accumulate the total mass removed from patch
scalar dMassPatch = 0; scalar dMassPatch = 0;

View File

@ -26,12 +26,12 @@ forAll(dgdt, celli)
{ {
if (dgdt[celli] > 0.0) if (dgdt[celli] > 0.0)
{ {
Sp[celli] -= dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Sp[celli] -= dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
Su[celli] += dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Su[celli] += dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
} }
else if (dgdt[celli] < 0.0) else if (dgdt[celli] < 0.0)
{ {
Sp[celli] += dgdt[celli]/Foam::max(alpha1[celli], 1e-4); Sp[celli] += dgdt[celli]/max(alpha1[celli], 1e-4);
} }
} }

View File

@ -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)
); );

View File

@ -26,12 +26,12 @@ forAll(dgdt, celli)
{ {
if (dgdt[celli] > 0.0) if (dgdt[celli] > 0.0)
{ {
Sp[celli] -= dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Sp[celli] -= dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
Su[celli] += dgdt[celli]/Foam::max(1.0 - alpha1[celli], 1e-4); Su[celli] += dgdt[celli]/max(1.0 - alpha1[celli], 1e-4);
} }
else if (dgdt[celli] < 0.0) else if (dgdt[celli] < 0.0)
{ {
Sp[celli] += dgdt[celli]/Foam::max(alpha1[celli], 1e-4); Sp[celli] += dgdt[celli]/max(alpha1[celli], 1e-4);
} }
} }

View File

@ -135,14 +135,14 @@ public:
virtual volScalarField& he() virtual volScalarField& he()
{ {
NotImplemented; NotImplemented;
return volScalarField::null().constCast(); 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 []

View File

@ -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)
);
} }

View File

@ -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_)

View File

@ -243,14 +243,14 @@ public:
virtual volScalarField& he() virtual volScalarField& he()
{ {
NotImplemented; NotImplemented;
return volScalarField::null().constCast(); 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 []

View File

@ -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
( (

View File

@ -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)
); );

View File

@ -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)
)
); );
} }

View File

@ -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())
{ {

View File

@ -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_;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2017-2025 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)
{ {
@ -679,7 +696,7 @@ void Foam::radiation::laserDTRM::calculate()
} }
} }
scalar totalQ = gWeightedSum(mesh_.V(), Q_.primitiveField()); scalar totalQ = gSum(Q_.primitiveFieldRef()*mesh_.V());
Info << "Total energy absorbed [W]: " << totalQ << endl; Info << "Total energy absorbed [W]: " << totalQ << endl;
if (mesh_.time().writeTime()) if (mesh_.time().writeTime())

View File

@ -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();

View File

@ -36,13 +36,13 @@ Description
if (adjustTimeStep) if (adjustTimeStep)
{ {
scalar maxDeltaTFact = scalar maxDeltaTFact =
Foam::min min
( (
maxCo/(CoNum + SMALL), maxCo/(CoNum + SMALL),
Foam::min min
( (
maxAlphaCo/(alphaCoNum + SMALL), maxAlphaCo/(alphaCoNum + SMALL),
Foam::min min
( (
maxAlphaDdt/(ddtAlphaNum + SMALL), maxAlphaDdt/(ddtAlphaNum + SMALL),
maxDi/(DiNum + SMALL) maxDi/(DiNum + SMALL)
@ -50,18 +50,16 @@ if (adjustTimeStep)
) )
); );
const scalar deltaTFact = scalar deltaTFact = min(min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
Foam::min(Foam::min(maxDeltaTFact, 1.0 + 0.1*maxDeltaTFact), 1.2);
runTime.setDeltaT runTime.setDeltaT
( (
Foam::min min
( (
deltaTFact*runTime.deltaTValue(), deltaTFact*runTime.deltaTValue(),
maxDeltaT maxDeltaT
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaTValue() << endl;
} }

View File

@ -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>

View File

@ -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;
} }

View File

@ -86,14 +86,14 @@ public:
virtual volScalarField& he() virtual volScalarField& he()
{ {
NotImplemented; NotImplemented;
return volScalarField::null().constCast(); 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 []

View File

@ -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)
); );

View File

@ -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();

View File

@ -65,7 +65,7 @@
dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0); dimensionedScalar rAUf("rAUf", dimTime/rho.dimensions(), 1.0);
const cellCellStencilObject& overlap = Stencil::New(mesh); const cellCellStencilObject& overlap = Stencil::New(mesh);
const labelUList& cellTypes = overlap.cellTypes(); const labelList& cellTypes = overlap.cellTypes();
const labelIOList& zoneIDs = overlap.zoneID(); const labelIOList& zoneIDs = overlap.zoneID();
while (pimple.correctNonOrthogonal()) while (pimple.correctNonOrthogonal())

View File

@ -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)
); );

View File

@ -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)
); );

View File

@ -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)

View File

@ -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)
);
} }

View File

@ -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)
); );

View File

@ -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
( (

View File

@ -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)
{ {

View File

@ -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(),

View File

@ -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(),

View File

@ -272,7 +272,10 @@ while (pimple.correct())
).ptr() ).ptr()
); );
pEqnComps[phasei].faceFluxCorrectionPtr(nullptr); deleteDemandDrivenData
(
pEqnComps[phasei].faceFluxCorrectionPtr()
);
pEqnComps[phasei].relax(); pEqnComps[phasei].relax();
} }

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