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
13013 changed files with 65181 additions and 240338 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=2412 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -135,14 +135,14 @@ public:
virtual volScalarField& he() virtual volScalarField& he()
{ {
NotImplemented; NotImplemented;
return const_cast<volScalarField&>(volScalarField::null()); return thermo1_->he();
} }
//- Enthalpy/Internal energy [J/kg] //- Enthalpy/Internal energy [J/kg]
virtual const volScalarField& he() const virtual const volScalarField& he() const
{ {
NotImplemented; NotImplemented;
return volScalarField::null(); return thermo1_->he();
} }
//- Enthalpy/Internal energy //- Enthalpy/Internal energy
@ -213,7 +213,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Heat capacity at constant volume [J/kg/K] //- Heat capacity at constant volume [J/kg/K]
@ -236,7 +236,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Gamma = Cp/Cv [] //- Gamma = Cp/Cv []

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 const_cast<volScalarField&>(volScalarField::null()); return phases_[0].thermo().he();
} }
//- Enthalpy/Internal energy [J/kg] //- Enthalpy/Internal energy [J/kg]
virtual const volScalarField& he() const virtual const volScalarField& he() const
{ {
NotImplemented; NotImplemented;
return volScalarField::null(); return phases_[0].thermo().he();
} }
//- Enthalpy/Internal energy //- Enthalpy/Internal energy
@ -327,7 +327,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Heat capacity at constant volume [J/kg/K] //- Heat capacity at constant volume [J/kg/K]
@ -350,7 +350,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Gamma = Cp/Cv [] //- Gamma = Cp/Cv []

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-2023 OpenCFD Ltd. Copyright (C) 2017-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -407,8 +407,7 @@ Foam::radiation::laserDTRM::laserDTRM(const volScalarField& T)
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimPower/dimVolume, Zero) dimensionedScalar(dimPower/dimVolume, Zero)
@ -505,8 +504,7 @@ Foam::radiation::laserDTRM::laserDTRM
mesh_.time().timeName(), mesh_.time().timeName(),
mesh_, mesh_,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE, IOobject::AUTO_WRITE
IOobject::REGISTER
), ),
mesh_, mesh_,
dimensionedScalar(dimPower/pow3(dimLength), Zero) dimensionedScalar(dimPower/pow3(dimLength), Zero)
@ -537,23 +535,42 @@ Foam::label Foam::radiation::laserDTRM::nBands() const
void Foam::radiation::laserDTRM::calculate() void Foam::radiation::laserDTRM::calculate()
{ {
auto treflectingCells = volScalarField::New tmp<volScalarField> treflectingCells
( (
"reflectingCellsVol", new volScalarField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedScalar("zero", dimless, -1) (
"reflectingCellsVol",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh_,
dimensionedScalar("zero", dimless, -1)
)
); );
auto& reflectingCellsVol = treflectingCells.ref(); volScalarField& reflectingCellsVol = treflectingCells.ref();
auto tnHat = volVectorField::New
tmp<volVectorField> tnHat
( (
"nHat", new volVectorField
IOobject::NO_REGISTER, (
mesh_, IOobject
dimensionedVector(dimless, Zero) (
"nHat",
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh_,
dimensionedVector(dimless, Zero)
)
); );
auto& nHat = tnHat.ref(); volVectorField& nHat = tnHat.ref();
// Reset the field // Reset the field
@ -669,9 +686,9 @@ void Foam::radiation::laserDTRM::calculate()
globalIndex::gatherInplaceOp(lines); globalIndex::gatherInplaceOp(lines);
if (UPstream::master()) if (Pstream::master())
{ {
OBJstream os(type() + "-particlePath.obj"); OBJstream os(type() + ":particlePath.obj");
for (label pointi = 0; pointi < lines.size(); pointi += 2) for (label pointi = 0; pointi < lines.size(); pointi += 2)
{ {

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

@ -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 const_cast<volScalarField&>(volScalarField::null()); return p();
} }
//- Return access to the internal energy field [J/Kg] //- Return access to the internal energy field [J/Kg]
virtual const volScalarField& he() const virtual const volScalarField& he() const
{ {
NotImplemented; NotImplemented;
return volScalarField::null(); return p();
} }
//- Enthalpy/Internal energy //- Enthalpy/Internal energy
@ -182,7 +182,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Return Cv of the mixture //- Return Cv of the mixture
@ -205,7 +205,7 @@ public:
) const ) const
{ {
NotImplemented; NotImplemented;
return nullptr; return tmp<scalarField>::New(p);
} }
//- Gamma = Cp/Cv [] //- Gamma = Cp/Cv []

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

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

View File

@ -6,13 +6,11 @@ const volScalarField& alpha2 = phase2;
volVectorField& U1 = phase1.URef(); volVectorField& U1 = phase1.URef();
surfaceScalarField& phi1 = phase1.phiRef(); surfaceScalarField& phi1 = phase1.phiRef();
const tmp<surfaceScalarField> talphaPhi1 = phase1.alphaPhi(); const surfaceScalarField& alphaPhi1 = phase1.alphaPhi();
const auto& alphaPhi1 = talphaPhi1();
volVectorField& U2 = phase2.URef(); volVectorField& U2 = phase2.URef();
surfaceScalarField& phi2 = phase2.phiRef(); surfaceScalarField& phi2 = phase2.phiRef();
const tmp<surfaceScalarField> talphaPhi2 = phase2.alphaPhi(); const surfaceScalarField& alphaPhi2 = phase2.alphaPhi();
const auto& alphaPhi2 = talphaPhi2();
surfaceScalarField& phi = fluid.phi(); surfaceScalarField& phi = fluid.phi();

View File

@ -5,7 +5,12 @@ if (nAlphaSubCycles > 1)
dimensionedScalar totalDeltaT = runTime.deltaT(); dimensionedScalar totalDeltaT = runTime.deltaT();
surfaceScalarField rhoPhiSum surfaceScalarField rhoPhiSum
( (
mesh.newIOobject("rhoPhiSum"), IOobject
(
"rhoPhiSum",
runTime.timeName(),
mesh
),
mesh, mesh,
dimensionedScalar(rhoPhi.dimensions(), Zero) dimensionedScalar(rhoPhi.dimensions(), Zero)
); );

View File

@ -50,7 +50,7 @@
+ ( + (
he2.name() == thermo2.phasePropertyName("e") he2.name() == thermo2.phasePropertyName("e")
? fvc::div(fvc::absolute(alphaPhi2, alpha2, U2), p) ? fvc::div(fvc::absolute(alphaPhi2, alpha2, U2), p)
+ p*fvc::ddt(alpha2) + p*fvc::ddt(alpha1)
: -alpha2*dpdt : -alpha2*dpdt
) )

View File

@ -100,6 +100,15 @@ public:
const tractionDisplacementFvPatchVectorField& const tractionDisplacementFvPatchVectorField&
); );
//- Construct and return a clone
virtual tmp<fvPatchVectorField> clone() const
{
return tmp<fvPatchVectorField>
(
new tractionDisplacementFvPatchVectorField(*this)
);
}
//- Construct as copy setting internal field reference //- Construct as copy setting internal field reference
tractionDisplacementFvPatchVectorField tractionDisplacementFvPatchVectorField
( (
@ -107,19 +116,16 @@ public:
const DimensionedField<vector, volMesh>& const DimensionedField<vector, volMesh>&
); );
//- Return a clone //- Construct and return a clone setting internal field reference
virtual tmp<fvPatchField<vector>> clone() const virtual tmp<fvPatchVectorField> clone
{
return fvPatchField<vector>::Clone(*this);
}
//- Clone with an internal field reference
virtual tmp<fvPatchField<vector>> clone
( (
const DimensionedField<vector, volMesh>& iF const DimensionedField<vector, volMesh>& iF
) const ) const
{ {
return fvPatchField<vector>::Clone(*this, iF); return tmp<fvPatchVectorField>
(
new tractionDisplacementFvPatchVectorField(*this, iF)
);
} }

View File

@ -98,6 +98,15 @@ public:
const tractionDisplacementCorrectionFvPatchVectorField& const tractionDisplacementCorrectionFvPatchVectorField&
); );
//- Construct and return a clone
virtual tmp<fvPatchVectorField> clone() const
{
return tmp<fvPatchVectorField>
(
new tractionDisplacementCorrectionFvPatchVectorField(*this)
);
}
//- Construct as copy setting internal field reference //- Construct as copy setting internal field reference
tractionDisplacementCorrectionFvPatchVectorField tractionDisplacementCorrectionFvPatchVectorField
( (
@ -105,19 +114,16 @@ public:
const DimensionedField<vector, volMesh>& const DimensionedField<vector, volMesh>&
); );
//- Return a clone //- Construct and return a clone setting internal field reference
virtual tmp<fvPatchField<vector>> clone() const virtual tmp<fvPatchVectorField> clone
{
return fvPatchField<vector>::Clone(*this);
}
//- Clone with an internal field reference
virtual tmp<fvPatchField<vector>> clone
( (
const DimensionedField<vector, volMesh>& iF const DimensionedField<vector, volMesh>& iF
) const ) const
{ {
return fvPatchField<vector>::Clone(*this, iF); return tmp<fvPatchVectorField>
(
new tractionDisplacementCorrectionFvPatchVectorField(*this, iF)
);
} }

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2018-2025 OpenCFD Ltd. Copyright (C) 2018-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -25,12 +25,9 @@ License
Description Description
Test the sizeof for basic types. Test the sizeof for basic types.
Also tests how the data mapping of OpenFOAM types to UPstream (MPI)
type ids are handled.
Can be compiled and run without any OpenFOAM libraries. Can be compiled and run without any OpenFOAM libraries.
g++ -std=c++17 -oTest-machine-sizes Test-machine-sizes.cpp g++ -std=c++11 -oTest-machine-sizes Test-machine-sizes.cpp
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -40,114 +37,6 @@ Description
#include <iostream> #include <iostream>
#include <limits> #include <limits>
#include <typeinfo> #include <typeinfo>
#include <type_traits>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Partial copy from UPstream.H
//- Some MPI data types
//
//- Mapping of some fundamental and aggregate types to MPI data types
enum class dataTypes : int
{
// Builtin Types [8]:
DataTypes_begin, //!< Begin builtin types (internal use)
type_byte = DataTypes_begin, // also for char, unsigned char
type_int32,
type_int64,
type_uint32,
type_uint64,
type_float,
type_double,
type_long_double,
invalid
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Partial copy from UPstreamTraits.H
//- A supported UPstream data type (intrinsic or user-defined)
template<class T>
struct UPstream_base_dataType : std::false_type
{
static constexpr auto datatype_id = dataTypes::invalid;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Specializations of the above,
// each to match the elements of UPstream::dataTypes
#undef defineUPstreamDataTraits
#define defineUPstreamDataTraits(TypeId, Type) \
template<> struct UPstream_base_dataType<Type> : std::true_type \
{ \
static constexpr auto datatype_id = dataTypes::TypeId; \
};
defineUPstreamDataTraits(type_byte, char);
defineUPstreamDataTraits(type_byte, unsigned char);
defineUPstreamDataTraits(type_int32, int32_t);
defineUPstreamDataTraits(type_int64, int64_t);
defineUPstreamDataTraits(type_uint32, uint32_t);
defineUPstreamDataTraits(type_uint64, uint64_t);
defineUPstreamDataTraits(type_float, float);
defineUPstreamDataTraits(type_double, double);
defineUPstreamDataTraits(type_long_double, long double);
#undef defineUPstreamDataTraits
//- Explicit handling of data type aliases. This is necessary since
//- different systems map things like 'unsigned long' differently but we
//- restrict ourselves to int32/int64 types
template<class T>
struct UPstream_alias_dataType
:
std::bool_constant
<
// Base type (no alias needed)
UPstream_base_dataType<std::remove_cv_t<T>>::value ||
(
// Or some int 32/64 type to re-map
std::is_integral_v<T>
&& (sizeof(T) == sizeof(int32_t) || sizeof(T) == sizeof(int64_t))
)
>
{
// Is it using the base type? (no alias needed)
static constexpr bool is_base =
UPstream_base_dataType<std::remove_cv_t<T>>::value;
using base = std::conditional_t
<
UPstream_base_dataType<std::remove_cv_t<T>>::value, // is_base
std::remove_cv_t<T>,
std::conditional_t
<
(
std::is_integral_v<T>
&& (sizeof(T) == sizeof(int32_t) || sizeof(T) == sizeof(int64_t))
),
std::conditional_t
<
(sizeof(T) == sizeof(int32_t)),
std::conditional_t<std::is_signed_v<T>, int32_t, uint32_t>,
std::conditional_t<std::is_signed_v<T>, int64_t, uint64_t>
>,
char // Fallback value (assuming it is contiguous)
>
>;
static constexpr auto datatype_id =
UPstream_base_dataType<base>::datatype_id;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class T> template<class T>
void print(const char* name, bool showLimits = true) void print(const char* name, bool showLimits = true)
@ -158,78 +47,28 @@ void print(const char* name, bool showLimits = true)
if (showLimits) if (showLimits)
{ {
std::cout std::cout
<< " max=<"; << " \"max\"=" << std::numeric_limits<T>::max();
if constexpr (sizeof(T) == 1)
{
std::cout << int(std::numeric_limits<T>::max());
}
else
{
std::cout << std::numeric_limits<T>::max();
}
std::cout << '>';
}
// A declared or deduced MPI type, or aliased
std::cout
<< " is_mpi=" << UPstream_base_dataType<T>::value
<< " (" << int(UPstream_base_dataType<T>::datatype_id) << ")";
if (UPstream_alias_dataType<T>::value)
{
if (UPstream_alias_dataType<T>::is_base)
{
std::cout<< " is_base";
}
else
{
std::cout<< " is_alias ("
<< int(UPstream_alias_dataType<T>::datatype_id) << ")";
}
}
else
{
std::cout<< " no_alias";
} }
std::cout<< '\n'; std::cout<< '\n';
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
std::cout<< "c++ = " << __cplusplus << '\n'; std::cout<< "c++ = " << __cplusplus << '\n';
std::cout<< "machine sizes (and some MPI traits)\n---\n\n"; std::cout<< "machine sizes\n---\n\n";
print<int8_t>("int8_t");
print<uint8_t>("uint8_t");
print<int16_t>("int16_t");
print<uint16_t>("uint16_t");
print<int32_t>("int32_t");
print<uint32_t>("uint32_t");
print<int64_t>("int64_t");
print<uint64_t>("uint64_t");
std::cout << '\n';
print<char>("char");
print<unsigned char>("unsigned char");
print<short>("short"); print<short>("short");
print<int>("int"); print<int>("int");
print<unsigned>("unsigned");
print<long>("long"); print<long>("long");
print<unsigned long>("unsigned long"); print<unsigned long>("unsigned long");
print<std::size_t>("std::size_t");
print<long long>("long long"); print<long long>("long long");
std::cout << '\n';
print<std::size_t>("std::size_t");
print<std::streamsize>("std::streamsize");
std::cout << '\n';
print<float>("float"); print<float>("float");
print<double>("double"); print<double>("double");
print<long double>("long double"); print<long double>("long double");

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2020-2025 OpenCFD Ltd. Copyright (C) 2020-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -38,11 +38,12 @@ Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "complex.H"
#include "Tensor.H" #include "Tensor.H"
#include "SymmTensor.H" #include "SymmTensor.H"
#include "SphericalTensor.H" #include "SphericalTensor.H"
#include "DiagTensor.H" #include "DiagTensor.H"
#include "scalar.H"
#include "complex.H"
using namespace Foam; using namespace Foam;
@ -56,11 +57,45 @@ unsigned nTest_ = 0;
unsigned nFail_ = 0; unsigned nFail_ = 0;
// Compare two floating point types, and print output.
// Do ++nFail_ if values of two objects are not equal within a given tolerance.
// The function is converted from PEP-485.
template<class Type>
typename std::enable_if<pTraits<Type>::rank == 0, void>::type
cmp
(
const word& msg,
const Type& x,
const Type& y,
const scalar relTol = 1e-8, //<! are values the same within 8 decimals
const scalar absTol = 0 //<! useful for cmps near zero
)
{
Info<< msg << x << endl;
unsigned nFail = 0;
if (max(absTol, relTol*max(mag(x), mag(y))) < mag(x - y))
{
++nFail;
}
if (nFail)
{
Info<< nl
<< " #### Fail in " << nFail << " comps ####" << nl << endl;
++nFail_;
}
++nTest_;
}
// Compare two containers elementwise, and print output. // Compare two containers elementwise, and print output.
// Do ++nFail_ if two components are not equal within a given tolerance. // Do ++nFail_ if two components are not equal within a given tolerance.
// The function is converted from PEP-485 // The function is converted from PEP-485
template<class Type> template<class Type>
void cmp typename std::enable_if<pTraits<Type>::rank != 0, void>::type
cmp
( (
const word& msg, const word& msg,
const Type& x, const Type& x,
@ -69,37 +104,18 @@ void cmp
const scalar absTol = 0 const scalar absTol = 0
) )
{ {
const auto notEqual = [=](const auto& a, const auto& b) -> bool Info<< msg << x << endl;
{
return
(
Foam::max(absTol, relTol*Foam::max(Foam::mag(a), Foam::mag(b)))
< Foam::mag(a - b)
);
};
unsigned nFail = 0; unsigned nFail = 0;
if constexpr (is_vectorspace_v<Type>) for (direction i = 0; i < pTraits<Type>::nComponents; ++i)
{ {
for (direction i = 0; i < pTraits<Type>::nComponents; ++i) if (max(absTol, relTol*max(mag(x[i]), mag(y[i]))) < mag(x[i] - y[i]))
{
if (notEqual(x[i], y[i]))
{
++nFail;
}
}
}
else
{
if (notEqual(x, y))
{ {
++nFail; ++nFail;
} }
} }
Info<< msg << x << endl;
if (nFail) if (nFail)
{ {
Info<< nl Info<< nl
@ -352,26 +368,27 @@ void test_global_opers(Type)
// Do compile-time recursion over the given types // Do compile-time recursion over the given types
template<std::size_t I = 0, typename... Tp> template<std::size_t I = 0, typename... Tp>
void run_tests(const std::tuple<Tp...>& types, const List<word>& names) inline typename std::enable_if<I == sizeof...(Tp), void>::type
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID){}
template<std::size_t I = 0, typename... Tp>
inline typename std::enable_if<I < sizeof...(Tp), void>::type
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID)
{ {
if constexpr (I < sizeof...(Tp)) Info<< nl << " ## Test constructors: "<< typeID[I] <<" ##" << nl;
{ test_constructors(std::get<I>(types));
const auto& name = names[I];
Info<< nl << " ## Test constructors: " << name << " ##" << nl; Info<< nl << " ## Test member functions: "<< typeID[I] <<" ##" << nl;
test_constructors(std::get<I>(types)); test_member_funcs(std::get<I>(types));
Info<< nl << " ## Test member functions: " << name << " ##" << nl; Info<< nl << " ## Test global functions: "<< typeID[I] << " ##" << nl;
test_member_funcs(std::get<I>(types)); test_global_funcs(std::get<I>(types));
Info<< nl << " ## Test global functions: " << name << " ##" << nl; Info<< nl << " ## Test global operators: "<< typeID[I] <<" ##" << nl;
test_global_funcs(std::get<I>(types)); test_global_opers(std::get<I>(types));
Info<< nl << " ## Test global operators: " << name << " ##" << nl; run_tests<I + 1, Tp...>(types, typeID);
test_global_opers(std::get<I>(types));
run_tests<I + 1, Tp...>(types, names);
}
} }
@ -386,8 +403,8 @@ int main()
const List<word> typeID const List<word> typeID
({ ({
"DiagTensor<float>", "DiagTensor<floatScalar>",
"DiagTensor<double>", "DiagTensor<doubleScalar>",
"DiagTensor<complex>" "DiagTensor<complex>"
}); });

View File

@ -0,0 +1,3 @@
Test-Dictionary.C
EXE = $(FOAM_USER_APPBIN)/Test-Dictionary

View File

@ -25,10 +25,10 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application Application
Test-PtrDictionary1 Test-Dictionary
Description Description
Tests for Dictionary (not dictionary) and PtrDictionary Tests for Dictionary (not dictionary)
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -185,7 +185,7 @@ int main(int argc, char *argv[])
} }
std::cout<< "iter type: " std::cout<< "iter type: "
<< typeid(std::begin(scalarDict2)).name() << '\n'; << typeid(stdFoam::begin(scalarDict2)).name() << '\n';
scalarDict.transfer(scalarDict2); scalarDict.transfer(scalarDict2);

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation Copyright (C) 2011-2017 OpenFOAM Foundation
Copyright (C) 2019-2025 OpenCFD Ltd. Copyright (C) 2019-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -85,7 +85,8 @@ void compileInfo()
template<class FixedListType> template<class FixedListType>
std::enable_if_t<(FixedListType::max_size() == 2), bool> typename std::enable_if
<(FixedListType::max_size() == 2), bool>::type
is_pair() is_pair()
{ {
return true; return true;
@ -93,7 +94,7 @@ is_pair()
template<class FixedListType> template<class FixedListType>
std::enable_if_t<(FixedListType::max_size() != 2), std::string> typename std::enable_if<(FixedListType::max_size() != 2), std::string>::type
is_pair() is_pair()
{ {
return "not really at all"; return "not really at all";

View File

@ -1,4 +1,5 @@
EXE_INC = \ EXE_INC = \
-DFULLDEBUG -g \
-I$(LIB_SRC)/meshTools/lnInclude -I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \ EXE_LIBS = \

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -70,10 +70,7 @@ int main(int argc, char *argv[])
); );
labelList cellToCoarse(identity(mesh.nCells())); labelList cellToCoarse(identity(mesh.nCells()));
CompactListList<label> coarseToCell labelListList coarseToCell(invertOneToMany(mesh.nCells(), cellToCoarse));
(
invertOneToManyCompact(mesh.nCells(), cellToCoarse)
);
++runTime; ++runTime;
@ -81,21 +78,23 @@ int main(int argc, char *argv[])
{ {
volScalarField scalarAgglomeration volScalarField scalarAgglomeration
( (
mesh.thisDb().newIOobject("agglomeration"), IOobject
(
"agglomeration",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh, mesh,
Foam::zero{}, dimensionedScalar(dimless, Zero)
dimless,
fvPatchFieldBase::zeroGradientType()
); );
scalarField& fld = scalarAgglomeration.primitiveFieldRef(); scalarField& fld = scalarAgglomeration.primitiveFieldRef();
forAll(fld, celli) forAll(fld, celli)
{ {
fld[celli] = cellToCoarse[celli]; fld[celli] = cellToCoarse[celli];
} }
if (normalise) fld /= max(fld);
{
fld /= max(fld);
}
scalarAgglomeration.correctBoundaryConditions(); scalarAgglomeration.correctBoundaryConditions();
scalarAgglomeration.write(); scalarAgglomeration.write();
@ -143,23 +142,31 @@ int main(int argc, char *argv[])
} }
forAll(addr, finei) forAll(addr, fineI)
{ {
labelUIndList(cellToCoarse, coarseToCell[finei]) = addr[finei]; const labelList& cellLabels = coarseToCell[fineI];
forAll(cellLabels, i)
{
cellToCoarse[cellLabels[i]] = addr[fineI];
}
} }
coarseToCell = invertOneToManyCompact(coarseSize, cellToCoarse); coarseToCell = invertOneToMany(coarseSize, cellToCoarse);
// Write agglomeration // Write agglomeration
{ {
volScalarField scalarAgglomeration volScalarField scalarAgglomeration
( (
mesh.thisDb().newIOobject("agglomeration"), IOobject
(
"agglomeration",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh, mesh,
Foam::zero{}, dimensionedScalar(dimless, Zero)
dimless,
fvPatchFieldBase::zeroGradientType()
); );
scalarField& fld = scalarAgglomeration.primitiveFieldRef(); scalarField& fld = scalarAgglomeration.primitiveFieldRef();
forAll(fld, celli) forAll(fld, celli)
{ {
@ -186,9 +193,9 @@ int main(int argc, char *argv[])
} }
// Determine coarse cc // Determine coarse cc
forAll(coarseToCell, coarsei) forAll(coarseToCell, coarseI)
{ {
const auto& cellLabels = coarseToCell[coarsei]; const labelList& cellLabels = coarseToCell[coarseI];
point coarseCc = average point coarseCc = average
( (
@ -197,8 +204,10 @@ int main(int argc, char *argv[])
meshTools::writeOBJ(str, coarseCc); meshTools::writeOBJ(str, coarseCc);
vertI++; vertI++;
for (label celli : cellLabels) forAll(cellLabels, i)
{ {
label celli = cellLabels[i];
str << "l " << celli+1 << ' ' << vertI << nl; str << "l " << celli+1 << ' ' << vertI << nl;
} }
} }

View File

@ -124,11 +124,11 @@ int main(int argc, char *argv[])
<< "toc: " << flatOutput(table0.toc()) << nl; << "toc: " << flatOutput(table0.toc()) << nl;
HashTable<label, label, Hash<label>> table2 HashTable<label, label, Hash<label>> table2
( ({
// From key/value pairs {3, 10},
labelList({3, 5, 7}), {5, 12},
labelList({10, 12, 16}) {7, 16}
); });
Info<< "table2: " << table2 << nl Info<< "table2: " << table2 << nl
<< "toc: " << flatOutput(table2.toc()) << nl; << "toc: " << flatOutput(table2.toc()) << nl;

View File

@ -1,3 +1,3 @@
Test-HashTable4.cxx Test-HashTable4.C
EXE = $(FOAM_USER_APPBIN)/Test-HashTable4 EXE = $(FOAM_USER_APPBIN)/Test-HashTable4

View File

@ -159,6 +159,7 @@ int main(int argc, char *argv[])
cpuTime timer; cpuTime timer;
memInfo mem;
Info<< "insert " << nElem << " (int) elements"; Info<< "insert " << nElem << " (int) elements";
if (optFnd) if (optFnd)
@ -206,7 +207,7 @@ int main(int argc, char *argv[])
#endif #endif
loopInsert(map, nElem); loopInsert(map, nElem);
timer.resetCpuTimeIncrement(); (void)timer.cpuTimeIncrement();
unsigned long sum = 0; unsigned long sum = 0;
for (label loopi = 0; loopi < nFind*nLoops; ++loopi) for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
@ -268,7 +269,7 @@ int main(int argc, char *argv[])
HashSet<label, Hash<label>> map(32); HashSet<label, Hash<label>> map(32);
loopInsert(map, nElem); loopInsert(map, nElem);
timer.resetCpuTimeIncrement(); (void)timer.cpuTimeIncrement();
unsigned long sum = 0; unsigned long sum = 0;
for (label loopi = 0; loopi < nFind*nLoops; ++loopi) for (label loopi = 0; loopi < nFind*nLoops; ++loopi)
@ -305,8 +306,7 @@ int main(int argc, char *argv[])
} }
Info<< timer.cpuTimeIncrement() << " s\n"; Info<< timer.cpuTimeIncrement() << " s\n";
Foam::memInfo{}.writeEntry("mem-info", Info); Info<< "mem info: " << mem.update() << endl;
Info<< endl;
return 0; return 0;
} }

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2021-2025 OpenCFD Ltd. Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -42,11 +42,9 @@ Note
#include "Hash.H" #include "Hash.H"
#ifdef FULLDEBUG #ifdef FULLDEBUG
#define HashTypeInfo(Name) \ #define HashTypeInfo(Args) void info() { std::cerr<< "" Args << "\n"; }
static constexpr const char* name() noexcept { return Name; } \
void info() const { std::cerr<< name() << " hashing\n"; }
#else #else
#define HashTypeInfo(Name) void info() const {} #define HashTypeInfo(Args) void info() {}
#endif #endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -55,36 +53,20 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class HashFunc Declaration Class Hash Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
template<class T> template<class T, class SFINAEType=bool>
struct HashFun struct HashFun
{ {
void info() const #ifdef FULLDEBUG
{ static constexpr const char* name() noexcept { return "default"; }
#ifdef FULLDEBUG #endif
if constexpr (std::is_base_of_v<std::string, T>) HashTypeInfo("plain hash")
{
std::cerr<< "std::string hashing\n";
}
else
{
std::cerr<< "default hashing\n";
}
#endif
}
unsigned operator()(const T& obj, unsigned seed=0) const unsigned operator()(const T& obj, unsigned seed=0) const
{ {
if constexpr (std::is_base_of_v<std::string, T>) return Foam::Hasher(&obj, sizeof(obj), seed);
{
return Foam::Hasher(obj.data(), obj.size(), seed);
}
else
{
return Foam::Hasher(&obj, sizeof(obj), seed);
}
} }
}; };
@ -94,17 +76,45 @@ struct HashFun
//- Hashing for label //- Hashing for label
template<> struct HashFun<Foam::label> : Hash<label> template<> struct HashFun<Foam::label> : Hash<label>
{ {
HashTypeInfo("label") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "label"; }
#endif
HashTypeInfo("hash label")
}; };
//- Hashing for pointers, interpret pointer as a integer type //- Hashing for pointers, interpret pointer as a integer type
template<> struct HashFun<void*> : Hash<void *> template<> struct HashFun<void*> : Hash<void *>
{ {
HashTypeInfo("pointer") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "pointer"; }
#endif
HashTypeInfo("hash ptr")
}; };
//- Hashing for string types
template<class StringType>
struct HashFun
<
StringType,
typename std::enable_if
<
std::is_base_of<std::string, StringType>::value, bool
>::type
>
{
#ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "string"; }
#endif
HashTypeInfo("hash string")
unsigned operator()(const std::string& obj, unsigned seed=0) const
{
return Foam::Hasher(obj.data(), obj.size(), seed);
}
};
} // End namespace Foam } // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -123,56 +133,83 @@ namespace Foam
template<> struct HashFun<edge> : Hash<edge> template<> struct HashFun<edge> : Hash<edge>
{ {
HashTypeInfo("edge") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "edge"; }
#endif
HashTypeInfo("hash edge")
}; };
template<> struct HashFun<face> : Hash<face> template<> struct HashFun<face> : Hash<face>
{ {
HashTypeInfo("face") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "face"; }
#endif
HashTypeInfo("hash face")
}; };
template<> struct HashFun<triFace> : Hash<triFace> template<> struct HashFun<triFace> : Hash<triFace>
{ {
HashTypeInfo("triFace") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "triFace"; }
#endif
HashTypeInfo("hash triFace")
}; };
template<class T> template<class T>
struct HashFun<Pair<T>> : Hash<Pair<T>> struct HashFun<Pair<T>> : Hash<Pair<T>>
{ {
HashTypeInfo("Pair") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "Pair"; }
#endif
HashTypeInfo("hash Pair")
}; };
template<class T1, class T2> template<class T1, class T2>
struct HashFun<Tuple2<T1, T2>> : Hash<Tuple2<T1, T2>> struct HashFun<Tuple2<T1, T2>> : Hash<Tuple2<T1, T2>>
{ {
HashTypeInfo("Tuple2") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "Tuple2"; }
#endif
HashTypeInfo("hash Tuple2")
}; };
template<class T> template<class T>
struct HashFun<List<T>> : Hash<List<T>> struct HashFun<List<T>> : Hash<List<T>>
{ {
HashTypeInfo("List") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "List"; }
#endif
HashTypeInfo("hash List")
}; };
template<class T> struct HashFun<UList<T>> : Hash<UList<T>> template<class T> struct HashFun<UList<T>> : Hash<UList<T>>
{ {
HashTypeInfo("UList") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "UList"; }
#endif
HashTypeInfo("hash UList")
}; };
template<class T, int SizeMin> template<class T, int SizeMin>
struct HashFun<DynamicList<T, SizeMin>> : Hash<DynamicList<T, SizeMin>> struct HashFun<DynamicList<T, SizeMin>> : Hash<DynamicList<T, SizeMin>>
{ {
HashTypeInfo("DynamicList") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "DynamicList"; }
#endif
HashTypeInfo("hash DynamicList")
}; };
template<class T, unsigned N> template<class T, unsigned N>
struct HashFun<FixedList<T, N>> : Hash<FixedList<T, N>> struct HashFun<FixedList<T, N>> : Hash<FixedList<T, N>>
{ {
HashTypeInfo("FixedList") #ifdef FULLDEBUG
static constexpr const char* name() noexcept { return "FixedList"; }
#endif
HashTypeInfo("hash FixedList")
}; };

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2018-2025 OpenCFD Ltd. Copyright (C) 2018-2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -81,7 +81,7 @@ void infoHashString
void reportHashList(const UList<string>& list) void reportHashList(const UList<string>& list)
{ {
Info<< "contiguous = " << is_contiguous_v<string> << nl << nl; Info<< "contiguous = " << is_contiguous<string>::value << nl << nl;
for (const string& val : list) for (const string& val : list)
{ {
@ -94,7 +94,7 @@ void reportHashList(const UList<string>& list)
void reportHashList(const UList<label>& list) void reportHashList(const UList<label>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<label> << nl << nl; Info<<"contiguous = " << is_contiguous<label>::value << nl << nl;
for (const label val : list) for (const label val : list)
{ {
@ -113,7 +113,7 @@ void reportHashList(const UList<label>& list)
void reportHashList(const UList<face>& list) void reportHashList(const UList<face>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<label> << nl << nl; Info<<"contiguous = " << is_contiguous<label>::value << nl << nl;
for (const face& f : list) for (const face& f : list)
{ {
@ -154,7 +154,7 @@ void reportHashList(const UList<labelList>& list)
void reportHashList(const UList<wordPair>& list) void reportHashList(const UList<wordPair>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<wordPair> << nl << nl; Info<<"contiguous = " << is_contiguous<wordPair>::value << nl << nl;
for (const wordPair& pr : list) for (const wordPair& pr : list)
{ {
@ -179,7 +179,7 @@ void reportHashList(const UList<wordPair>& list)
void reportHashList(const UList<labelPair>& list) void reportHashList(const UList<labelPair>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<labelPair> << nl << nl; Info<<"contiguous = " << is_contiguous<labelPair>::value << nl << nl;
for (const labelPair& pr : list) for (const labelPair& pr : list)
{ {
@ -200,7 +200,7 @@ void reportHashList(const UList<labelPair>& list)
void reportHashList(const UList<labelPairPair>& list) void reportHashList(const UList<labelPairPair>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<labelPairPair> << nl << nl; Info<<"contiguous = " << is_contiguous<labelPairPair>::value << nl << nl;
for (const labelPairPair& pr : list) for (const labelPairPair& pr : list)
{ {
@ -221,7 +221,7 @@ void reportHashList(const UList<labelPairPair>& list)
void reportHashList(const UList<edge>& list) void reportHashList(const UList<edge>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<edge> << nl << nl; Info<<"contiguous = " << is_contiguous<edge>::value << nl << nl;
for (const edge& e : list) for (const edge& e : list)
{ {
@ -242,7 +242,7 @@ void reportHashList(const UList<edge>& list)
void reportHashList(const UList<triFace>& list) void reportHashList(const UList<triFace>& list)
{ {
Info<<"contiguous = " << is_contiguous_v<triFace> << nl << nl; Info<<"contiguous = " << is_contiguous<triFace>::value << nl << nl;
for (const triFace& f : list) for (const triFace& f : list)
{ {

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -188,6 +188,8 @@ int main(int argc, char *argv[])
argList::addBoolOption("label", "Use label for tests (default)"); argList::addBoolOption("label", "Use label for tests (default)");
argList::addBoolOption("ref", "Test writing by ref"); argList::addBoolOption("ref", "Test writing by ref");
#include "addTimeOptions.H"
#include "setRootCase.H" #include "setRootCase.H"
#include "createTime.H" #include "createTime.H"
#include "createPolyMesh.H" #include "createPolyMesh.H"
@ -213,10 +215,11 @@ int main(int argc, char *argv[])
mesh mesh
); );
Info<< "points path: " << io.typeFilePath<pointIOField>() << nl; Info<< "points path: " << io.typeFilePath<labelIOList>() << nl;
Info<< "points path: " << io.typeFilePath<void>() << nl;
io.resetHeader("bad-points"); io.resetHeader("bad-points");
Info<< "bad path: " << io.typeFilePath<labelIOList>() << nl; Info<< "bad path: " << io.typeFilePath<void>() << nl;
} }
IOobject io IOobject io
@ -277,6 +280,7 @@ int main(int argc, char *argv[])
{ {
IOFieldRef<vector>(ioOutput, mesh.points()).write(); IOFieldRef<vector>(ioOutput, mesh.points()).write();
} }
} }

View File

@ -45,7 +45,7 @@ using namespace Foam;
template<class Type> template<class Type>
word report() word report()
{ {
if constexpr (is_globalIOobject<Type>::value) if (is_globalIOobject<Type>::value)
{ {
return "global"; return "global";
} }

View File

@ -1,2 +1,4 @@
/* EXE_INC = */ EXE_INC = -DFULLDEBUG
/* EXE_LIBS = */
/* EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude */
/* EXE_LIBS = -lfiniteVolume */

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011 OpenFOAM Foundation Copyright (C) 2011 OpenFOAM Foundation
Copyright (C) 2017-2024 OpenCFD Ltd. Copyright (C) 2017-2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -156,24 +156,29 @@ int main(int argc, char *argv[])
os.writeEntry("idl3", idl3); os.writeEntry("idl3", idl3);
} }
if (UPstream::parRun()) if (Pstream::parRun())
{ {
if (UPstream::master()) if (Pstream::master())
{ {
Pout<< "full: " << flatOutput(idl3.values()) << nl Pout<< "full: " << flatOutput(idl3.values()) << nl
<< "send: " << flatOutput(idl3) << endl; << "send: " << flatOutput(idl3) << endl;
for (const int proci : UPstream::subProcs()) for (const int proci : Pstream::subProcs())
{ {
OPstream::send(idl3, proci); OPstream toSlave(Pstream::commsTypes::scheduled, proci);
toSlave << idl3;
} }
} }
else else
{ {
// From master // From master
List<label> recv; IPstream fromMaster
(
Pstream::commsTypes::scheduled,
Pstream::masterNo()
);
IPstream::recv(recv, UPstream::masterNo()); List<label> recv(fromMaster);
Pout<<"recv: " << flatOutput(recv) << endl; Pout<<"recv: " << flatOutput(recv) << endl;
} }

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2017-2025 OpenCFD Ltd. Copyright (C) 2017-2023 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -118,7 +118,7 @@ Ostream& printListOutputType(const char* what)
{ {
Info<< what Info<< what
<< " (contiguous=" << " (contiguous="
<< is_contiguous_v<T> << " no_linebreak=" << is_contiguous<T>::value << " no_linebreak="
<< Detail::ListPolicy::no_linebreak<T>::value << Detail::ListPolicy::no_linebreak<T>::value
<< " short_length=" << " short_length="
<< Detail::ListPolicy::short_length<T>::value << ')'; << Detail::ListPolicy::short_length<T>::value << ')';

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2021-2025 OpenCFD Ltd. Copyright (C) 2021 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -128,17 +128,18 @@ void test_member_funcs(Type)
// Do compile-time recursion over the given types // Do compile-time recursion over the given types
template<std::size_t I = 0, typename... Tp> template<std::size_t I = 0, typename... Tp>
void run_tests(const std::tuple<Tp...>& types, const List<word>& names) inline typename std::enable_if<I == sizeof...(Tp), void>::type
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID){}
template<std::size_t I = 0, typename... Tp>
inline typename std::enable_if<I < sizeof...(Tp), void>::type
run_tests(const std::tuple<Tp...>& types, const List<word>& typeID)
{ {
if constexpr (I < sizeof...(Tp)) Info<< nl << " ## Test member functions: "<< typeID[I] <<" ##" << nl;
{ test_member_funcs(std::get<I>(types));
const auto& name = names[I];
Info<< nl << " ## Test member functions: " << name << " ##" << nl; run_tests<I + 1, Tp...>(types, typeID);
test_member_funcs(std::get<I>(types));
run_tests<I + 1, Tp...>(types, names);
}
} }

View File

@ -1,3 +1,3 @@
Test-OCountStream.cxx Test-OCountStream.C
EXE = $(FOAM_USER_APPBIN)/Test-OCountStream EXE = $(FOAM_USER_APPBIN)/Test-OCountStream

View File

@ -65,11 +65,11 @@ int main(int argc, char *argv[])
OCountStream cnt; OCountStream cnt;
OCharStream cstr; OCharStream cstr;
OStringStream sstr; OStringStream str;
ocountstream plain; ocountstream plain;
generateOutput(cstr); generateOutput(cstr);
generateOutput(sstr); generateOutput(str);
generateOutput(cnt); generateOutput(cnt);
generateOutput(plain); generateOutput(plain);
@ -77,7 +77,7 @@ int main(int argc, char *argv[])
Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl Info<< "counter state: " << (cnt.stdStream().rdstate()) << nl
<< "via char-stream: " << label(cstr.view().size()) << " chars" << nl << "via char-stream: " << label(cstr.view().size()) << " chars" << nl
<< "via string-stream: " << label(sstr.count()) << " chars" << nl << "via string-stream: " << str.str().size() << " chars" << nl
<< "via ocountstream: " << plain.count() << " chars" << endl; << "via ocountstream: " << plain.count() << " chars" << endl;
fileName outputName; fileName outputName;

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com \\ / A nd | www.openfoam.com
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2022-2024 OpenCFD Ltd. Copyright (C) 2022 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -32,14 +32,10 @@ Description
#include "IOstreams.H" #include "IOstreams.H"
#include "OSspecific.H" #include "OSspecific.H"
#include "argList.H" #include "argList.H"
#include "clock.H"
#include "Switch.H"
#include "ListOps.H" #include "ListOps.H"
using namespace Foam; using namespace Foam;
std::string time_stamp;
void listFiles(const fileName& dir) void listFiles(const fileName& dir)
{ {
wordList files = ListOps::create<word> wordList files = ListOps::create<word>
@ -59,150 +55,25 @@ void listFiles(const fileName& dir)
} }
OSstream& printInfo(OFstream& os)
{
InfoErr
<< "open: " << os.name() << nl
<< "appending: " << Switch::name(os.is_appending())
<< " tellp: "<< os.stdStream().tellp()
<< " gz: " << Switch::name(os.compression()) << nl;
return InfoErr.stream();
}
void withHeader(OFstream& os)
{
const auto tellp = os.stdStream().tellp();
if (tellp <= 0)
{
InfoErr
<< "Add header" << nl;
os << "HEADER: " << time_stamp.c_str() << nl;
}
}
template<class OSstreamType>
void generateLines(OSstreamType& os, label count = 1)
{
for (label line = 1; line <= count; ++line)
{
os << "[" << line
<< "] =============================================" << nl;
}
}
template<class OSstreamType>
void generateContent
(
OSstreamType& os,
const bool with_seekend,
const bool test_overwrite = false,
const int64_t seek_out = -1
)
{
if (with_seekend)
{
os.stdStream().seekp(0, std::ios_base::end);
// OR? os.seek_end();
}
printInfo(os);
withHeader(os);
if (test_overwrite && seek_out >= 0)
{
InfoErr<< "... seekp(" << seek_out << ")" << nl;
auto& oss = os.stdStream();
// Actually std::streampos, but cannot increment that
int64_t pos(seek_out);
const int64_t tellp_end = oss.tellp();
if (pos >= 0 && pos < tellp_end)
{
InfoErr
<< "... fill from " << label(pos)
<< " to " << label(tellp_end) << nl;
oss.seekp(pos);
while (pos < tellp_end)
{
// Fill with char 'X', rely on streambuf buffering
oss << 'X';
++pos;
}
oss.seekp(seek_out);
os << "More content [at " << seek_out << ']' << endl;
}
}
generateLines(os, 4);
printInfo(os)
<< "... sleep" << endl;
listFiles(os.name().path());
sleep(2);
os << "[new content] +++++++++++++++++++++++++++++++++++" << endl;
}
template<class OSstreamType>
void generateOverwriteContent
(
OSstreamType& os,
const bool with_seekend,
const int64_t seek_out = -1
)
{
generateContent(os, with_seekend, true, seek_out);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program: // Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::addBoolOption("gz", "Use compression"); argList::addBoolOption("gz", "Use compression");
argList::addBoolOption("append-app", "Use append app mode"); argList::addBoolOption("append", "Use append mode");
argList::addBoolOption("append-ate", "Use append ate mode");
argList::addBoolOption("seekend", "Seek to end after non-append open");
argList::addOption("seek", "value", "Seek from start (default: 100)");
argList::addBoolOption("atomic", "Use atomic"); argList::addBoolOption("atomic", "Use atomic");
argList::addBoolOption("keep", "Do not remove test directory"); argList::addBoolOption("keep", "Do not remove test directory");
argList::addOption("write", "file", "test writing to file"); argList::addOption("write", "file", "test writing to file");
#include "setRootCase.H" #include "setRootCase.H"
// Same time-stamp for all generated files
time_stamp = clock::dateTime();
const fileName baseDir("Test-OFstream-directory"); const fileName baseDir("Test-OFstream-directory");
Foam::mkDir(baseDir); Foam::mkDir(baseDir);
InfoErr<< "mkdir: " << baseDir << endl; InfoErr<< "mkdir: " << baseDir << endl;
Info<< "start:" << nl;
listFiles(baseDir);
const bool with_seekend = args.found("seekend");
const int seek_out = args.getOrDefault<int>("seek", 100);
IOstreamOption streamOpt; IOstreamOption streamOpt;
if (args.found("gz")) if (args.found("gz"))
@ -212,11 +83,10 @@ int main(int argc, char *argv[])
IOstreamOption::appendType append = IOstreamOption::appendType append =
( (
args.found("append-app") ? IOstreamOption::APPEND_APP args.found("append")
: args.found("append-ate") ? IOstreamOption::APPEND_ATE ? IOstreamOption::APPEND
: IOstreamOption::NO_APPEND : IOstreamOption::NON_APPEND
); );
IOstreamOption::atomicType atomic = IOstreamOption::atomicType atomic =
( (
args.found("atomic") args.found("atomic")
@ -227,6 +97,7 @@ int main(int argc, char *argv[])
{ {
OFstream(baseDir/"dummy")() << "Some file content" << endl; OFstream(baseDir/"dummy")() << "Some file content" << endl;
Foam::ln("dummy", baseDir/"Test2.txt");
Foam::ln("dummy", baseDir/"Test3.txt"); Foam::ln("dummy", baseDir/"Test3.txt");
Foam::ln("dummy", baseDir/"Test4.txt"); Foam::ln("dummy", baseDir/"Test4.txt");
Foam::ln("dummy", baseDir/"Test4.txt.gz"); Foam::ln("dummy", baseDir/"Test4.txt.gz");
@ -243,31 +114,16 @@ int main(int argc, char *argv[])
append append
); );
generateOverwriteContent(os, with_seekend, seek_out); os << "=========================" << endl;
}
{ InfoErr<< "open: " << os.name() << endl;
OFstream os InfoErr<< "... sleep" << endl;
(
atomic,
baseDir/"Test1-app.txt",
streamOpt,
IOstreamOption::APPEND_APP
);
generateOverwriteContent(os, with_seekend, seek_out); listFiles(baseDir);
}
{ sleep(2);
OFstream os
(
atomic,
baseDir/"Test1-ate.txt",
streamOpt,
IOstreamOption::APPEND_ATE
);
generateOverwriteContent(os, with_seekend, seek_out); os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
@ -276,21 +132,39 @@ int main(int argc, char *argv[])
atomic, atomic,
baseDir/"Test2.txt", baseDir/"Test2.txt",
streamOpt streamOpt
// NON_APPEND
); );
generateContent(os, with_seekend); os << "=========================" << endl;
}
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
}
{ {
OFstream os OFstream os
( (
atomic, atomic,
baseDir/"Test3.txt", baseDir/"Test3.txt",
streamOpt, streamOpt,
IOstreamOption::APPEND_APP IOstreamOption::APPEND
); );
generateContent(os, with_seekend, with_seekend); os << "=========================" << endl;
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
OFstream os OFstream os
@ -300,17 +174,35 @@ int main(int argc, char *argv[])
IOstreamOption::COMPRESSED IOstreamOption::COMPRESSED
); );
// No seekend with COMPRESSED os << "=========================" << endl;
generateContent(os, false);
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
{ {
OFstream os OFstream os
( (
IOstreamOption::ATOMIC, IOstreamOption::ATOMIC,
baseDir/"Test5.txt" baseDir/"Test5.txt"
// ASCII UNCOMPRESSED NON_APPEND
); );
generateContent(os, with_seekend); os << "=========================" << endl;
InfoErr<< "open: " << os.name() << endl;
InfoErr<< "... sleep" << endl;
listFiles(baseDir);
sleep(2);
os << "+++++++++++++++++++++++++++++++++++" << endl;
} }
Info<< nl << "done:" << endl; Info<< nl << "done:" << endl;

View File

@ -1,4 +1,5 @@
EXE_INC = \ EXE_INC = \
-DFULLDEBUG \
-I$(LIB_SRC)/mesh/blockMesh/lnInclude -I$(LIB_SRC)/mesh/blockMesh/lnInclude
EXE_LIBS = \ EXE_LIBS = \

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2412 | | \\ / O peration | Version: v2306 |
| \\ / A nd | Website: www.openfoam.com | | \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/

View File

@ -1,4 +1,5 @@
EXE_INC = \ EXE_INC = \
-DFULLDEBUG -g -O0 \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \

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