Compare commits

..

2 Commits

14174 changed files with 91305 additions and 225941 deletions

View File

@ -49,7 +49,7 @@
<!-- <!--
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 : v2312|v2306|v2212|v2206|v2112 etc OpenFOAM version : v2212|v2206|v2112|v2106|v2012 etc
Operating system : ubuntu|openSUSE|centos etc Operating system : ubuntu|openSUSE|centos etc
Hardware info : any info that may help? Hardware info : any info that may help?
Compiler : gcc|intel|clang etc Compiler : gcc|intel|clang etc

3
.gitmodules vendored
View File

@ -17,6 +17,3 @@
[submodule "external-solver"] [submodule "external-solver"]
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"]
path = modules/turbulence-community
url = https://gitlab.com/openfoam/community/tc-turbulence/turbulence-community.git

View File

@ -96,12 +96,10 @@ echo " ${WM_PROJECT_DIR##*/}"
echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler" echo " $WM_COMPILER ${WM_COMPILER_TYPE:-system} compiler"
echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}" echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
echo echo
echo " api = $(etc/openfoam -show-api 2>/dev/null)"
# The api/patch information echo " patch = $(etc/openfoam -show-patch 2>/dev/null)"
sed -e 's/^/ /; s/=/ = /' ./META-INFO/api-info 2>/dev/null || true echo " bin = $(_foamCountDirEntries "$FOAM_APPBIN") entries"
echo " lib = $(_foamCountDirEntries "$FOAM_LIBBIN") entries"
echo " bin = $(_foamCountDirEntries "$FOAM_APPBIN") entries"
echo " lib = $(_foamCountDirEntries "$FOAM_LIBBIN") entries"
echo echo
echo ======================================== echo ========================================

View File

@ -5,23 +5,17 @@ It is likely incomplete...
## Contributors (alphabetical by surname) ## Contributors (alphabetical by surname)
- Horacio Aguerre
- Yu Ankun
- Tetsuo Aoyagi - Tetsuo Aoyagi
- Akira Azami - Akira Azami
- Pete Bachant
- William Bainbridge - William Bainbridge
- Gabriel Barajas - Gabriel Barajas
- Kutalmis Bercin - Kutalmis Bercin
- Julius Bergmann
- Ivor Clifford - Ivor Clifford
- Greg Collecutt - Greg Collecutt
- Jonathan Cranford - Jonathan Cranford
- Santiago Marquez Damian
- Sergio Ferraris - Sergio Ferraris
- Matej Forman - Matej Forman
- Marian Fuchs - Marian Fuchs
- Gabriel Gerlero
- Pawan Ghildiyal - Pawan Ghildiyal
- Chris Greenshields - Chris Greenshields
- Bernhard Gschaider - Bernhard Gschaider
@ -34,7 +28,6 @@ It is likely incomplete...
- Alexander Kabat vel Job - Alexander Kabat vel Job
- Thilo Knacke - Thilo Knacke
- Shannon Leakey - Shannon Leakey
- Sergey Lesnik
- Tommaso Lucchini - Tommaso Lucchini
- Graham Macpherson - Graham Macpherson
- Alexey Matveichev - Alexey Matveichev
@ -47,7 +40,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
@ -58,12 +50,8 @@ It is likely incomplete...
- Gavin Tabor - Gavin Tabor
- Zeljko Tukovic - Zeljko Tukovic
- Eugene De Villiers - Eugene De Villiers
- Louis Vittoz
- Vuko Vukcevic
- Yi Wang - Yi Wang
- Norbert Weber - Norbert Weber
- Gregor Weiss
- Volker Weissmann
- Henry Weller - Henry Weller
- Niklas Wikstrom - Niklas Wikstrom
- Guanyang Xue - Guanyang Xue

View File

@ -1,2 +1,2 @@
api=2312 api=2212
patch=0 patch=230110

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-v2312 version: For example, for the OpenFOAM-v2212 version:
``` ```
source /installation/path/OpenFOAM-v2312/etc/bashrc source /installation/path/OpenFOAM-v2212/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-v2312 |-- OpenFOAM-v2212
\-- ThirdParty-v2312 \-- ThirdParty-v2212
``` ```
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-sandbox2312, etc.. directory name, e.g. openfoam-sandbox2212, 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*, `v2312-myCustom`, * allows for an updated value of VERSION, *eg*, `v2212-myCustom`,
without requiring a renamed ThirdParty. The API value would still without requiring a renamed ThirdParty. The API value would still
be `2312` and the original `ThirdParty-v2312/` would be found. be `2212` and the original `ThirdParty-v2212/` 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-2023 OpenCFD Ltd Copyright 2016-2022 OpenCFD Ltd

View File

@ -118,7 +118,7 @@ int main(int argc, char *argv[])
fvm::laplacian(rAUf, p) == fvc::div(phiHbyA) fvm::laplacian(rAUf, p) == fvc::div(phiHbyA)
); );
pEqn.solve(p.select(piso.finalInnerIter())); pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
phi = phiHbyA - pEqn.flux(); phi = phiHbyA - pEqn.flux();

View File

@ -18,6 +18,6 @@ dimensionedScalar rho("rho", dimDensity, transportProperties);
scalar MaxCo = scalar MaxCo =
max(mesh.surfaceInterpolation::deltaCoeffs()*c0).value() max(mesh.surfaceInterpolation::deltaCoeffs()*c0).value()
*runTime.deltaTValue(); *runTime.deltaT().value();
Info<< "Max acoustic Courant Number = " << MaxCo << endl; Info<< "Max acoustic Courant Number = " << MaxCo << endl;

View File

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

View File

@ -83,7 +83,6 @@ Description
\heading Options \heading Options
\plaintable \plaintable
-writep | write the Euler pressure -writep | write the Euler pressure
-writephi | Write the final volumetric flux
-writePhi | Write the final velocity potential -writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi -initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable \endplaintable
@ -118,12 +117,6 @@ int main(int argc, char *argv[])
"Initialise U boundary conditions" "Initialise U boundary conditions"
); );
argList::addBoolOption
(
"writephi",
"Write the final volumetric flux field"
);
argList::addBoolOption argList::addBoolOption
( (
"writePhi", "writePhi",
@ -142,8 +135,6 @@ int main(int argc, char *argv[])
"Execute functionObjects" "Execute functionObjects"
); );
#include "addRegionOption.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H" #include "setRootCaseLists.H"
#include "createTime.H" #include "createTime.H"
#include "createNamedDynamicFvMesh.H" #include "createNamedDynamicFvMesh.H"
@ -203,16 +194,11 @@ int main(int argc, char *argv[])
<< endl; << endl;
} }
// Write U // Write U and phi
U.write(); U.write();
phi.write();
// Optionally write the volumetric flux, phi // Optionally write Phi
if (args.found("writephi"))
{
phi.write();
}
// Optionally write velocity potential, Phi
if (args.found("writePhi")) if (args.found("writePhi"))
{ {
Phi.write(); Phi.write();

View File

@ -6,7 +6,7 @@
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2019-2020,2023 OpenCFD Ltd. Copyright (C) 2019-2020 OpenCFD Ltd.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
This file is part of OpenFOAM. This file is part of OpenFOAM.
@ -132,11 +132,6 @@ void PDRkEpsilon::correct()
// Update epsilon and G at the wall // Update epsilon and G at the wall
epsilon_.boundaryFieldRef().updateCoeffs(); epsilon_.boundaryFieldRef().updateCoeffs();
// Push new cell values to
// coupled neighbours. Note that we want to avoid the re-updateCoeffs
// of the wallFunctions so make sure to bypass the evaluate on
// those patches and only do the coupled ones.
epsilon_.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
// Add the blockage generation term so that it is included consistently // Add the blockage generation term so that it is included consistently
// in both the k and epsilon equations // in both the k and epsilon equations

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

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

View File

@ -109,7 +109,7 @@ Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const
mesh, mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar(Nv.dimensions(), Zero) dimensionedScalar(Nv.dimensions(), Zero)

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

@ -27,7 +27,7 @@ if (pimple.transonic())
betav*fvOptions(psi, p, rho.name()) betav*fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -57,7 +57,7 @@ else
betav*fvOptions(psi, p, rho.name()) betav*fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -30,7 +30,7 @@ if (pimple.transonic())
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -66,7 +66,7 @@ else
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -35,7 +35,7 @@ if (pimple.transonic())
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -71,7 +71,7 @@ else
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -171,7 +171,10 @@ if (ign.ignited())
fvOptions.correct(Su); fvOptions.correct(Su);
Su.clamp_range(SuMin, SuMax); // Limit the maximum Su
// ~~~~~~~~~~~~~~~~~~~~
Su.min(SuMax);
Su.max(SuMin);
} }
else else
{ {
@ -215,7 +218,7 @@ if (ign.ignited())
+ ( + (
scalar(1) scalar(1)
+ (2*XiShapeCoef) + (2*XiShapeCoef)
*(scalar(0.5) - clamp(b, zero_one{})) *(scalar(0.5) - min(max(b, scalar(0)), scalar(1)))
)*(XiEqStar - scalar(1.001)) )*(XiEqStar - scalar(1.001))
); );
@ -223,7 +226,7 @@ if (ign.ignited())
volScalarField R(Gstar*XiEqStar/(XiEqStar - scalar(1))); volScalarField R(Gstar*XiEqStar/(XiEqStar - scalar(1)));
volScalarField G(R*(XiEq - scalar(1.001))/XiEq); volScalarField G(R*(XiEq - scalar(1.001))/XiEq);
//R *= (Gstar + 2*mag(devSymm(fvc::grad(U))))/Gstar; //R *= (Gstar + 2*mag(dev(symm(fvc::grad(U)))))/Gstar;
// Solve for the flame wrinkling // Solve for the flame wrinkling
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -29,7 +29,7 @@ if (pimple.transonic())
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -64,7 +64,7 @@ else
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -6,7 +6,7 @@
solve solve
( (
fvm::ddt(rho, Yi) - chemistry.RR(specieI), fvm::ddt(rho, Yi) - chemistry.RR(specieI),
"Yi" mesh.solver("Yi")
); );
} }
} }

View File

@ -12,7 +12,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("Ydefault", dimless, 1) dimensionedScalar("Ydefault", dimless, 1)
@ -29,7 +29,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("p", dimPressure, p0) dimensionedScalar("p", dimPressure, p0)
@ -46,7 +46,7 @@ Info<< "Creating base fields for time " << runTime.timeName() << endl;
mesh, mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
), ),
mesh, mesh,
dimensionedScalar("T", dimTemperature, T0) dimensionedScalar("T", dimTemperature, T0)

View File

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

View File

@ -1,3 +1,3 @@
dtChem = chemistry.solve(runTime.deltaTValue()); dtChem = chemistry.solve(runTime.deltaT().value());
scalar Qdot = chemistry.Qdot()()[0]/rho[0]; scalar Qdot = chemistry.Qdot()()[0]/rho[0];
integratedHeat += Qdot*runTime.deltaTValue(); integratedHeat += Qdot*runTime.deltaT().value();

View File

@ -35,17 +35,17 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.constrain(YiEqn); fvOptions.constrain(YiEqn);
YiEqn.solve("Yi"); YiEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
radiation->correct(); radiation->correct();

View File

@ -36,7 +36,7 @@ while (pimple.correctNonOrthogonal())
+ fvOptions(psi, p_rgh, rho.name()) + fvOptions(psi, p_rgh, rho.name())
); );
p_rghEqn.solve(p_rgh.select(pimple.finalInnerIter())); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -34,15 +34,15 @@ tmp<fv::convectionScheme<scalar>> mvConvection
fvOptions.constrain(YiEqn); fvOptions.constrain(YiEqn);
YiEqn.solve("Yi"); YiEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }

View File

@ -37,7 +37,7 @@ if (pimple.transonic())
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -72,7 +72,7 @@ else
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -49,7 +49,7 @@ if (pimple.transonic())
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -89,7 +89,7 @@ else
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -41,7 +41,7 @@ while (pimple.correctNonOrthogonal())
- fvm::laplacian(rhorAUf, p_rgh) - fvm::laplacian(rhorAUf, p_rgh)
); );
p_rghEqn.solve(p_rgh.select(pimple.finalInnerIter())); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -103,10 +103,16 @@ Foam::smoluchowskiJumpTFvPatchScalarField::smoluchowskiJumpTFvPatchScalarField
<< exit(FatalIOError); << exit(FatalIOError);
} }
if (!this->readValueEntry(dict)) if (dict.found("value"))
{ {
// Fallback: set to the internal field fvPatchField<scalar>::operator=
fvPatchField<scalar>::patchInternalField(*this); (
scalarField("value", dict, p.size())
);
}
else
{
fvPatchField<scalar>::operator=(patchInternalField());
} }
refValue() = *this; refValue() = *this;
@ -159,10 +165,14 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_); const fvPatchScalarField& pmu =
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_); patch().lookupPatchField<volScalarField, scalar>(muName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchScalarField& prho =
const auto& pU = patch().lookupPatchField<volVectorField>(UName_); patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchVectorField& pU =
patch().lookupPatchField<volVectorField, vector>(UName_);
// Prandtl number reading consistent with rhoCentralFoam // Prandtl number reading consistent with rhoCentralFoam
const dictionary& thermophysicalProperties = const dictionary& thermophysicalProperties =
@ -197,7 +207,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::updateCoeffs()
// Write // Write
void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("U", "U", UName_); os.writeEntryIfDifferent<word>("U", "U", UName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_); os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
@ -207,7 +217,7 @@ void Foam::smoluchowskiJumpTFvPatchScalarField::write(Ostream& os) const
os.writeEntry("accommodationCoeff", accommodationCoeff_); os.writeEntry("accommodationCoeff", accommodationCoeff_);
Twall_.writeEntry("Twall", os); Twall_.writeEntry("Twall", os);
os.writeEntry("gamma", gamma_); os.writeEntry("gamma", gamma_);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }

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

@ -105,15 +105,18 @@ Foam::maxwellSlipUFvPatchVectorField::maxwellSlipUFvPatchVectorField
<< exit(FatalIOError); << exit(FatalIOError);
} }
if (this->readValueEntry(dict)) if (dict.found("value"))
{ {
const auto* hasRefValue = dict.findEntry("refValue", keyType::LITERAL); fvPatchField<vector>::operator=
const auto* hasFrac = dict.findEntry("valueFraction", keyType::LITERAL); (
vectorField("value", dict, p.size())
);
if (hasRefValue && hasFrac) if (dict.found("refValue") && dict.found("valueFraction"))
{ {
this->refValue().assign(*hasRefValue, p.size()); this->refValue() = vectorField("refValue", dict, p.size());
this->valueFraction().assign(*hasFrac, p.size()); this->valueFraction() =
scalarField("valueFraction", dict, p.size());
} }
else else
{ {
@ -152,9 +155,12 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
return; return;
} }
const auto& pmu = patch().lookupPatchField<volScalarField>(muName_); const fvPatchScalarField& pmu =
const auto& prho = patch().lookupPatchField<volScalarField>(rhoName_); patch().lookupPatchField<volScalarField, scalar>(muName_);
const auto& ppsi = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchScalarField& prho =
patch().lookupPatchField<volScalarField, scalar>(rhoName_);
const fvPatchField<scalar>& ppsi =
patch().lookupPatchField<volScalarField, scalar>(psiName_);
Field<scalar> C1 Field<scalar> C1
( (
@ -181,8 +187,8 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
if (curvature_) if (curvature_)
{ {
const auto& ptauMC = const fvPatchTensorField& ptauMC =
patch().lookupPatchField<volTensorField>(tauMCName_); patch().lookupPatchField<volTensorField, tensor>(tauMCName_);
vectorField n(patch().nf()); vectorField n(patch().nf());
refValue() -= C1/prho*transform(I - n*n, (n & ptauMC)); refValue() -= C1/prho*transform(I - n*n, (n & ptauMC));
@ -194,7 +200,7 @@ void Foam::maxwellSlipUFvPatchVectorField::updateCoeffs()
void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
{ {
fvPatchField<vector>::write(os); fvPatchVectorField::write(os);
os.writeEntryIfDifferent<word>("T", "T", TName_); os.writeEntryIfDifferent<word>("T", "T", TName_);
os.writeEntryIfDifferent<word>("rho", "rho", rhoName_); os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_); os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
@ -209,7 +215,7 @@ void Foam::maxwellSlipUFvPatchVectorField::write(Ostream& os) const
refValue().writeEntry("refValue", os); refValue().writeEntry("refValue", os);
valueFraction().writeEntry("valueFraction", os); valueFraction().writeEntry("valueFraction", os);
fvPatchField<vector>::writeValueEntry(os); writeEntry("value", os);
} }

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

@ -104,8 +104,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& psip = patch().lookupPatchField<volScalarField>(psiName_); const fvPatchField<scalar>& psip =
const auto& pp = patch().lookupPatchField<volScalarField>(pName_); patch().lookupPatchField<volScalarField, scalar>(psiName_);
const fvPatchField<scalar>& pp =
patch().lookupPatchField<volScalarField, scalar>(pName_);
operator==(psip*pp); operator==(psip*pp);
@ -115,10 +118,11 @@ void Foam::fixedRhoFvPatchScalarField::updateCoeffs()
void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const void Foam::fixedRhoFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
os.writeEntryIfDifferent<word>("p", "p", pName_); os.writeEntryIfDifferent<word>("p", "p", pName_);
os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_); os.writeEntryIfDifferent<word>("psi", "thermo:psi", psiName_);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

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

@ -17,7 +17,7 @@ tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> interpolate
vf, vf,
dir, dir,
"reconstruct(" "reconstruct("
+ (reconFieldName.empty() ? vf.name() : reconFieldName) + (reconFieldName != word::null ? reconFieldName : vf.name())
+ ')' + ')'
) )
); );

View File

@ -63,7 +63,7 @@
fvOptions(psi, p, rho.name()) fvOptions(psi, p, rho.name())
); );
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
// Rhie & Chow interpolation (part 2) // Rhie & Chow interpolation (part 2)
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())

View File

@ -29,7 +29,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed
@ -72,7 +72,7 @@ if (mesh.changing())
divrhoU() divrhoU()
); );
pcorrEqn.solve(pcorr.select(pimple.finalInnerIter())); pcorrEqn.solve(mesh.solver(pcorr.select(pimple.finalInnerIter())));
//Bypass virtual layer //Bypass virtual layer
//mesh.fvMesh::solve(pcorrEqn, d); //mesh.fvMesh::solve(pcorrEqn, d);

View File

@ -56,7 +56,7 @@ if (pimple.transonic())
// Relax the pressure equation to ensure diagonal-dominance // Relax the pressure equation to ensure diagonal-dominance
pEqn.relax(); pEqn.relax();
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -78,7 +78,7 @@ else
{ {
fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAUf, p)); fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAUf, p));
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -54,7 +54,7 @@ if (pimple.transonic())
// Relax the pressure equation to ensure diagonal-dominance // Relax the pressure equation to ensure diagonal-dominance
pEqn.relax(); pEqn.relax();
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -76,7 +76,7 @@ else
{ {
fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAUf, p)); fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAUf, p));
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -65,7 +65,7 @@ if (pimple.transonic())
// Relax the pressure equation to ensure diagonal-dominance // Relax the pressure equation to ensure diagonal-dominance
pEqn.relax(); pEqn.relax();
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {
@ -90,7 +90,7 @@ else
{ {
fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAtU, p)); fvScalarMatrix pEqn(pDDtEqn - fvm::laplacian(rhorAtU, p));
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -127,7 +127,7 @@ int main(int argc, char *argv[])
); );
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(piso.finalInnerIter())); pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter()) if (piso.finalNonOrthogonalIter())
{ {
@ -167,7 +167,7 @@ int main(int argc, char *argv[])
fvm::laplacian(rABf, pB) == fvc::div(phiB) fvm::laplacian(rABf, pB) == fvc::div(phiB)
); );
pBEqn.solve(pB.select(bpiso.finalInnerIter())); pBEqn.solve(mesh.solver(pB.select(bpiso.finalInnerIter())));
if (bpiso.finalNonOrthogonalIter()) if (bpiso.finalNonOrthogonalIter())
{ {

View File

@ -7,7 +7,7 @@
*mag(aMesh.edgeInterpolation::deltaCoeffs()) *mag(aMesh.edgeInterpolation::deltaCoeffs())
/rhol /rhol
) )
).value()*runTime.deltaTValue(); ).value()*runTime.deltaT().value();
Info<< "Max Capillary Courant Number = " << CoNumSigma << '\n' << endl; Info<< "Max Capillary Courant Number = " << CoNumSigma << '\n' << endl;
} }

View File

@ -5,7 +5,7 @@
( (
"h", "h",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -20,7 +20,7 @@
( (
"Us", "Us",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -34,7 +34,7 @@
( (
"phis", "phis",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -48,7 +48,7 @@
( (
"phi2s", "phi2s",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -67,7 +67,7 @@
( (
"Sm", "Sm",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
@ -82,7 +82,7 @@
( (
"Sd", "Sd",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
@ -96,7 +96,7 @@
( (
"Sg", "Sg",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
@ -112,7 +112,7 @@
( (
"ps", "ps",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -134,7 +134,7 @@
( (
"manningField", "manningField",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -147,7 +147,7 @@
( (
"frictionFactor", "frictionFactor",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),

View File

@ -7,7 +7,7 @@ volVectorField U
( (
"U", "U",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -22,7 +22,7 @@ volScalarField H
( (
"H", "H",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),

View File

@ -87,13 +87,7 @@ int main(int argc, char *argv[])
( (
fam::ddt(h, Us) fam::ddt(h, Us)
+ fam::div(phi2s, Us) + fam::div(phi2s, Us)
+ fam::Sp + fam::Sp(0.0125*frictionFactor*mag(Us), Us)
(
0.0125
*frictionFactor.internalField()
*mag(Us.internalField()),
Us
)
== ==
Gs*h Gs*h
- fam::Sp(Sd, Us) - fam::Sp(Sd, Us)

View File

@ -47,10 +47,10 @@ if (aMesh.nInternalEdges())
); );
CoNum = max(SfUfbyDelta/aMesh.magLe()) CoNum = max(SfUfbyDelta/aMesh.magLe())
.value()*runTime.deltaTValue(); .value()*runTime.deltaT().value();
meanCoNum = (sum(SfUfbyDelta)/sum(aMesh.magLe())) meanCoNum = (sum(SfUfbyDelta)/sum(aMesh.magLe()))
.value()*runTime.deltaTValue(); .value()*runTime.deltaT().value();
velMag = max(mag(phis)/aMesh.magLe()).value(); velMag = max(mag(phis)/aMesh.magLe()).value();
} }

View File

@ -5,7 +5,7 @@ areaScalarField Cs
( (
"Cs", "Cs",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -26,7 +26,7 @@ areaVectorField Us
( (
"Us", "Us",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
@ -47,7 +47,6 @@ forAll(Us, faceI)
Us[faceI].z() = Us[faceI].z() =
Uinf.value()*0.25*R[faceI].x()*R[faceI].z()/sqr(mag(R[faceI])); Uinf.value()*0.25*R[faceI].x()*R[faceI].z()/sqr(mag(R[faceI]));
} }
Us.boundaryFieldRef().evaluateCoupled<coupledFaPatch>();
Us -= aMesh.faceAreaNormals()*(aMesh.faceAreaNormals() & Us); Us -= aMesh.faceAreaNormals()*(aMesh.faceAreaNormals() & Us);
@ -58,7 +57,7 @@ edgeScalarField phis
( (
"phis", "phis",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),

View File

@ -0,0 +1,2 @@
// Create Finite Area mesh
faMesh aMesh(mesh);

View File

@ -7,7 +7,7 @@
( (
"Cvf", "Cvf",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -24,7 +24,7 @@
( (
"U", "U",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),

View File

@ -5,7 +5,7 @@ areaScalarField Cs
( (
"Cs", "Cs",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -37,7 +37,7 @@ areaVectorField Us
( (
"Us", "Us",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
@ -51,7 +51,7 @@ edgeScalarField phis
( (
"phis", "phis",
runTime.timeName(), runTime.timeName(),
aMesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),

View File

@ -0,0 +1,2 @@
// Create Finite Area mesh
faMesh aMesh(mesh);

View File

@ -7,7 +7,7 @@
( (
"Cvf", "Cvf",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
@ -24,7 +24,7 @@
( (
"U", "U",
runTime.timeName(), runTime.timeName(),
mesh.thisDb(), mesh,
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),

View File

@ -27,7 +27,7 @@
p_rghEqn.setReference(pRefCell, getRefCellValue(p_rgh, pRefCell)); p_rghEqn.setReference(pRefCell, getRefCellValue(p_rgh, pRefCell));
p_rghEqn.solve(p_rgh.select(pimple.finalInnerIter())); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -29,7 +29,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed
@ -72,7 +72,7 @@ if (mesh.changing())
divrhoU() divrhoU()
); );
//pcorrEqn.solve(pcorr.select(pimple.finalInnerIter())); //pcorrEqn.solve(mesh.solver(pcorr.select(pimple.finalInnerIter())));
//Bypass virtual layer //Bypass virtual layer
const dictionary& d = mesh.solver const dictionary& d = mesh.solver
( (

View File

@ -50,7 +50,7 @@ while (pimple.correctNonOrthogonal())
- fvm::laplacian(rhorAUf, p_rgh) - fvm::laplacian(rhorAUf, p_rgh)
); );
p_rghEqn.solve(p_rgh.select(pimple.finalInnerIter())); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -52,7 +52,7 @@ while (pimple.correctNonOrthogonal())
compressible ? getRefCellValue(p_rgh, pRefCell) : pRefValue compressible ? getRefCellValue(p_rgh, pRefCell) : pRefValue
); );
p_rghEqn.solve(p_rgh.select(pimple.finalInnerIter())); p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -108,7 +108,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero) // uses name
) )
); );

View File

@ -1,5 +1,5 @@
derivedFvPatchFields/turbulentTemperatureTwoPhaseRadCoupledMixed/turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField.C derivedFvPatchFields/turbulentTemperatureTwoPhaseRadCoupledMixed/turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField.C
solid/solidRegionDiffNo.C ../solid/solidRegionDiffNo.C
chtMultiRegionTwoPhaseEulerFoam.C chtMultiRegionTwoPhaseEulerFoam.C
EXE = $(FOAM_APPBIN)/chtMultiRegionTwoPhaseEulerFoam EXE = $(FOAM_APPBIN)/chtMultiRegionTwoPhaseEulerFoam

View File

@ -88,29 +88,26 @@ kappa
case mtLookup: case mtLookup:
{ {
if (mesh.foundObject<volScalarField>(kappaName_))
{ {
const auto* ptr = return patch().lookupPatchField<volScalarField, scalar>
mesh.cfindObject<volScalarField>(kappaName_); (
kappaName_
if (ptr) );
{
return patch().patchField(*ptr);
}
} }
else if (mesh.foundObject<volSymmTensorField>(kappaName_))
{ {
const auto* ptr = const symmTensorField& KWall =
mesh.cfindObject<volSymmTensorField>(kappaName_); patch().lookupPatchField<volSymmTensorField, scalar>
(
kappaName_
);
if (ptr) const vectorField n(patch().nf());
{
const symmTensorField& KWall = patch().patchField(*ptr);
const vectorField n(patch().nf()); return n & KWall & n;
return n & KWall & n;
}
} }
else
{ {
FatalErrorInFunction FatalErrorInFunction
<< "Did not find field " << kappaName_ << "Did not find field " << kappaName_
@ -120,6 +117,9 @@ kappa
<< " or volSymmTensorField." << " or volSymmTensorField."
<< exit(FatalError); << exit(FatalError);
} }
break; break;
} }
@ -131,8 +131,10 @@ kappa
mesh.lookupObject<phaseSystem>("phaseProperties") mesh.lookupObject<phaseSystem>("phaseProperties")
); );
auto tkappaEff = tmp<scalarField>::New(patch().size(), Zero); tmp<scalarField> kappaEff
auto& kappaEff = tkappaEff.ref(); (
new scalarField(patch().size(), 0.0)
);
forAll(fluid.phases(), phasei) forAll(fluid.phases(), phasei)
{ {
@ -140,10 +142,10 @@ kappa
const fvPatchScalarField& alpha = phase.boundaryField()[patchi]; const fvPatchScalarField& alpha = phase.boundaryField()[patchi];
kappaEff += alpha*phase.kappaEff(patchi)(); kappaEff.ref() += alpha*phase.kappaEff(patchi)();
} }
return tkappaEff; return kappaEff;
break; break;
} }
@ -159,11 +161,9 @@ kappa
} }
} }
// Return zero-sized (not nullptr) return scalarField(0);
return tmp<scalarField>::New();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -243,12 +243,14 @@ turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField
<< exit(FatalError); << exit(FatalError);
} }
fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
this->readValueEntry(dict, IOobjectOption::MUST_READ); if (dict.found("refValue"))
if (this->readMixedEntries(dict))
{ {
// Full restart // Full restart
refValue() = scalarField("refValue", dict, p.size());
refGrad() = scalarField("refGradient", dict, p.size());
valueFraction() = scalarField("valueFraction", dict, p.size());
} }
else else
{ {
@ -292,7 +294,8 @@ updateCoeffs()
// Since we're inside initEvaluate/evaluate there might be processor // Since we're inside initEvaluate/evaluate there might be processor
// comms underway. Change the tag we use. // comms underway. Change the tag we use.
const int oldTag = UPstream::incrMsgType(); int oldTag = UPstream::msgType();
UPstream::msgType() = oldTag+1;
// Get the coupling information from the mappedPatchBase // Get the coupling information from the mappedPatchBase
const label patchi = patch().index(); const label patchi = patch().index();
@ -305,11 +308,12 @@ updateCoeffs()
scalarField& Tp = *this; scalarField& Tp = *this;
const auto& nbrField = const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField&
refCast nbrField = refCast
< <const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField>
const turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField (
>(nbrPatch.lookupPatchField<volScalarField>(TnbrName_)); nbrPatch.lookupPatchField<volScalarField, scalar>(TnbrName_)
);
// Swap to obtain full local values of neighbour internal field // Swap to obtain full local values of neighbour internal field
scalarField TcNbr(nbrField.patchInternalField()); scalarField TcNbr(nbrField.patchInternalField());
@ -326,13 +330,13 @@ updateCoeffs()
scalarField qr(Tp.size(), 0.0); scalarField qr(Tp.size(), 0.0);
if (qrName_ != "none") if (qrName_ != "none")
{ {
qr = patch().lookupPatchField<volScalarField>(qrName_); qr = patch().lookupPatchField<volScalarField, scalar>(qrName_);
} }
scalarField qrNbr(Tp.size(), 0.0); scalarField qrNbr(Tp.size(), 0.0);
if (qrNbrName_ != "none") if (qrNbrName_ != "none")
{ {
qrNbr = nbrPatch.lookupPatchField<volScalarField>(qrNbrName_); qrNbr = nbrPatch.lookupPatchField<volScalarField, scalar>(qrNbrName_);
mpp.distribute(qrNbr); mpp.distribute(qrNbr);
} }
@ -470,9 +474,10 @@ updateCoeffs()
<< regionTypeNames_ << nl << exit(FatalError); << regionTypeNames_ << nl << exit(FatalError);
} }
UPstream::msgType(oldTag); // Restore tag
mixedFvPatchScalarField::updateCoeffs(); mixedFvPatchScalarField::updateCoeffs();
// Restore tag
UPstream::msgType() = oldTag;
} }
@ -481,7 +486,7 @@ void turbulentTemperatureTwoPhaseRadCoupledMixedFvPatchScalarField::write
Ostream& os Ostream& os
) const ) const
{ {
mixedFvPatchField<scalar>::write(os); mixedFvPatchScalarField::write(os);
os.writeEntry("kappaMethod", KMethodTypeNames_[method_]); os.writeEntry("kappaMethod", KMethodTypeNames_[method_]);
os.writeEntryIfDifferent<word>("kappa","none", kappaName_); os.writeEntryIfDifferent<word>("kappa","none", kappaName_);

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

@ -221,7 +221,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero)
) )
); );

View File

@ -13,11 +13,11 @@ forAll(cumulativeContErrIO, i)
"cumulativeContErr", "cumulativeContErr",
runTime.timeName(), runTime.timeName(),
"uniform", "uniform",
mesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
dimensionedScalar(word::null, dimless, Zero) dimensionedScalar(dimless, Zero)
) )
); );
} }

View File

@ -1,6 +1,6 @@
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(true); mesh.data::add("finalIteration", true);
} }
if (frozenFlow) if (frozenFlow)
@ -35,5 +35,5 @@ else
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(false); mesh.data::remove("finalIteration");
} }

View File

@ -1,6 +1,6 @@
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(true); mesh.data::add("finalIteration", true);
} }
{ {
@ -22,7 +22,7 @@ if (finalIter)
fvOptions.constrain(hEqn); fvOptions.constrain(hEqn);
hEqn.solve(h.select(finalIter)); hEqn.solve(mesh.solver(h.select(finalIter)));
fvOptions.correct(h); fvOptions.correct(h);
} }
@ -35,5 +35,5 @@ if (finalIter)
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(false); mesh.data::remove("finalIteration");
} }

View File

@ -33,7 +33,7 @@
} }
else else
{ {
EEqn.solve(he.select(finalIter)); EEqn.solve(mesh.solver(he.select(finalIter)));
fvOptions.correct(he); fvOptions.correct(he);
thermo.correct(); thermo.correct();

View File

@ -28,7 +28,7 @@
- fvc::snGrad(p_rgh) - fvc::snGrad(p_rgh)
)*mesh.magSf() )*mesh.magSf()
), ),
U.select(finalIter) mesh.solver(U.select(finalIter))
); );
fvOptions.correct(U); fvOptions.correct(U);

View File

@ -44,11 +44,11 @@ if (Y.size())
fvOptions.constrain(YiEqn); fvOptions.constrain(YiEqn);
YiEqn.solve("Yi"); YiEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi); fvOptions.correct(Yi);
Yi.clamp_min(0); Yi.max(0.0);
Yt += Yi; Yt += Yi;
} }
} }
@ -56,6 +56,6 @@ if (Y.size())
if (Y.size()) if (Y.size())
{ {
Y[inertIndex] = scalar(1) - Yt; Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].clamp_min(0); Y[inertIndex].max(0.0);
} }
} }

View File

@ -112,7 +112,7 @@ forAll(fluidRegions, i)
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE IOobject::NO_WRITE
), ),
dimensionedScalar(word::null, dimLength, Zero) dimensionedScalar("hRef", dimLength, Zero) // uses name
) )
); );

View File

@ -13,11 +13,11 @@ forAll(cumulativeContErrIO, i)
"cumulativeContErr", "cumulativeContErr",
runTime.timeName(), runTime.timeName(),
"uniform", "uniform",
mesh.thisDb(), mesh,
IOobject::READ_IF_PRESENT, IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
dimensionedScalar(word::null, dimless, Zero) dimensionedScalar(dimless, Zero)
) )
); );
} }

View File

@ -52,12 +52,15 @@ constrainPressure(p_rgh, rho, U, phiHbyA, rhorAUf, MRF);
p_rghEqn.solve p_rghEqn.solve
( (
p_rgh.select mesh.solver
( (
p_rgh.select
( (
oCorr == nOuterCorr-1 (
&& corr == nCorr-1 oCorr == nOuterCorr-1
&& nonOrth == nNonOrthCorr && corr == nCorr-1
&& nonOrth == nNonOrthCorr
)
) )
) )
); );

View File

@ -1,6 +1,6 @@
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(true); mesh.data::add("finalIteration", true);
} }
if (frozenFlow) if (frozenFlow)
@ -36,5 +36,5 @@ else
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(false); mesh.data::remove("finalIteration");
} }

View File

@ -1,8 +1,6 @@
bool coupled = false; fvSolution solutionDict(runTime);
{
fvSolution solutionDict(runTime); bool coupled(solutionDict.getOrDefault("coupledEnergyField", false));
solutionDict.readIfPresent("coupledEnergyField", coupled);
}
autoPtr<fvMatrix<scalar>> fvMatrixAssemblyPtr; autoPtr<fvMatrix<scalar>> fvMatrixAssemblyPtr;

View File

@ -49,11 +49,11 @@ if (adjustTimeStep)
( (
min min
( (
min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaTValue(), min(maxCo/CoNum, maxDi/DiNum)*runTime.deltaT().value(),
min(runTime.deltaTValue(), maxDeltaT) min(runTime.deltaTValue(), maxDeltaT)
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaT().value() << endl;
} }
} }

View File

@ -59,12 +59,12 @@ if (adjustTimeStep)
( (
min min
( (
min(deltaTFluid, maxDeltaTSolid)*runTime.deltaTValue(), min(deltaTFluid, maxDeltaTSolid)*runTime.deltaT().value(),
maxDeltaT maxDeltaT
) )
); );
Info<< "deltaT = " << runTime.deltaTValue() << endl; Info<< "deltaT = " << runTime.deltaT().value() << endl;
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -57,7 +57,7 @@
), ),
solidRegions[i], solidRegions[i],
dimensionedSymmTensor(tkappaByCp().dimensions(), Zero), dimensionedSymmTensor(tkappaByCp().dimensions(), Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchSymmTensorField::typeName
) )
); );

View File

@ -25,10 +25,10 @@
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(true); mesh.data::add("finalIteration", true);
} }
hEqn.solve(h.select(finalIter)); hEqn.solve(mesh.solver(h.select(finalIter)));
fvOptions.correct(h); fvOptions.correct(h);
@ -39,7 +39,7 @@
if (finalIter) if (finalIter)
{ {
mesh.data().setFinalIteration(false); mesh.data::remove("finalIteration");
} }
} }
} }

View File

@ -34,7 +34,7 @@ if (!thermo.isotropic())
), ),
mesh, mesh,
dimensionedSymmTensor(tkappaByCp().dimensions(), Zero), dimensionedSymmTensor(tkappaByCp().dimensions(), Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchSymmTensorField::typeName
) )
); );
volSymmTensorField& aniAlpha = *taniAlpha; volSymmTensorField& aniAlpha = *taniAlpha;

View File

@ -44,7 +44,7 @@ IOobject turbulencePropertiesHeader
mesh, mesh,
IOobject::MUST_READ_IF_MODIFIED, IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE, IOobject::NO_WRITE,
IOobject::NO_REGISTER false
); );
if (turbulencePropertiesHeader.typeHeaderOk<IOdictionary>(false)) if (turbulencePropertiesHeader.typeHeaderOk<IOdictionary>(false))

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

@ -89,10 +89,17 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
return; return;
} }
const auto& phip = patch().lookupPatchField<surfaceScalarField>("phi"); const fvsPatchField<scalar>& phip =
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia"); patch().lookupPatchField<surfaceScalarField, scalar>("phi");
const auto& Up = patch().lookupPatchField<volVectorField>("U");
const auto& Uap = patch().lookupPatchField<volVectorField>("Ua"); const fvsPatchField<scalar>& phiap =
patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
const fvPatchField<vector>& Uap =
patch().lookupPatchField<volVectorField, vector>("Ua");
operator==((phiap/patch().magSf() - 1.0)*phip/patch().magSf() + (Up & Uap)); operator==((phiap/patch().magSf() - 1.0)*phip/patch().magSf() + (Up & Uap));
@ -102,8 +109,8 @@ void Foam::adjointOutletPressureFvPatchScalarField::updateCoeffs()
void Foam::adjointOutletPressureFvPatchScalarField::write(Ostream& os) const void Foam::adjointOutletPressureFvPatchScalarField::write(Ostream& os) const
{ {
fvPatchField<scalar>::write(os); fvPatchScalarField::write(os);
fvPatchField<scalar>::writeValueEntry(os); writeEntry("value", os);
} }

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

@ -90,8 +90,11 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
return; return;
} }
const auto& phiap = patch().lookupPatchField<surfaceScalarField>("phia"); const fvsPatchField<scalar>& phiap =
const auto& Up = patch().lookupPatchField<volVectorField>("U"); patch().lookupPatchField<surfaceScalarField, scalar>("phia");
const fvPatchField<vector>& Up =
patch().lookupPatchField<volVectorField, vector>("U");
scalarField Un(mag(patch().nf() & Up)); scalarField Un(mag(patch().nf() & Up));
vectorField UtHat((Up - patch().nf()*Un)/(Un + SMALL)); vectorField UtHat((Up - patch().nf()*Un)/(Un + SMALL));
@ -107,8 +110,8 @@ void Foam::adjointOutletVelocityFvPatchVectorField::updateCoeffs()
void Foam::adjointOutletVelocityFvPatchVectorField::write(Ostream& os) const void Foam::adjointOutletVelocityFvPatchVectorField::write(Ostream& os) const
{ {
fvPatchField<vector>::write(os); fvPatchVectorField::write(os);
fvPatchField<vector>::writeValueEntry(os); writeEntry("value", os);
} }

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

@ -141,7 +141,7 @@ int main(int argc, char *argv[])
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(piso.finalInnerIter())); pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter()) if (piso.finalNonOrthogonalIter())
{ {

View File

@ -114,7 +114,7 @@ int main(int argc, char *argv[])
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(piso.finalInnerIter())); pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter()) if (piso.finalNonOrthogonalIter())
{ {

View File

@ -40,7 +40,7 @@ while (pimple.correctNonOrthogonal())
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -24,7 +24,7 @@ if (mesh.changing())
wordList pcorrTypes wordList pcorrTypes
( (
p.boundaryField().size(), p.boundaryField().size(),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchScalarField::typeName
); );
// Set BCs of pcorr to fixed-value for patches at which p is fixed // Set BCs of pcorr to fixed-value for patches at which p is fixed
@ -94,7 +94,7 @@ if (mesh.changing())
{ {
if (refCells[zoneId] != -1) if (refCells[zoneId] != -1)
{ {
validCells.push_back(refCells[zoneId]); validCells.append(refCells[zoneId]);
} }
} }

View File

@ -32,7 +32,7 @@ while (pimple.correctNonOrthogonal())
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -45,7 +45,7 @@ while (pimple.correctNonOrthogonal())
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -26,7 +26,7 @@ while (piso.correctNonOrthogonal())
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(piso.finalInnerIter())); pEqn.solve(mesh.solver(p.select(piso.finalInnerIter())));
if (piso.finalNonOrthogonalIter()) if (piso.finalNonOrthogonalIter())
{ {

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.
@ -106,9 +105,6 @@ int main(int argc, char *argv[])
#include "CourantNo.H" #include "CourantNo.H"
// Update settings from the control dictionary
piso.read();
// Pressure-velocity PISO corrector // Pressure-velocity PISO corrector
{ {
#include "UEqn.H" #include "UEqn.H"

View File

@ -135,7 +135,7 @@ int main(int argc, char *argv[])
- fvm::laplacian(ghrAUf, h) - fvm::laplacian(ghrAUf, h)
); );
hEqn.solve(h.select(pimple.finalInnerIter())); hEqn.solve(mesh.solver(h.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -130,7 +130,7 @@ int main(int argc, char *argv[])
), ),
mesh, mesh,
dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), dimensionedVector(cloudSU.dimensions()/dimVolume, Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchVectorField::typeName
); );
cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V();

View File

@ -34,7 +34,7 @@
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

View File

@ -111,7 +111,7 @@ int main(int argc, char *argv[])
), ),
mesh, mesh,
dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), dimensionedVector(cloudSU.dimensions()/dimVolume, Zero),
fvPatchFieldBase::zeroGradientType() zeroGradientFvPatchVectorField::typeName
); );
cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V();

View File

@ -32,7 +32,7 @@
pEqn.setReference(pRefCell, pRefValue); pEqn.setReference(pRefCell, pRefValue);
pEqn.solve(p.select(pimple.finalInnerIter())); pEqn.solve(mesh.solver(p.select(pimple.finalInnerIter())));
if (pimple.finalNonOrthogonalIter()) if (pimple.finalNonOrthogonalIter())
{ {

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