mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge remote-tracking branch 'origin/develop-pre-release' into develop-pre-release
This commit is contained in:
@ -22,4 +22,5 @@ EXE_LIBS = \
|
|||||||
-lfvOptions \
|
-lfvOptions \
|
||||||
-ldynamicFvMesh \
|
-ldynamicFvMesh \
|
||||||
-ltopoChangerFvMesh \
|
-ltopoChangerFvMesh \
|
||||||
-ldynamicMesh
|
-ldynamicMesh \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -17,4 +17,5 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lsampling \
|
-lsampling \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-lfvOptions
|
-lfvOptions \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -18,4 +18,5 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lfvOptions \
|
-lfvOptions \
|
||||||
-lsampling \
|
-lsampling \
|
||||||
-lmeshTools
|
-lmeshTools \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -16,4 +16,5 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lsampling \
|
-lsampling \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-lfvOptions
|
-lfvOptions \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -18,4 +18,5 @@ EXE_LIBS = \
|
|||||||
-lradiationModels \
|
-lradiationModels \
|
||||||
-lspecie \
|
-lspecie \
|
||||||
-lturbulenceModels \
|
-lturbulenceModels \
|
||||||
-lcompressibleTurbulenceModels
|
-lcompressibleTurbulenceModels \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -19,4 +19,5 @@ EXE_LIBS = \
|
|||||||
-lradiationModels \
|
-lradiationModels \
|
||||||
-lturbulenceModels \
|
-lturbulenceModels \
|
||||||
-lcompressibleTurbulenceModels \
|
-lcompressibleTurbulenceModels \
|
||||||
-lmeshTools
|
-lmeshTools \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -19,4 +19,5 @@ EXE_LIBS = \
|
|||||||
-ldynamicFvMesh \
|
-ldynamicFvMesh \
|
||||||
-ltopoChangerFvMesh \
|
-ltopoChangerFvMesh \
|
||||||
-ldynamicMesh \
|
-ldynamicMesh \
|
||||||
-lmeshTools
|
-lmeshTools \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -15,4 +15,5 @@ EXE_LIBS = \
|
|||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-lfvOptions \
|
-lfvOptions \
|
||||||
-lsampling
|
-lsampling \
|
||||||
|
-latmosphericModels
|
||||||
|
|||||||
@ -1,16 +1,15 @@
|
|||||||
{
|
{
|
||||||
fvScalarMatrix TEqn
|
fvScalarMatrix TEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(rho, T) + fvm::div(rhoPhi, T)
|
fvm::ddt(rho, T) + fvm::div(rhoPhi, T) - fvm::Sp(contErr, T)
|
||||||
- fvm::Sp(contErr, T)
|
|
||||||
- fvm::laplacian(turbulence.alphaEff(), T)
|
- fvm::laplacian(turbulence.alphaEff(), T)
|
||||||
+ (
|
+ (
|
||||||
divU*p
|
(divU*p)() - contErr/rho*p
|
||||||
+ fvc::ddt(rho, K) + fvc::div(rhoPhi, K)
|
+ (fvc::ddt(rho, K) + fvc::div(rhoPhi, K))() - contErr*K
|
||||||
)
|
)
|
||||||
*(
|
*(
|
||||||
alpha1/mixture.thermo1().Cv()
|
alpha1()/mixture.thermo1().Cv()()
|
||||||
+ alpha2/mixture.thermo2().Cv()
|
+ alpha2()/mixture.thermo2().Cv()()
|
||||||
)
|
)
|
||||||
==
|
==
|
||||||
fvOptions(rho, T)
|
fvOptions(rho, T)
|
||||||
|
|||||||
@ -119,12 +119,8 @@ int main(int argc, char *argv[])
|
|||||||
ghf = (g & mesh.Cf()) - ghRef;
|
ghf = (g & mesh.Cf()) - ghRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mesh.changing() && correctPhi) || mesh.topoChanging())
|
if ((mesh.changing() && correctPhi))
|
||||||
{
|
{
|
||||||
// Calculate absolute flux from the mapped surface velocity
|
|
||||||
// Note: temporary fix until mapped Uf is assessed
|
|
||||||
Uf = fvc::interpolate(U);
|
|
||||||
|
|
||||||
// Calculate absolute flux from the mapped surface velocity
|
// Calculate absolute flux from the mapped surface velocity
|
||||||
phi = mesh.Sf() & Uf;
|
phi = mesh.Sf() & Uf;
|
||||||
|
|
||||||
|
|||||||
@ -426,7 +426,7 @@ Foam::multiphaseSystem::multiphaseSystem
|
|||||||
iter(),
|
iter(),
|
||||||
*phases_.lookup(iter.key().first()),
|
*phases_.lookup(iter.key().first()),
|
||||||
*phases_.lookup(iter.key().second())
|
*phases_.lookup(iter.key().second())
|
||||||
).ptr()
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,7 +664,7 @@ Foam::tmp<Foam::volVectorField> Foam::multiphaseSystem::Svm
|
|||||||
Foam::autoPtr<Foam::multiphaseSystem::dragCoeffFields>
|
Foam::autoPtr<Foam::multiphaseSystem::dragCoeffFields>
|
||||||
Foam::multiphaseSystem::dragCoeffs() const
|
Foam::multiphaseSystem::dragCoeffs() const
|
||||||
{
|
{
|
||||||
autoPtr<dragCoeffFields> dragCoeffsPtr(new dragCoeffFields);
|
auto dragCoeffsPtr = autoPtr<dragCoeffFields>::New();
|
||||||
|
|
||||||
forAllConstIter(dragModelTable, dragModels_, iter)
|
forAllConstIter(dragModelTable, dragModels_, iter)
|
||||||
{
|
{
|
||||||
@ -706,7 +706,7 @@ Foam::multiphaseSystem::dragCoeffs() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dragCoeffsPtr().insert(iter.key(), Kptr);
|
dragCoeffsPtr().set(iter.key(), Kptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dragCoeffsPtr;
|
return dragCoeffsPtr;
|
||||||
|
|||||||
@ -70,7 +70,7 @@ HeatAndMassTransferPhaseSystem
|
|||||||
|
|
||||||
// Initially assume no mass transfer
|
// Initially assume no mass transfer
|
||||||
|
|
||||||
dmdt_.insert
|
dmdt_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -88,7 +88,7 @@ HeatAndMassTransferPhaseSystem
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
dmdtExplicit_.insert
|
dmdtExplicit_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -107,7 +107,7 @@ HeatAndMassTransferPhaseSystem
|
|||||||
volScalarField H1(heatTransferModels_[pair][pair.first()]->K());
|
volScalarField H1(heatTransferModels_[pair][pair.first()]->K());
|
||||||
volScalarField H2(heatTransferModels_[pair][pair.second()]->K());
|
volScalarField H2(heatTransferModels_[pair][pair.second()]->K());
|
||||||
|
|
||||||
Tf_.insert
|
Tf_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -257,18 +257,12 @@ template<class BasePhaseSystem>
|
|||||||
Foam::autoPtr<Foam::phaseSystem::heatTransferTable>
|
Foam::autoPtr<Foam::phaseSystem::heatTransferTable>
|
||||||
Foam::HeatAndMassTransferPhaseSystem<BasePhaseSystem>::heatTransfer() const
|
Foam::HeatAndMassTransferPhaseSystem<BasePhaseSystem>::heatTransfer() const
|
||||||
{
|
{
|
||||||
autoPtr<phaseSystem::heatTransferTable> eqnsPtr
|
auto eqnsPtr = autoPtr<phaseSystem::heatTransferTable>::New();
|
||||||
(
|
auto& eqns = *eqnsPtr;
|
||||||
new phaseSystem::heatTransferTable()
|
|
||||||
);
|
|
||||||
|
|
||||||
phaseSystem::heatTransferTable& eqns = eqnsPtr();
|
for (const phaseModel& phase : this->phaseModels_)
|
||||||
|
|
||||||
forAll(this->phaseModels_, phasei)
|
|
||||||
{
|
{
|
||||||
const phaseModel& phase = this->phaseModels_[phasei];
|
eqns.set
|
||||||
|
|
||||||
eqns.insert
|
|
||||||
(
|
(
|
||||||
phase.name(),
|
phase.name(),
|
||||||
new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
|
new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
|
||||||
|
|||||||
@ -107,18 +107,12 @@ template<class BasePhaseSystem>
|
|||||||
Foam::autoPtr<Foam::phaseSystem::heatTransferTable>
|
Foam::autoPtr<Foam::phaseSystem::heatTransferTable>
|
||||||
Foam::HeatTransferPhaseSystem<BasePhaseSystem>::heatTransfer() const
|
Foam::HeatTransferPhaseSystem<BasePhaseSystem>::heatTransfer() const
|
||||||
{
|
{
|
||||||
autoPtr<phaseSystem::heatTransferTable> eqnsPtr
|
auto eqnsPtr = autoPtr<phaseSystem::heatTransferTable>::New();
|
||||||
(
|
auto& eqns = *eqnsPtr;
|
||||||
new phaseSystem::heatTransferTable()
|
|
||||||
);
|
|
||||||
|
|
||||||
phaseSystem::heatTransferTable& eqns = eqnsPtr();
|
for (const phaseModel& phase : this->phaseModels_)
|
||||||
|
|
||||||
forAll(this->phaseModels_, phasei)
|
|
||||||
{
|
{
|
||||||
const phaseModel& phase = this->phaseModels_[phasei];
|
eqns.set
|
||||||
|
|
||||||
eqns.insert
|
|
||||||
(
|
(
|
||||||
phase.name(),
|
phase.name(),
|
||||||
new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
|
new fvScalarMatrix(phase.thermo().he(), dimEnergy/dimTime)
|
||||||
|
|||||||
@ -62,22 +62,16 @@ Foam::InterfaceCompositionPhaseChangePhaseSystem<BasePhaseSystem>::
|
|||||||
massTransfer() const
|
massTransfer() const
|
||||||
{
|
{
|
||||||
// Create a mass transfer matrix for each species of each phase
|
// Create a mass transfer matrix for each species of each phase
|
||||||
autoPtr<phaseSystem::massTransferTable> eqnsPtr
|
auto eqnsPtr = autoPtr<phaseSystem::massTransferTable>::New();
|
||||||
(
|
auto& eqns = *eqnsPtr;
|
||||||
new phaseSystem::massTransferTable()
|
|
||||||
);
|
|
||||||
|
|
||||||
phaseSystem::massTransferTable& eqns = eqnsPtr();
|
for (const phaseModel& phase : this->phaseModels_)
|
||||||
|
|
||||||
forAll(this->phaseModels_, phasei)
|
|
||||||
{
|
{
|
||||||
const phaseModel& phase = this->phaseModels_[phasei];
|
|
||||||
|
|
||||||
const PtrList<volScalarField>& Yi = phase.Y();
|
const PtrList<volScalarField>& Yi = phase.Y();
|
||||||
|
|
||||||
forAll(Yi, i)
|
forAll(Yi, i)
|
||||||
{
|
{
|
||||||
eqns.insert
|
eqns.set
|
||||||
(
|
(
|
||||||
Yi[i].name(),
|
Yi[i].name(),
|
||||||
new fvScalarMatrix(Yi[i], dimMass/dimTime)
|
new fvScalarMatrix(Yi[i], dimMass/dimTime)
|
||||||
|
|||||||
@ -87,7 +87,7 @@ MomentumTransferPhaseSystem
|
|||||||
const phasePair& pair =
|
const phasePair& pair =
|
||||||
*(this->phasePairs_[dragModelIter.key()]);
|
*(this->phasePairs_[dragModelIter.key()]);
|
||||||
|
|
||||||
Kds_.insert
|
Kds_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -103,7 +103,7 @@ MomentumTransferPhaseSystem
|
|||||||
const phasePair& pair =
|
const phasePair& pair =
|
||||||
*(this->phasePairs_[virtualMassModelIter.key()]);
|
*(this->phasePairs_[virtualMassModelIter.key()]);
|
||||||
|
|
||||||
Vms_.insert
|
Vms_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -373,18 +373,12 @@ Foam::autoPtr<Foam::phaseSystem::momentumTransferTable>
|
|||||||
Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::momentumTransfer() const
|
Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::momentumTransfer() const
|
||||||
{
|
{
|
||||||
// Create a momentum transfer matrix for each phase
|
// Create a momentum transfer matrix for each phase
|
||||||
autoPtr<phaseSystem::momentumTransferTable> eqnsPtr
|
auto eqnsPtr = autoPtr<phaseSystem::momentumTransferTable>::New();
|
||||||
(
|
auto& eqns = *eqnsPtr;
|
||||||
new phaseSystem::momentumTransferTable()
|
|
||||||
);
|
|
||||||
|
|
||||||
phaseSystem::momentumTransferTable& eqns = eqnsPtr();
|
for (const phaseModel& phase : this->phaseModels_)
|
||||||
|
|
||||||
forAll(this->phaseModels_, phasei)
|
|
||||||
{
|
{
|
||||||
const phaseModel& phase = this->phaseModels_[phasei];
|
eqns.set
|
||||||
|
|
||||||
eqns.insert
|
|
||||||
(
|
(
|
||||||
phase.name(),
|
phase.name(),
|
||||||
new fvVectorMatrix(phase.U(), dimMass*dimVelocity/dimTime)
|
new fvVectorMatrix(phase.U(), dimMass*dimVelocity/dimTime)
|
||||||
@ -492,11 +486,8 @@ template<class BasePhaseSystem>
|
|||||||
Foam::autoPtr<Foam::PtrList<Foam::volVectorField>>
|
Foam::autoPtr<Foam::PtrList<Foam::volVectorField>>
|
||||||
Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::Fs() const
|
Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::Fs() const
|
||||||
{
|
{
|
||||||
autoPtr<PtrList<volVectorField>> tFs
|
auto tFs = autoPtr<PtrList<volVectorField>>::New(this->phases().size());
|
||||||
(
|
auto& Fs = *tFs;
|
||||||
new PtrList<volVectorField>(this->phases().size())
|
|
||||||
);
|
|
||||||
PtrList<volVectorField>& Fs = tFs();
|
|
||||||
|
|
||||||
// Add the lift force
|
// Add the lift force
|
||||||
forAllConstIters(liftModels_, modelIter)
|
forAllConstIters(liftModels_, modelIter)
|
||||||
@ -570,11 +561,9 @@ Foam::MomentumTransferPhaseSystem<BasePhaseSystem>::phiDs
|
|||||||
const PtrList<volScalarField>& rAUs
|
const PtrList<volScalarField>& rAUs
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
autoPtr<PtrList<surfaceScalarField>> tphiDs
|
auto tphiDs =
|
||||||
(
|
autoPtr<PtrList<surfaceScalarField>>::New(this->phases().size());
|
||||||
new PtrList<surfaceScalarField>(this->phases().size())
|
auto& phiDs = *tphiDs;
|
||||||
);
|
|
||||||
PtrList<surfaceScalarField>& phiDs = tphiDs();
|
|
||||||
|
|
||||||
// Add the turbulent dispersion force
|
// Add the turbulent dispersion force
|
||||||
forAllConstIters(turbulentDispersionModels_, turbulentDispersionModelIter)
|
forAllConstIters(turbulentDispersionModels_, turbulentDispersionModelIter)
|
||||||
|
|||||||
@ -52,7 +52,7 @@ ThermalPhaseChangePhaseSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initially assume no mass transfer
|
// Initially assume no mass transfer
|
||||||
iDmdt_.insert
|
iDmdt_.set
|
||||||
(
|
(
|
||||||
pair,
|
pair,
|
||||||
new volScalarField
|
new volScalarField
|
||||||
@ -186,22 +186,16 @@ Foam::autoPtr<Foam::phaseSystem::massTransferTable>
|
|||||||
Foam::ThermalPhaseChangePhaseSystem<BasePhaseSystem>::massTransfer() const
|
Foam::ThermalPhaseChangePhaseSystem<BasePhaseSystem>::massTransfer() const
|
||||||
{
|
{
|
||||||
// Create a mass transfer matrix for each species of each phase
|
// Create a mass transfer matrix for each species of each phase
|
||||||
autoPtr<phaseSystem::massTransferTable> eqnsPtr
|
auto eqnsPtr = autoPtr<phaseSystem::massTransferTable>::New();
|
||||||
(
|
auto& eqns = *eqnsPtr;
|
||||||
new phaseSystem::massTransferTable()
|
|
||||||
);
|
|
||||||
|
|
||||||
phaseSystem::massTransferTable& eqns = eqnsPtr();
|
for (const phaseModel& phase : this->phaseModels_)
|
||||||
|
|
||||||
forAll(this->phaseModels_, phasei)
|
|
||||||
{
|
{
|
||||||
const phaseModel& phase = this->phaseModels_[phasei];
|
|
||||||
|
|
||||||
const PtrList<volScalarField>& Yi = phase.Y();
|
const PtrList<volScalarField>& Yi = phase.Y();
|
||||||
|
|
||||||
forAll(Yi, i)
|
forAll(Yi, i)
|
||||||
{
|
{
|
||||||
eqns.insert
|
eqns.set
|
||||||
(
|
(
|
||||||
Yi[i].name(),
|
Yi[i].name(),
|
||||||
new fvScalarMatrix(Yi[i], dimMass/dimTime)
|
new fvScalarMatrix(Yi[i], dimMass/dimTime)
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
Test-hashPtrTable.C
|
Test-HashPtrTable.C
|
||||||
|
|
||||||
EXE = $(FOAM_USER_APPBIN)/Test-hashPtrTable
|
EXE = $(FOAM_USER_APPBIN)/Test-HashPtrTable
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -27,6 +27,7 @@ Description
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "autoPtr.H"
|
||||||
#include "HashPtrTable.H"
|
#include "HashPtrTable.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -42,7 +43,7 @@ void printTable(const HashPtrTable<T>& table)
|
|||||||
Info<< iter.key() << " = ";
|
Info<< iter.key() << " = ";
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
Info<< *ptr;
|
Info<< *ptr << " (" << long(ptr) << ")";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -77,11 +78,11 @@ void printTable(const HashPtrTable<T>& table)
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
HashPtrTable<double> myTable;
|
HashPtrTable<double> myTable;
|
||||||
myTable.insert("abc", new double(42.1));
|
myTable.set("abc", new double(42.1));
|
||||||
myTable.insert("def", nullptr);
|
myTable.set("def", nullptr);
|
||||||
myTable.insert("pi", new double(3.14159));
|
myTable.set("pi", new double(3.14159));
|
||||||
myTable.insert("natlog", new double(2.718282));
|
myTable.set("natlog", new double(2.718282));
|
||||||
myTable.insert("sqrt2", new double(1.414214));
|
myTable.insert("sqrt2", autoPtr<double>::New(1.414214));
|
||||||
|
|
||||||
// Info<< myTable << endl;
|
// Info<< myTable << endl;
|
||||||
printTable(myTable);
|
printTable(myTable);
|
||||||
@ -105,6 +106,25 @@ int main()
|
|||||||
|
|
||||||
printTable(myTable);
|
printTable(myTable);
|
||||||
|
|
||||||
|
HashPtrTable<double> moved(std::move(copy));
|
||||||
|
|
||||||
|
Info<< nl << "test movable" << nl;
|
||||||
|
Info<<"input:" << nl;
|
||||||
|
printTable(copy);
|
||||||
|
|
||||||
|
Info<<"output:" << nl;
|
||||||
|
printTable(moved);
|
||||||
|
|
||||||
|
HashPtrTable<double> other;
|
||||||
|
|
||||||
|
Info<<"move assign" << nl;
|
||||||
|
|
||||||
|
other = std::move(moved);
|
||||||
|
printTable(other);
|
||||||
|
|
||||||
|
Info<<"old" << nl;
|
||||||
|
printTable(moved);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
3
applications/test/PtrMap/Make/files
Normal file
3
applications/test/PtrMap/Make/files
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Test-PtrMap.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_USER_APPBIN)/Test-PtrMap
|
||||||
0
applications/test/PtrMap/Make/options
Normal file
0
applications/test/PtrMap/Make/options
Normal file
130
applications/test/PtrMap/Test-PtrMap.C
Normal file
130
applications/test/PtrMap/Test-PtrMap.C
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Description
|
||||||
|
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include "PtrMap.H"
|
||||||
|
|
||||||
|
using namespace Foam;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void printTable(const PtrMap<T>& table)
|
||||||
|
{
|
||||||
|
Info<< table.size() << nl << "(" << nl;
|
||||||
|
|
||||||
|
forAllConstIters(table, iter)
|
||||||
|
{
|
||||||
|
const T* ptr = iter.object();
|
||||||
|
Info<< iter.key() << " = ";
|
||||||
|
if (ptr)
|
||||||
|
{
|
||||||
|
Info<< *ptr << " (" << long(ptr) << ")";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info<< "nullptr";
|
||||||
|
}
|
||||||
|
Info<< nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< ")" << endl;
|
||||||
|
|
||||||
|
// Values only, with for-range
|
||||||
|
Info<< "values (";
|
||||||
|
for (auto val : table)
|
||||||
|
{
|
||||||
|
Info<< ' ';
|
||||||
|
if (val)
|
||||||
|
{
|
||||||
|
Info<< *val;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info<< "nullptr";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Info<< " )" << nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
// Main program:
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
PtrMap<double> myTable;
|
||||||
|
myTable.set(1, new double(42.1));
|
||||||
|
myTable.set(2, nullptr);
|
||||||
|
myTable.set(3, new double(3.14159));
|
||||||
|
myTable.set(4, new double(2.718282));
|
||||||
|
myTable.set(4, new double(1.414214));
|
||||||
|
|
||||||
|
// Info<< myTable << endl;
|
||||||
|
printTable(myTable);
|
||||||
|
|
||||||
|
PtrMap<double> copy(myTable);
|
||||||
|
|
||||||
|
// Info<< copy << endl;
|
||||||
|
printTable(copy);
|
||||||
|
Info<< copy << endl;
|
||||||
|
|
||||||
|
Info<<"\nerase some existing and non-existing entries" << nl;
|
||||||
|
|
||||||
|
auto iter = myTable.find(3);
|
||||||
|
myTable.erase(iter);
|
||||||
|
|
||||||
|
iter = myTable.find(1000); // unknown key
|
||||||
|
myTable.erase(iter);
|
||||||
|
|
||||||
|
myTable.erase(1);
|
||||||
|
iter = myTable.find(100000); // unknown key
|
||||||
|
|
||||||
|
printTable(myTable);
|
||||||
|
|
||||||
|
PtrMap<double> moved(std::move(copy));
|
||||||
|
|
||||||
|
Info<< nl << "test movable" << nl;
|
||||||
|
Info<<"input:" << nl;
|
||||||
|
printTable(copy);
|
||||||
|
|
||||||
|
Info<<"output:" << nl;
|
||||||
|
printTable(moved);
|
||||||
|
|
||||||
|
PtrMap<double> other;
|
||||||
|
|
||||||
|
Info<<"move assign" << nl;
|
||||||
|
|
||||||
|
other = std::move(moved);
|
||||||
|
printTable(other);
|
||||||
|
|
||||||
|
Info<<"old" << nl;
|
||||||
|
printTable(moved);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -813,28 +813,33 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// Read all fields in time and constant directories
|
// Read all fields in time and constant directories
|
||||||
IOobjectList objects(mesh, runTime.timeName());
|
IOobjectList objects(mesh, runTime.timeName());
|
||||||
IOobjectList timeObjects(IOobjectList(mesh, mesh.facesInstance()));
|
|
||||||
forAllConstIter(IOobjectList, timeObjects, iter)
|
|
||||||
{
|
{
|
||||||
|
IOobjectList timeObjects(mesh, mesh.facesInstance());
|
||||||
|
|
||||||
|
// Transfer specific types
|
||||||
|
forAllIters(timeObjects, iter)
|
||||||
|
{
|
||||||
|
autoPtr<IOobject> objPtr(timeObjects.remove(iter));
|
||||||
|
const auto& obj = *objPtr;
|
||||||
|
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
iter()->headerClassName() == volScalarField::typeName
|
obj.headerClassName() == volScalarField::typeName
|
||||||
|| iter()->headerClassName() == volVectorField::typeName
|
|| obj.headerClassName() == volVectorField::typeName
|
||||||
|| iter()->headerClassName() == volSphericalTensorField::typeName
|
|| obj.headerClassName() == volSphericalTensorField::typeName
|
||||||
|| iter()->headerClassName() == volTensorField::typeName
|
|| obj.headerClassName() == volTensorField::typeName
|
||||||
|| iter()->headerClassName() == volSymmTensorField::typeName
|
|| obj.headerClassName() == volSymmTensorField::typeName
|
||||||
|| iter()->headerClassName() == surfaceScalarField::typeName
|
|| obj.headerClassName() == surfaceScalarField::typeName
|
||||||
|| iter()->headerClassName() == surfaceVectorField::typeName
|
|| obj.headerClassName() == surfaceVectorField::typeName
|
||||||
|| iter()->headerClassName()
|
|| obj.headerClassName() == surfaceSphericalTensorField::typeName
|
||||||
== surfaceSphericalTensorField::typeName
|
|| obj.headerClassName() == surfaceSymmTensorField::typeName
|
||||||
|| iter()->headerClassName() == surfaceSymmTensorField::typeName
|
|| obj.headerClassName() == surfaceTensorField::typeName
|
||||||
|| iter()->headerClassName() == surfaceTensorField::typeName
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
objects.add(*iter());
|
objects.add(objPtr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read vol fields and subset.
|
// Read vol fields and subset.
|
||||||
|
|
||||||
wordList scalarNames(objects.names(volScalarField::typeName));
|
wordList scalarNames(objects.names(volScalarField::typeName));
|
||||||
|
|||||||
Submodule modules/catalyst updated: 5828d45108...d31e13e12b
@ -82,6 +82,7 @@ wmake $targetType sixDoFRigidBodyState
|
|||||||
wmake $targetType rigidBodyDynamics
|
wmake $targetType rigidBodyDynamics
|
||||||
wmake $targetType rigidBodyMeshMotion
|
wmake $targetType rigidBodyMeshMotion
|
||||||
wmake $targetType semiPermeableBaffle
|
wmake $targetType semiPermeableBaffle
|
||||||
|
wmake $targetType atmosphericModels
|
||||||
|
|
||||||
# Needs access to Turbulence
|
# Needs access to Turbulence
|
||||||
|
|
||||||
|
|||||||
@ -628,36 +628,36 @@ fields/cloud/cloud.C
|
|||||||
|
|
||||||
Fields = fields/Fields
|
Fields = fields/Fields
|
||||||
|
|
||||||
|
$(Fields)/Field/FieldBase.C
|
||||||
$(Fields)/labelField/labelField.C
|
$(Fields)/labelField/labelField.C
|
||||||
$(Fields)/scalarField/scalarField.C
|
|
||||||
$(Fields)/vectorField/vectorField.C
|
|
||||||
$(Fields)/vector2DField/vector2DField.C
|
|
||||||
$(Fields)/sphericalTensorField/sphericalTensorField.C
|
|
||||||
$(Fields)/diagTensorField/diagTensorField.C
|
|
||||||
$(Fields)/symmTensorField/symmTensorField.C
|
|
||||||
$(Fields)/tensorField/tensorField.C
|
|
||||||
$(Fields)/quaternionField/quaternionField.C
|
|
||||||
$(Fields)/triadField/triadField.C
|
|
||||||
$(Fields)/complexFields/complexFields.C
|
|
||||||
|
|
||||||
$(Fields)/labelField/labelIOField.C
|
$(Fields)/labelField/labelIOField.C
|
||||||
$(Fields)/labelField/labelFieldIOField.C
|
$(Fields)/labelField/labelFieldIOField.C
|
||||||
|
$(Fields)/scalarField/scalarField.C
|
||||||
$(Fields)/scalarField/scalarIOField.C
|
$(Fields)/scalarField/scalarIOField.C
|
||||||
$(Fields)/scalarField/scalarFieldIOField.C
|
$(Fields)/scalarField/scalarFieldIOField.C
|
||||||
|
$(Fields)/vectorField/vectorField.C
|
||||||
$(Fields)/vectorField/vectorIOField.C
|
$(Fields)/vectorField/vectorIOField.C
|
||||||
$(Fields)/vectorField/vectorFieldIOField.C
|
$(Fields)/vectorField/vectorFieldIOField.C
|
||||||
|
$(Fields)/vector2DField/vector2DField.C
|
||||||
$(Fields)/vector2DField/vector2DIOField.C
|
$(Fields)/vector2DField/vector2DIOField.C
|
||||||
$(Fields)/vector2DField/vector2DFieldIOField.C
|
$(Fields)/vector2DField/vector2DFieldIOField.C
|
||||||
|
$(Fields)/sphericalTensorField/sphericalTensorField.C
|
||||||
$(Fields)/sphericalTensorField/sphericalTensorIOField.C
|
$(Fields)/sphericalTensorField/sphericalTensorIOField.C
|
||||||
$(Fields)/sphericalTensorField/sphericalTensorFieldIOField.C
|
$(Fields)/sphericalTensorField/sphericalTensorFieldIOField.C
|
||||||
|
$(Fields)/diagTensorField/diagTensorField.C
|
||||||
$(Fields)/diagTensorField/diagTensorIOField.C
|
$(Fields)/diagTensorField/diagTensorIOField.C
|
||||||
$(Fields)/diagTensorField/diagTensorFieldIOField.C
|
$(Fields)/diagTensorField/diagTensorFieldIOField.C
|
||||||
|
$(Fields)/symmTensorField/symmTensorField.C
|
||||||
$(Fields)/symmTensorField/symmTensorIOField.C
|
$(Fields)/symmTensorField/symmTensorIOField.C
|
||||||
$(Fields)/symmTensorField/symmTensorFieldIOField.C
|
$(Fields)/symmTensorField/symmTensorFieldIOField.C
|
||||||
|
$(Fields)/tensorField/tensorField.C
|
||||||
$(Fields)/tensorField/tensorIOField.C
|
$(Fields)/tensorField/tensorIOField.C
|
||||||
$(Fields)/tensorField/tensorFieldIOField.C
|
$(Fields)/tensorField/tensorFieldIOField.C
|
||||||
|
$(Fields)/quaternionField/quaternionField.C
|
||||||
$(Fields)/quaternionField/quaternionIOField.C
|
$(Fields)/quaternionField/quaternionIOField.C
|
||||||
|
$(Fields)/triadField/triadField.C
|
||||||
$(Fields)/triadField/triadIOField.C
|
$(Fields)/triadField/triadIOField.C
|
||||||
|
$(Fields)/complexFields/complexFields.C
|
||||||
$(Fields)/transformField/transformField.C
|
$(Fields)/transformField/transformField.C
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -28,20 +28,6 @@ License
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
|
||||||
Foam::HashPtrTable<T, Key, Hash>::HashPtrTable()
|
|
||||||
:
|
|
||||||
parent_type()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
|
||||||
Foam::HashPtrTable<T, Key, Hash>::HashPtrTable(const label size)
|
|
||||||
:
|
|
||||||
parent_type(size)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
Foam::HashPtrTable<T, Key, Hash>::HashPtrTable
|
Foam::HashPtrTable<T, Key, Hash>::HashPtrTable
|
||||||
(
|
(
|
||||||
@ -55,16 +41,26 @@ Foam::HashPtrTable<T, Key, Hash>::HashPtrTable
|
|||||||
const T* ptr = iter.object();
|
const T* ptr = iter.object();
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
this->insert(iter.key(), new T(*ptr));
|
this->set(iter.key(), new T(*ptr));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->insert(iter.key(), nullptr);
|
this->set(iter.key(), nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class Key, class Hash>
|
||||||
|
Foam::HashPtrTable<T, Key, Hash>::HashPtrTable
|
||||||
|
(
|
||||||
|
HashPtrTable<T, Key, Hash>&& ht
|
||||||
|
)
|
||||||
|
:
|
||||||
|
parent_type(std::move(ht))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
@ -77,13 +73,13 @@ Foam::HashPtrTable<T, Key, Hash>::~HashPtrTable()
|
|||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
T* Foam::HashPtrTable<T, Key, Hash>::remove(iterator& iter)
|
Foam::autoPtr<T> Foam::HashPtrTable<T, Key, Hash>::remove(iterator& iter)
|
||||||
{
|
{
|
||||||
if (iter.found())
|
if (iter.found())
|
||||||
{
|
{
|
||||||
T* ptr = iter.object();
|
autoPtr<T> aptr(iter.object());
|
||||||
this->parent_type::erase(iter);
|
this->parent_type::erase(iter);
|
||||||
return ptr;
|
return aptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -140,11 +136,10 @@ void Foam::HashPtrTable<T, Key, Hash>::operator=
|
|||||||
const HashPtrTable<T, Key, Hash>& rhs
|
const HashPtrTable<T, Key, Hash>& rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Check for assignment to self
|
|
||||||
if (this == &rhs)
|
if (this == &rhs)
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "attempted assignment to self"
|
<< "attempted copy assignment to self"
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,16 +150,34 @@ void Foam::HashPtrTable<T, Key, Hash>::operator=
|
|||||||
const T* ptr = iter.object();
|
const T* ptr = iter.object();
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
this->insert(iter.key(), new T(*ptr));
|
this->set(iter.key(), new T(*ptr));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->insert(iter.key(), nullptr);
|
this->set(iter.key(), nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class Key, class Hash>
|
||||||
|
void Foam::HashPtrTable<T, Key, Hash>::operator=
|
||||||
|
(
|
||||||
|
HashPtrTable<T, Key, Hash>&& rhs
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (this == &rhs)
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "attempted move assignment to self"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->clear();
|
||||||
|
this->transfer(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#include "HashPtrTableIO.C"
|
#include "HashPtrTableIO.C"
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -43,11 +43,12 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Forward declarations
|
||||||
|
|
||||||
class Istream;
|
class Istream;
|
||||||
class Ostream;
|
class Ostream;
|
||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
template<class T> class autoPtr;
|
||||||
|
|
||||||
template<class T, class Key, class Hash> class HashPtrTable;
|
template<class T, class Key, class Hash> class HashPtrTable;
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
@ -92,10 +93,10 @@ public:
|
|||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct null with default table capacity
|
//- Construct null with default table capacity
|
||||||
HashPtrTable();
|
inline HashPtrTable();
|
||||||
|
|
||||||
//- Construct given initial table capacity
|
//- Construct given initial table capacity
|
||||||
explicit HashPtrTable(const label size);
|
explicit inline HashPtrTable(const label size);
|
||||||
|
|
||||||
//- Construct from Istream using given Istream constructor class
|
//- Construct from Istream using given Istream constructor class
|
||||||
template<class INew>
|
template<class INew>
|
||||||
@ -107,9 +108,12 @@ public:
|
|||||||
//- Construct from dictionary with default dictionary constructor class
|
//- Construct from dictionary with default dictionary constructor class
|
||||||
explicit HashPtrTable(const dictionary& dict);
|
explicit HashPtrTable(const dictionary& dict);
|
||||||
|
|
||||||
//- Construct as copy
|
//- Copy construct
|
||||||
HashPtrTable(const this_type& ht);
|
HashPtrTable(const this_type& ht);
|
||||||
|
|
||||||
|
//- Move construct
|
||||||
|
HashPtrTable(this_type&& ht);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
~HashPtrTable();
|
~HashPtrTable();
|
||||||
@ -121,16 +125,18 @@ public:
|
|||||||
|
|
||||||
//- Remove and return the pointer specified by given iterator.
|
//- Remove and return the pointer specified by given iterator.
|
||||||
// Includes a safeguard against the end-iterator.
|
// Includes a safeguard against the end-iterator.
|
||||||
T* remove(iterator& iter);
|
autoPtr<T> remove(iterator& iter);
|
||||||
|
|
||||||
//- Erase an entry specified by given iterator.
|
//- Erase an entry specified by given iterator and delete the
|
||||||
|
//- allocated pointer.
|
||||||
// Includes a safeguard against the end-iterator.
|
// Includes a safeguard against the end-iterator.
|
||||||
bool erase(iterator& iter);
|
bool erase(iterator& iter);
|
||||||
|
|
||||||
//- Erase an entry specified by the given key
|
//- Erase an entry specified by the given key and delete the
|
||||||
|
//- allocated pointer.
|
||||||
bool erase(const Key& key);
|
bool erase(const Key& key);
|
||||||
|
|
||||||
//- Clear all entries from table and deleting any allocated pointers
|
//- Clear all entries from table and delete any allocated pointers
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
@ -142,6 +148,9 @@ public:
|
|||||||
//- Copy assignment
|
//- Copy assignment
|
||||||
void operator=(const this_type& rhs);
|
void operator=(const this_type& rhs);
|
||||||
|
|
||||||
|
//- Move assignment
|
||||||
|
void operator=(this_type&& rhs);
|
||||||
|
|
||||||
|
|
||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
|
||||||
@ -156,6 +165,31 @@ public:
|
|||||||
Ostream& os,
|
Ostream& os,
|
||||||
const HashPtrTable<T, Key, Hash>& tbl
|
const HashPtrTable<T, Key, Hash>& tbl
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Housekeeping
|
||||||
|
|
||||||
|
//- No insert() with raw pointers (potential memory leaks)
|
||||||
|
// Use insert() with autoPtr or set()
|
||||||
|
inline bool insert(const Key&, T*) = delete;
|
||||||
|
|
||||||
|
//- Insert a new entry, not overwriting existing entries.
|
||||||
|
// \return True if the entry inserted, which means that it did
|
||||||
|
// not previously exist in the table.
|
||||||
|
inline bool insert(const Key& key, autoPtr<T>& aptr);
|
||||||
|
|
||||||
|
//- Insert a new entry, not overwriting existing entries.
|
||||||
|
inline bool insert(const Key& key, autoPtr<T>&& aptr);
|
||||||
|
|
||||||
|
//- Use set(), not insert() to avoid potential memory leaks
|
||||||
|
//- Assign a new entry, overwriting existing entries.
|
||||||
|
inline bool set(const Key& key, T* ptr);
|
||||||
|
|
||||||
|
//- Assign a new entry, overwriting existing entries.
|
||||||
|
inline bool set(const Key& key, autoPtr<T>& aptr);
|
||||||
|
|
||||||
|
//- Assign a new entry, overwriting existing entries.
|
||||||
|
inline bool set(const Key& key, autoPtr<T>&& aptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -165,6 +199,10 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "HashPtrTableI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#ifdef NoRepository
|
#ifdef NoRepository
|
||||||
#include "HashPtrTable.C"
|
#include "HashPtrTable.C"
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -65,7 +65,7 @@ void Foam::HashPtrTable<T, Key, Hash>::read(Istream& is, const INew& inew)
|
|||||||
{
|
{
|
||||||
Key key;
|
Key key;
|
||||||
is >> key;
|
is >> key;
|
||||||
this->insert(key, inew(key, is).ptr());
|
this->set(key, inew(key, is).ptr());
|
||||||
|
|
||||||
is.fatalCheck
|
is.fatalCheck
|
||||||
(
|
(
|
||||||
@ -110,7 +110,7 @@ void Foam::HashPtrTable<T, Key, Hash>::read(Istream& is, const INew& inew)
|
|||||||
is.putBack(lastToken);
|
is.putBack(lastToken);
|
||||||
Key key;
|
Key key;
|
||||||
is >> key;
|
is >> key;
|
||||||
this->insert(key, inew(key, is).ptr());
|
this->set(key, inew(key, is).ptr());
|
||||||
|
|
||||||
is.fatalCheck
|
is.fatalCheck
|
||||||
(
|
(
|
||||||
@ -147,7 +147,7 @@ void Foam::HashPtrTable<T, Key, Hash>::read
|
|||||||
{
|
{
|
||||||
const word& k = iter().keyword();
|
const word& k = iter().keyword();
|
||||||
|
|
||||||
this->insert(k, inew(dict.subDict(k)).ptr());
|
this->set(k, inew(dict.subDict(k)).ptr());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -298,7 +298,7 @@ Foam::label Foam::HashTable<T, Key, Hash>::countEntries
|
|||||||
|
|
||||||
|
|
||||||
template<class T, class Key, class Hash>
|
template<class T, class Key, class Hash>
|
||||||
bool Foam::HashTable<T, Key, Hash>::set
|
bool Foam::HashTable<T, Key, Hash>::setEntry
|
||||||
(
|
(
|
||||||
const Key& key,
|
const Key& key,
|
||||||
const T& obj,
|
const T& obj,
|
||||||
|
|||||||
@ -165,8 +165,10 @@ class HashTable
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//- Disallow default bitwise copy construct / assignment
|
//- No copy construct
|
||||||
pair_entry(const pair_entry&) = delete;
|
pair_entry(const pair_entry&) = delete;
|
||||||
|
|
||||||
|
//- No copy assignment
|
||||||
void operator=(const pair_entry&) = delete;
|
void operator=(const pair_entry&) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -214,8 +216,10 @@ class HashTable
|
|||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//- Disallow default bitwise copy construct / assignment
|
//- No copy construct
|
||||||
unary_entry(const unary_entry&) = delete;
|
unary_entry(const unary_entry&) = delete;
|
||||||
|
|
||||||
|
//- No copy assignment
|
||||||
void operator=(const unary_entry&) = delete;
|
void operator=(const unary_entry&) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -249,7 +253,7 @@ class HashTable
|
|||||||
|
|
||||||
//- Assign a new hash-entry to a possibly already existing key.
|
//- Assign a new hash-entry to a possibly already existing key.
|
||||||
// \return True if the new entry was set.
|
// \return True if the new entry was set.
|
||||||
bool set(const Key& key, const T& obj, const bool overwrite);
|
bool setEntry(const Key& key, const T& obj, const bool overwrite);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -606,10 +610,10 @@ public:
|
|||||||
//- Return existing entry or insert a new entry.
|
//- Return existing entry or insert a new entry.
|
||||||
inline T& operator()(const Key& key, const T& deflt);
|
inline T& operator()(const Key& key, const T& deflt);
|
||||||
|
|
||||||
//- Copy assignment
|
//- Copy assign
|
||||||
void operator=(const HashTable<T, Key, Hash>& rhs);
|
void operator=(const HashTable<T, Key, Hash>& rhs);
|
||||||
|
|
||||||
//- Copy assignment from an initializer list
|
//- Copy assign from an initializer list
|
||||||
void operator=(std::initializer_list<std::pair<Key, T>> rhs);
|
void operator=(std::initializer_list<std::pair<Key, T>> rhs);
|
||||||
|
|
||||||
//- Move assign
|
//- Move assign
|
||||||
|
|||||||
@ -121,7 +121,7 @@ inline bool Foam::HashTable<T, Key, Hash>::insert
|
|||||||
const T& obj
|
const T& obj
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return this->set(key, obj, false); // No overwrite
|
return this->setEntry(key, obj, false); // No overwrite
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ inline bool Foam::HashTable<T, Key, Hash>::set
|
|||||||
const T& obj
|
const T& obj
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return this->set(key, obj, true); // Overwrite
|
return this->setEntry(key, obj, true); // Overwrite
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -80,11 +80,32 @@ public:
|
|||||||
parent_type(is)
|
parent_type(is)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//- Construct as copy
|
//- Copy construct
|
||||||
PtrMap(const this_type& map)
|
PtrMap(const this_type& map)
|
||||||
:
|
:
|
||||||
parent_type(map)
|
parent_type(map)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
//- Move construct
|
||||||
|
PtrMap(this_type&& map)
|
||||||
|
:
|
||||||
|
parent_type(std::move(map))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// Member Operators
|
||||||
|
|
||||||
|
//- Copy assignment
|
||||||
|
void operator=(const this_type& rhs)
|
||||||
|
{
|
||||||
|
parent_type::operator=(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Move assignment
|
||||||
|
void operator=(this_type&& rhs)
|
||||||
|
{
|
||||||
|
parent_type::operator=(std::move(rhs));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -52,7 +52,7 @@ namespace Foam
|
|||||||
InfoInFunction << "Found " << iter.key() << endl;
|
InfoInFunction << "Found " << iter.key() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
results.insert
|
results.set
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new IOobject(*(iter.object()))
|
new IOobject(*(iter.object()))
|
||||||
@ -123,9 +123,27 @@ namespace Foam
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::IOobjectList::IOobjectList(const label nIoObjects)
|
Foam::IOobjectList::IOobjectList()
|
||||||
:
|
:
|
||||||
HashPtrTable<IOobject>(nIoObjects)
|
HashPtrTable<IOobject>()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::IOobjectList::IOobjectList(const label nObjects)
|
||||||
|
:
|
||||||
|
HashPtrTable<IOobject>(nObjects) // Could also use 2*nObjects instead
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::IOobjectList::IOobjectList(const IOobjectList& list)
|
||||||
|
:
|
||||||
|
HashPtrTable<IOobject>(list)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::IOobjectList::IOobjectList(IOobjectList&& list)
|
||||||
|
:
|
||||||
|
HashPtrTable<IOobject>(std::move(list))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -142,7 +160,7 @@ Foam::IOobjectList::IOobjectList
|
|||||||
HashPtrTable<IOobject>()
|
HashPtrTable<IOobject>()
|
||||||
{
|
{
|
||||||
word newInstance;
|
word newInstance;
|
||||||
fileNameList ObjectNames = fileHandler().readObjects
|
fileNameList objNames = fileHandler().readObjects
|
||||||
(
|
(
|
||||||
db,
|
db,
|
||||||
instance,
|
instance,
|
||||||
@ -150,9 +168,9 @@ Foam::IOobjectList::IOobjectList
|
|||||||
newInstance
|
newInstance
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const auto& objName : ObjectNames)
|
for (const auto& objName : objNames)
|
||||||
{
|
{
|
||||||
IOobject* objectPtr = new IOobject
|
auto objectPtr = autoPtr<IOobject>::New
|
||||||
(
|
(
|
||||||
objName,
|
objName,
|
||||||
newInstance,
|
newInstance,
|
||||||
@ -183,35 +201,35 @@ Foam::IOobjectList::IOobjectList
|
|||||||
{
|
{
|
||||||
insert(objectPtr->name(), objectPtr);
|
insert(objectPtr->name(), objectPtr);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
delete objectPtr;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::IOobjectList::IOobjectList(const IOobjectList& iolist)
|
|
||||||
:
|
|
||||||
HashPtrTable<IOobject>(iolist)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::IOobjectList::~IOobjectList()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::IOobjectList::add(IOobject& io)
|
bool Foam::IOobjectList::add(autoPtr<IOobject>& objectPtr)
|
||||||
{
|
{
|
||||||
return insert(io.name(), &io);
|
if (objectPtr.valid())
|
||||||
|
{
|
||||||
|
return insert(objectPtr->name(), objectPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::IOobjectList::remove(IOobject& io)
|
bool Foam::IOobjectList::add(autoPtr<IOobject>&& objectPtr)
|
||||||
|
{
|
||||||
|
if (objectPtr.valid())
|
||||||
|
{
|
||||||
|
return insert(objectPtr->name(), objectPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::IOobjectList::remove(const IOobject& io)
|
||||||
{
|
{
|
||||||
return erase(io.name());
|
return erase(io.name());
|
||||||
}
|
}
|
||||||
@ -219,7 +237,7 @@ bool Foam::IOobjectList::remove(IOobject& io)
|
|||||||
|
|
||||||
Foam::IOobject* Foam::IOobjectList::lookup(const word& name) const
|
Foam::IOobject* Foam::IOobjectList::lookup(const word& name) const
|
||||||
{
|
{
|
||||||
const_iterator iter = find(name);
|
const_iterator iter = cfind(name);
|
||||||
|
|
||||||
if (iter.found())
|
if (iter.found())
|
||||||
{
|
{
|
||||||
@ -267,7 +285,7 @@ Foam::IOobjectList Foam::IOobjectList::lookupClass(const word& clsName) const
|
|||||||
InfoInFunction << "Found " << iter.key() << endl;
|
InfoInFunction << "Found " << iter.key() << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
results.insert
|
results.set
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new IOobject(*(iter.object()))
|
new IOobject(*(iter.object()))
|
||||||
@ -369,6 +387,14 @@ Foam::wordList Foam::IOobjectList::sortedNames
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::IOobjectList::operator=(IOobjectList&& list)
|
||||||
|
{
|
||||||
|
transfer(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::Ostream& Foam::operator<<(Ostream& os, const IOobjectList& list)
|
Foam::Ostream& Foam::operator<<(Ostream& os, const IOobjectList& list)
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2016-2017 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2016-2018 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -45,7 +45,7 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of friend functions and operators
|
// Forward declarations
|
||||||
class IOobjectList;
|
class IOobjectList;
|
||||||
Ostream& operator<<(Ostream& os, const IOobjectList& list);
|
Ostream& operator<<(Ostream& os, const IOobjectList& list);
|
||||||
|
|
||||||
@ -58,18 +58,21 @@ class IOobjectList
|
|||||||
:
|
:
|
||||||
public HashPtrTable<IOobject>
|
public HashPtrTable<IOobject>
|
||||||
{
|
{
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- No copy assignment
|
|
||||||
void operator=(const IOobjectList&) = delete;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct given an initial estimate for the number of entries
|
//- Construct null with default (128) table capacity
|
||||||
explicit IOobjectList(const label nIoObjects = 128);
|
IOobjectList();
|
||||||
|
|
||||||
|
//- Construct given initial table capacity
|
||||||
|
explicit IOobjectList(const label nObjects);
|
||||||
|
|
||||||
|
//- Copy construct
|
||||||
|
IOobjectList(const IOobjectList& list);
|
||||||
|
|
||||||
|
//- Move construct
|
||||||
|
IOobjectList(IOobjectList&& list);
|
||||||
|
|
||||||
//- Construct from objectRegistry and instance path
|
//- Construct from objectRegistry and instance path
|
||||||
IOobjectList
|
IOobjectList
|
||||||
@ -82,12 +85,9 @@ public:
|
|||||||
bool registerObject = true
|
bool registerObject = true
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct as copy
|
|
||||||
IOobjectList(const IOobjectList& iolist);
|
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
~IOobjectList();
|
~IOobjectList() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
@ -95,10 +95,16 @@ public:
|
|||||||
// Basic methods
|
// Basic methods
|
||||||
|
|
||||||
//- Add an IOobject to the list
|
//- Add an IOobject to the list
|
||||||
bool add(IOobject& io);
|
bool add(autoPtr<IOobject>& objectPtr);
|
||||||
|
|
||||||
|
//- Add an IOobject to the list
|
||||||
|
bool add(autoPtr<IOobject>&& objectPtr);
|
||||||
|
|
||||||
|
//- Remove an IOobject from the list, by iterator
|
||||||
|
using HashPtrTable<IOobject>::remove;
|
||||||
|
|
||||||
//- Remove an IOobject from the list
|
//- Remove an IOobject from the list
|
||||||
bool remove(IOobject& io);
|
bool remove(const IOobject& io);
|
||||||
|
|
||||||
|
|
||||||
// Lookup
|
// Lookup
|
||||||
@ -230,6 +236,15 @@ public:
|
|||||||
wordList sortedNames(const word& clsName, const wordRes& matcher) const;
|
wordList sortedNames(const word& clsName, const wordRes& matcher) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Member Operators
|
||||||
|
|
||||||
|
//- No copy assignment
|
||||||
|
void operator=(const IOobjectList&) = delete;
|
||||||
|
|
||||||
|
//- Move assignment
|
||||||
|
void operator=(IOobjectList&& list);
|
||||||
|
|
||||||
|
|
||||||
// Ostream Operator
|
// Ostream Operator
|
||||||
|
|
||||||
friend Ostream& operator<<(Ostream& os, const IOobjectList& list);
|
friend Ostream& operator<<(Ostream& os, const IOobjectList& list);
|
||||||
|
|||||||
@ -63,7 +63,7 @@ inline Foam::SubDimensionedField<Type, GeoMesh>::SubDimensionedField
|
|||||||
const SubDimensionedField<Type, GeoMesh>& sfield
|
const SubDimensionedField<Type, GeoMesh>& sfield
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
tmp<SubDimensionedField<Type, GeoMesh>>::refCount(),
|
refCount(),
|
||||||
SubField<Type>(sfield)
|
SubField<Type>(sfield)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
@ -21,9 +21,6 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Description
|
|
||||||
Generic fieldField type.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "FieldField.H"
|
#include "FieldField.H"
|
||||||
@ -137,7 +134,7 @@ FieldField<Field, Type>::FieldField
|
|||||||
template<template<class> class Field, class Type>
|
template<template<class> class Field, class Type>
|
||||||
FieldField<Field, Type>::FieldField(const FieldField<Field, Type>& f)
|
FieldField<Field, Type>::FieldField(const FieldField<Field, Type>& f)
|
||||||
:
|
:
|
||||||
tmp<FieldField<Field, Type>>::refCount(),
|
refCount(),
|
||||||
PtrList<Field<Type>>(f)
|
PtrList<Field<Type>>(f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ Ostream& operator<<
|
|||||||
template<template<class> class Field, class Type>
|
template<template<class> class Field, class Type>
|
||||||
class FieldField
|
class FieldField
|
||||||
:
|
:
|
||||||
public tmp<FieldField<Field, Type>>::refCount,
|
public refCount,
|
||||||
public PtrList<Field<Type>>
|
public PtrList<Field<Type>>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -29,12 +29,6 @@ License
|
|||||||
#include "contiguous.H"
|
#include "contiguous.H"
|
||||||
#include "mapDistributeBase.H"
|
#include "mapDistributeBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Static Members * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
const char* const Foam::Field<Type>::typeName("Field");
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
|
|||||||
@ -47,6 +47,7 @@ SourceFiles
|
|||||||
#include "VectorSpace.H"
|
#include "VectorSpace.H"
|
||||||
#include "scalarList.H"
|
#include "scalarList.H"
|
||||||
#include "labelList.H"
|
#include "labelList.H"
|
||||||
|
#include "FieldBase.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ Ostream& operator<<(Ostream&, const tmp<Field<Type>>&);
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class Field
|
class Field
|
||||||
:
|
:
|
||||||
public tmp<Field<Type>>::refCount,
|
public FieldBase,
|
||||||
public List<Type>
|
public List<Type>
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -86,11 +87,6 @@ public:
|
|||||||
typedef SubField<Type> subField;
|
typedef SubField<Type> subField;
|
||||||
|
|
||||||
|
|
||||||
// Static data members
|
|
||||||
|
|
||||||
static const char* const typeName;
|
|
||||||
|
|
||||||
|
|
||||||
// Static Member Functions
|
// Static Member Functions
|
||||||
|
|
||||||
//- Return nullObject reference field
|
//- Return nullObject reference field
|
||||||
|
|||||||
33
src/OpenFOAM/fields/Fields/Field/FieldBase.C
Normal file
33
src/OpenFOAM/fields/Fields/Field/FieldBase.C
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "FieldBase.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Static Members * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const char* const Foam::FieldBase::typeName("Field");
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
77
src/OpenFOAM/fields/Fields/Field/FieldBase.H
Normal file
77
src/OpenFOAM/fields/Fields/Field/FieldBase.H
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd.
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::FieldBase
|
||||||
|
|
||||||
|
Description
|
||||||
|
Template invariant parts for Field
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
FieldBase.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef FieldBase_H
|
||||||
|
#define FieldBase_H
|
||||||
|
|
||||||
|
#include "refCount.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class FieldBase Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class FieldBase
|
||||||
|
:
|
||||||
|
public refCount
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Static data members
|
||||||
|
|
||||||
|
//- Typename for Field
|
||||||
|
static const char* const typeName;
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct null, with refCount zero
|
||||||
|
constexpr FieldBase() noexcept
|
||||||
|
:
|
||||||
|
refCount()
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -59,7 +59,7 @@ template<class Type> class SubField;
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class SubField
|
class SubField
|
||||||
:
|
:
|
||||||
public tmp<SubField<Type>>::refCount,
|
public refCount,
|
||||||
public SubList<Type>
|
public SubList<Type>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -74,7 +74,7 @@ inline Foam::SubField<Type>::SubField
|
|||||||
const SubField<Type>& sfield
|
const SubField<Type>& sfield
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
tmp<SubField<Type>>::refCount(),
|
refCount(),
|
||||||
SubList<Type>(sfield)
|
SubList<Type>(sfield)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
@ -2319,7 +2319,7 @@ Foam::instantList Foam::fileOperations::masterUncollatedFileOperation::findTimes
|
|||||||
|
|
||||||
instantList* tPtr = new instantList(std::move(times));
|
instantList* tPtr = new instantList(std::move(times));
|
||||||
|
|
||||||
times_.insert(directory, tPtr);
|
times_.set(directory, tPtr);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -66,7 +66,7 @@ void Foam::graph::readCurves(Istream& is)
|
|||||||
y[i] = xyData[i].y_;
|
y[i] = xyData[i].y_;
|
||||||
}
|
}
|
||||||
|
|
||||||
insert
|
set
|
||||||
(
|
(
|
||||||
wordify(yName_),
|
wordify(yName_),
|
||||||
new curve(wordify(yName_), curve::curveStyle::CONTINUOUS, y)
|
new curve(wordify(yName_), curve::curveStyle::CONTINUOUS, y)
|
||||||
@ -105,7 +105,11 @@ Foam::graph::graph
|
|||||||
yName_(yName),
|
yName_(yName),
|
||||||
x_(x)
|
x_(x)
|
||||||
{
|
{
|
||||||
insert(wordify(yName), new curve(yName, curve::curveStyle::CONTINUOUS, y));
|
set
|
||||||
|
(
|
||||||
|
wordify(yName),
|
||||||
|
new curve(yName, curve::curveStyle::CONTINUOUS, y)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -38,18 +38,11 @@ Foam::Function1<Type>::Function1(const word& entryName)
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::Function1<Type>::Function1(const Function1<Type>& de)
|
Foam::Function1<Type>::Function1(const Function1<Type>& de)
|
||||||
:
|
:
|
||||||
tmp<Function1<Type>>::refCount(),
|
refCount(),
|
||||||
name_(de.name_)
|
name_(de.name_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
Foam::Function1<Type>::~Function1()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
@ -111,8 +104,8 @@ Foam::FieldFunction1<Function1Type>::value
|
|||||||
const scalarField& x
|
const scalarField& x
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
tmp<Field<Type>> tfld(new Field<Type>(x.size()));
|
auto tfld = tmp<Field<Type>>::New(x.size());
|
||||||
Field<Type>& fld = tfld.ref();
|
auto& fld = tfld.ref();
|
||||||
|
|
||||||
forAll(x, i)
|
forAll(x, i)
|
||||||
{
|
{
|
||||||
@ -152,8 +145,8 @@ Foam::FieldFunction1<Function1Type>::integrate
|
|||||||
const scalarField& x2
|
const scalarField& x2
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
tmp<Field<Type>> tfld(new Field<Type>(x1.size()));
|
auto tfld = tmp<Field<Type>>::New(x1.size());
|
||||||
Field<Type>& fld = tfld.ref();
|
auto& fld = tfld.ref();
|
||||||
|
|
||||||
forAll(x1, i)
|
forAll(x1, i)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -61,11 +61,11 @@ template<class Type> Ostream& operator<<(Ostream&, const Function1<Type>&);
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class Function1
|
class Function1
|
||||||
:
|
:
|
||||||
public tmp<Function1<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const Function1<Type>&) = delete;
|
void operator=(const Function1<Type>&) = delete;
|
||||||
|
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~Function1();
|
virtual ~Function1() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
@ -194,8 +194,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~FieldFunction1()
|
virtual ~FieldFunction1() = default;
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -38,7 +38,6 @@ $(nutWallFunctions)/nutWallFunction/nutWallFunctionFvPatchScalarField.C
|
|||||||
|
|
||||||
$(nutWallFunctions)/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C
|
||||||
$(nutWallFunctions)/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C
|
||||||
$(nutWallFunctions)/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C
|
|
||||||
|
|
||||||
$(nutWallFunctions)/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C
|
||||||
$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C
|
||||||
@ -70,11 +69,5 @@ RASBCs = RAS/derivedFvPatchFields
|
|||||||
$(RASBCs)/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C
|
$(RASBCs)/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C
|
||||||
$(RASBCs)/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C
|
$(RASBCs)/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C
|
||||||
|
|
||||||
/* Atmospheric boundary layer BCs */
|
|
||||||
$(RASBCs)/atmBoundaryLayer/atmBoundaryLayer.C
|
|
||||||
$(RASBCs)/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
|
||||||
$(RASBCs)/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C
|
|
||||||
$(RASBCs)/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
|
||||||
|
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libturbulenceModels
|
LIB = $(FOAM_LIBBIN)/libturbulenceModels
|
||||||
|
|||||||
10
src/atmosphericModels/Make/files
Normal file
10
src/atmosphericModels/Make/files
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C
|
||||||
|
derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C
|
||||||
|
derivedFvPatchFields/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C
|
||||||
|
|
||||||
|
atmosphericTurbulentTransportModels.C
|
||||||
|
porosityModels/powerLawLopesdaCosta/powerLawLopesdaCosta.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libatmosphericModels
|
||||||
18
src/atmosphericModels/Make/options
Normal file
18
src/atmosphericModels/Make/options
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
|
||||||
|
-I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
|
||||||
|
-I$(LIB_SRC)/transportModels \
|
||||||
|
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
|
-I$(LIB_SRC)/fvOptions/lnInclude
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lturbulenceModels \
|
||||||
|
-lincompressibleTurbulenceModels \
|
||||||
|
-lincompressibleTransportModels \
|
||||||
|
-lfiniteVolume \
|
||||||
|
-lmeshTools \
|
||||||
|
-lsurfMesh \
|
||||||
|
-lfvOptions
|
||||||
35
src/atmosphericModels/atmosphericTurbulentTransportModels.C
Normal file
35
src/atmosphericModels/atmosphericTurbulentTransportModels.C
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "turbulentTransportModels.H"
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------- //
|
||||||
|
// RAS models
|
||||||
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
#include "kEpsilonLopesdaCosta.H"
|
||||||
|
makeRASModel(kEpsilonLopesdaCosta);
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2014-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -168,8 +168,7 @@ public:
|
|||||||
//- Construct from the coordinates field and dictionary
|
//- Construct from the coordinates field and dictionary
|
||||||
atmBoundaryLayer(const vectorField& p, const dictionary&);
|
atmBoundaryLayer(const vectorField& p, const dictionary&);
|
||||||
|
|
||||||
//- Construct by mapping given
|
//- Construct by mapping given atmBoundaryLayer onto a new patch
|
||||||
// atmBoundaryLayer onto a new patch
|
|
||||||
atmBoundaryLayer
|
atmBoundaryLayer
|
||||||
(
|
(
|
||||||
const atmBoundaryLayer&,
|
const atmBoundaryLayer&,
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF),
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
atmBoundaryLayer()
|
atmBoundaryLayer()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -56,10 +56,23 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF, dict, false),
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
atmBoundaryLayer(patch().Cf(), dict)
|
atmBoundaryLayer(patch().Cf(), dict)
|
||||||
{
|
{
|
||||||
scalarField::operator=(epsilon(patch().Cf()));
|
phiName_ = dict.lookupOrDefault<word>("phi", "phi");
|
||||||
|
|
||||||
|
refValue() = epsilon(patch().Cf());
|
||||||
|
refGrad() = 0;
|
||||||
|
valueFraction() = 1;
|
||||||
|
|
||||||
|
if (dict.found("value"))
|
||||||
|
{
|
||||||
|
scalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scalarField::operator=(refValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +85,7 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(psf, p, iF, mapper),
|
inletOutletFvPatchScalarField(psf, p, iF, mapper),
|
||||||
atmBoundaryLayer(psf, mapper)
|
atmBoundaryLayer(psf, mapper)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -84,7 +97,7 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(psf, iF),
|
inletOutletFvPatchScalarField(psf, iF),
|
||||||
atmBoundaryLayer(psf)
|
atmBoundaryLayer(psf)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -96,7 +109,7 @@ void atmBoundaryLayerInletEpsilonFvPatchScalarField::autoMap
|
|||||||
const fvPatchFieldMapper& m
|
const fvPatchFieldMapper& m
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::autoMap(m);
|
inletOutletFvPatchScalarField::autoMap(m);
|
||||||
atmBoundaryLayer::autoMap(m);
|
atmBoundaryLayer::autoMap(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +120,7 @@ void atmBoundaryLayerInletEpsilonFvPatchScalarField::rmap
|
|||||||
const labelList& addr
|
const labelList& addr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::rmap(psf, addr);
|
inletOutletFvPatchScalarField::rmap(psf, addr);
|
||||||
|
|
||||||
const atmBoundaryLayerInletEpsilonFvPatchScalarField& blpsf =
|
const atmBoundaryLayerInletEpsilonFvPatchScalarField& blpsf =
|
||||||
refCast<const atmBoundaryLayerInletEpsilonFvPatchScalarField>(psf);
|
refCast<const atmBoundaryLayerInletEpsilonFvPatchScalarField>(psf);
|
||||||
@ -120,6 +133,7 @@ void atmBoundaryLayerInletEpsilonFvPatchScalarField::write(Ostream& os) const
|
|||||||
{
|
{
|
||||||
fvPatchScalarField::write(os);
|
fvPatchScalarField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
atmBoundaryLayer::write(os);
|
||||||
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -60,7 +60,7 @@ SourceFiles
|
|||||||
#define atmBoundaryLayerInletEpsilonFvPatchScalarField_H
|
#define atmBoundaryLayerInletEpsilonFvPatchScalarField_H
|
||||||
|
|
||||||
#include "fvPatchFields.H"
|
#include "fvPatchFields.H"
|
||||||
#include "fixedValueFvPatchFields.H"
|
#include "inletOutletFvPatchFields.H"
|
||||||
#include "atmBoundaryLayer.H"
|
#include "atmBoundaryLayer.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -74,7 +74,7 @@ namespace Foam
|
|||||||
|
|
||||||
class atmBoundaryLayerInletEpsilonFvPatchScalarField
|
class atmBoundaryLayerInletEpsilonFvPatchScalarField
|
||||||
:
|
:
|
||||||
public fixedValueFvPatchScalarField,
|
public inletOutletFvPatchScalarField,
|
||||||
public atmBoundaryLayer
|
public atmBoundaryLayer
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ atmBoundaryLayerInletKFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF),
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
atmBoundaryLayer()
|
atmBoundaryLayer()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -56,10 +56,23 @@ atmBoundaryLayerInletKFvPatchScalarField
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(p, iF, dict, false),
|
inletOutletFvPatchScalarField(p, iF),
|
||||||
atmBoundaryLayer(patch().Cf(), dict)
|
atmBoundaryLayer(patch().Cf(), dict)
|
||||||
{
|
{
|
||||||
scalarField::operator=(k(patch().Cf()));
|
phiName_ = dict.lookupOrDefault<word>("phi", "phi");
|
||||||
|
|
||||||
|
refValue() = k(patch().Cf());
|
||||||
|
refGrad() = 0;
|
||||||
|
valueFraction() = 1;
|
||||||
|
|
||||||
|
if (dict.found("value"))
|
||||||
|
{
|
||||||
|
scalarField::operator=(scalarField("value", dict, p.size()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scalarField::operator=(refValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +85,7 @@ atmBoundaryLayerInletKFvPatchScalarField
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(psf, p, iF, mapper),
|
inletOutletFvPatchScalarField(psf, p, iF, mapper),
|
||||||
atmBoundaryLayer(psf, mapper)
|
atmBoundaryLayer(psf, mapper)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -84,7 +97,7 @@ atmBoundaryLayerInletKFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchScalarField(psf, iF),
|
inletOutletFvPatchScalarField(psf, iF),
|
||||||
atmBoundaryLayer(psf)
|
atmBoundaryLayer(psf)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -96,7 +109,7 @@ void atmBoundaryLayerInletKFvPatchScalarField::autoMap
|
|||||||
const fvPatchFieldMapper& m
|
const fvPatchFieldMapper& m
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::autoMap(m);
|
inletOutletFvPatchScalarField::autoMap(m);
|
||||||
atmBoundaryLayer::autoMap(m);
|
atmBoundaryLayer::autoMap(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +120,7 @@ void atmBoundaryLayerInletKFvPatchScalarField::rmap
|
|||||||
const labelList& addr
|
const labelList& addr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchScalarField::rmap(psf, addr);
|
inletOutletFvPatchScalarField::rmap(psf, addr);
|
||||||
|
|
||||||
const atmBoundaryLayerInletKFvPatchScalarField& blpsf =
|
const atmBoundaryLayerInletKFvPatchScalarField& blpsf =
|
||||||
refCast<const atmBoundaryLayerInletKFvPatchScalarField>(psf);
|
refCast<const atmBoundaryLayerInletKFvPatchScalarField>(psf);
|
||||||
@ -120,6 +133,7 @@ void atmBoundaryLayerInletKFvPatchScalarField::write(Ostream& os) const
|
|||||||
{
|
{
|
||||||
fvPatchScalarField::write(os);
|
fvPatchScalarField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
atmBoundaryLayer::write(os);
|
||||||
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2014-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -60,7 +60,7 @@ SourceFiles
|
|||||||
#define atmBoundaryLayerInletKFvPatchScalarField_H
|
#define atmBoundaryLayerInletKFvPatchScalarField_H
|
||||||
|
|
||||||
#include "fvPatchFields.H"
|
#include "fvPatchFields.H"
|
||||||
#include "fixedValueFvPatchFields.H"
|
#include "inletOutletFvPatchFields.H"
|
||||||
#include "atmBoundaryLayer.H"
|
#include "atmBoundaryLayer.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -74,7 +74,7 @@ namespace Foam
|
|||||||
|
|
||||||
class atmBoundaryLayerInletKFvPatchScalarField
|
class atmBoundaryLayerInletKFvPatchScalarField
|
||||||
:
|
:
|
||||||
public fixedValueFvPatchScalarField,
|
public inletOutletFvPatchScalarField,
|
||||||
public atmBoundaryLayer
|
public atmBoundaryLayer
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,7 +43,7 @@ atmBoundaryLayerInletVelocityFvPatchVectorField
|
|||||||
const DimensionedField<vector, volMesh>& iF
|
const DimensionedField<vector, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchVectorField(p, iF),
|
inletOutletFvPatchVectorField(p, iF),
|
||||||
atmBoundaryLayer()
|
atmBoundaryLayer()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -56,10 +56,23 @@ atmBoundaryLayerInletVelocityFvPatchVectorField
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchVectorField(p, iF, dict, false),
|
inletOutletFvPatchVectorField(p, iF),
|
||||||
atmBoundaryLayer(patch().Cf(), dict)
|
atmBoundaryLayer(patch().Cf(), dict)
|
||||||
{
|
{
|
||||||
vectorField::operator=(U(patch().Cf()));
|
phiName_ = dict.lookupOrDefault<word>("phi", "phi");
|
||||||
|
|
||||||
|
refValue() = U(patch().Cf());
|
||||||
|
refGrad() = Zero;
|
||||||
|
valueFraction() = 1;
|
||||||
|
|
||||||
|
if (dict.found("value"))
|
||||||
|
{
|
||||||
|
vectorField::operator=(vectorField("value", dict, p.size()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vectorField::operator=(refValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -72,7 +85,7 @@ atmBoundaryLayerInletVelocityFvPatchVectorField
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchVectorField(pvf, p, iF, mapper),
|
inletOutletFvPatchVectorField(pvf, p, iF, mapper),
|
||||||
atmBoundaryLayer(pvf, mapper)
|
atmBoundaryLayer(pvf, mapper)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -84,7 +97,7 @@ atmBoundaryLayerInletVelocityFvPatchVectorField
|
|||||||
const DimensionedField<vector, volMesh>& iF
|
const DimensionedField<vector, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedValueFvPatchVectorField(pvf, iF),
|
inletOutletFvPatchVectorField(pvf, iF),
|
||||||
atmBoundaryLayer(pvf)
|
atmBoundaryLayer(pvf)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -96,7 +109,7 @@ void atmBoundaryLayerInletVelocityFvPatchVectorField::autoMap
|
|||||||
const fvPatchFieldMapper& m
|
const fvPatchFieldMapper& m
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchVectorField::autoMap(m);
|
inletOutletFvPatchVectorField::autoMap(m);
|
||||||
atmBoundaryLayer::autoMap(m);
|
atmBoundaryLayer::autoMap(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +120,7 @@ void atmBoundaryLayerInletVelocityFvPatchVectorField::rmap
|
|||||||
const labelList& addr
|
const labelList& addr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
fixedValueFvPatchVectorField::rmap(pvf, addr);
|
inletOutletFvPatchVectorField::rmap(pvf, addr);
|
||||||
|
|
||||||
const atmBoundaryLayerInletVelocityFvPatchVectorField& blpvf =
|
const atmBoundaryLayerInletVelocityFvPatchVectorField& blpvf =
|
||||||
refCast<const atmBoundaryLayerInletVelocityFvPatchVectorField>(pvf);
|
refCast<const atmBoundaryLayerInletVelocityFvPatchVectorField>(pvf);
|
||||||
@ -120,6 +133,7 @@ void atmBoundaryLayerInletVelocityFvPatchVectorField::write(Ostream& os) const
|
|||||||
{
|
{
|
||||||
fvPatchVectorField::write(os);
|
fvPatchVectorField::write(os);
|
||||||
atmBoundaryLayer::write(os);
|
atmBoundaryLayer::write(os);
|
||||||
|
os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -61,7 +61,7 @@ SourceFiles
|
|||||||
#define atmBoundaryLayerInletVelocityFvPatchVectorField_H
|
#define atmBoundaryLayerInletVelocityFvPatchVectorField_H
|
||||||
|
|
||||||
#include "fvPatchFields.H"
|
#include "fvPatchFields.H"
|
||||||
#include "fixedValueFvPatchFields.H"
|
#include "inletOutletFvPatchFields.H"
|
||||||
#include "atmBoundaryLayer.H"
|
#include "atmBoundaryLayer.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -75,7 +75,7 @@ namespace Foam
|
|||||||
|
|
||||||
class atmBoundaryLayerInletVelocityFvPatchVectorField
|
class atmBoundaryLayerInletVelocityFvPatchVectorField
|
||||||
:
|
:
|
||||||
public fixedValueFvPatchVectorField,
|
public inletOutletFvPatchVectorField,
|
||||||
public atmBoundaryLayer
|
public atmBoundaryLayer
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -0,0 +1,477 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "kEpsilonLopesdaCosta.H"
|
||||||
|
#include "fvOptions.H"
|
||||||
|
#include "explicitPorositySource.H"
|
||||||
|
#include "bound.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace RASModels
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
void kEpsilonLopesdaCosta<BasicTurbulenceModel>::setPorosityCoefficient
|
||||||
|
(
|
||||||
|
volScalarField::Internal& C,
|
||||||
|
const porosityModels::powerLawLopesdaCosta& pm
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (pm.dict().found(C.name()))
|
||||||
|
{
|
||||||
|
const labelList& cellZoneIDs = pm.cellZoneIDs();
|
||||||
|
|
||||||
|
const scalar Cpm = readScalar(pm.dict().lookup(C.name()));
|
||||||
|
|
||||||
|
forAll(cellZoneIDs, zonei)
|
||||||
|
{
|
||||||
|
const labelList& cells =
|
||||||
|
this->mesh_.cellZones()[cellZoneIDs[zonei]];
|
||||||
|
|
||||||
|
forAll(cells, i)
|
||||||
|
{
|
||||||
|
const label celli = cells[i];
|
||||||
|
C[celli] = Cpm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
void kEpsilonLopesdaCosta<BasicTurbulenceModel>::setCdSigma
|
||||||
|
(
|
||||||
|
volScalarField::Internal& C,
|
||||||
|
const porosityModels::powerLawLopesdaCosta& pm
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (pm.dict().found(C.name()))
|
||||||
|
{
|
||||||
|
const labelList& cellZoneIDs = pm.cellZoneIDs();
|
||||||
|
const scalarField& Sigma = pm.Sigma();
|
||||||
|
|
||||||
|
const scalar Cpm = readScalar(pm.dict().lookup(C.name()));
|
||||||
|
|
||||||
|
forAll(cellZoneIDs, zonei)
|
||||||
|
{
|
||||||
|
const labelList& cells =
|
||||||
|
this->mesh_.cellZones()[cellZoneIDs[zonei]];
|
||||||
|
|
||||||
|
forAll(cells, i)
|
||||||
|
{
|
||||||
|
const label celli = cells[i];
|
||||||
|
C[celli] = Cpm*Sigma[celli];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
void kEpsilonLopesdaCosta<BasicTurbulenceModel>::setPorosityCoefficients()
|
||||||
|
{
|
||||||
|
fv::options::optionList& fvOptions(fv::options::New(this->mesh_));
|
||||||
|
|
||||||
|
forAll(fvOptions, i)
|
||||||
|
{
|
||||||
|
if (isA<fv::explicitPorositySource>(fvOptions[i]))
|
||||||
|
{
|
||||||
|
const fv::explicitPorositySource& eps =
|
||||||
|
refCast<const fv::explicitPorositySource>(fvOptions[i]);
|
||||||
|
|
||||||
|
if (isA<porosityModels::powerLawLopesdaCosta>(eps.model()))
|
||||||
|
{
|
||||||
|
const porosityModels::powerLawLopesdaCosta& pm =
|
||||||
|
refCast<const porosityModels::powerLawLopesdaCosta>
|
||||||
|
(
|
||||||
|
eps.model()
|
||||||
|
);
|
||||||
|
|
||||||
|
setPorosityCoefficient(Cmu_, pm);
|
||||||
|
setPorosityCoefficient(C1_, pm);
|
||||||
|
setPorosityCoefficient(C2_, pm);
|
||||||
|
setPorosityCoefficient(sigmak_, pm);
|
||||||
|
setPorosityCoefficient(sigmaEps_, pm);
|
||||||
|
|
||||||
|
setCdSigma(CdSigma_, pm);
|
||||||
|
setPorosityCoefficient(betap_, pm);
|
||||||
|
setPorosityCoefficient(betad_, pm);
|
||||||
|
setPorosityCoefficient(C4_, pm);
|
||||||
|
setPorosityCoefficient(C5_, pm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
void kEpsilonLopesdaCosta<BasicTurbulenceModel>::correctNut()
|
||||||
|
{
|
||||||
|
this->nut_ = Cmu_*sqr(k_)/epsilon_;
|
||||||
|
this->nut_.correctBoundaryConditions();
|
||||||
|
fv::options::New(this->mesh_).correct(this->nut_);
|
||||||
|
|
||||||
|
BasicTurbulenceModel::correctNut();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
tmp<fvScalarMatrix> kEpsilonLopesdaCosta<BasicTurbulenceModel>::kSource
|
||||||
|
(
|
||||||
|
const volScalarField::Internal& magU,
|
||||||
|
const volScalarField::Internal& magU3
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fvm::Su(CdSigma_*(betap_*magU3 - betad_*magU*k_()), k_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
tmp<fvScalarMatrix>
|
||||||
|
kEpsilonLopesdaCosta<BasicTurbulenceModel>::epsilonSource
|
||||||
|
(
|
||||||
|
const volScalarField::Internal& magU,
|
||||||
|
const volScalarField::Internal& magU3
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return fvm::Su
|
||||||
|
(
|
||||||
|
CdSigma_
|
||||||
|
*(C4_*betap_*epsilon_()/k_()*magU3 - C5_*betad_*magU*epsilon_()),
|
||||||
|
epsilon_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
kEpsilonLopesdaCosta<BasicTurbulenceModel>::kEpsilonLopesdaCosta
|
||||||
|
(
|
||||||
|
const alphaField& alpha,
|
||||||
|
const rhoField& rho,
|
||||||
|
const volVectorField& U,
|
||||||
|
const surfaceScalarField& alphaRhoPhi,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const transportModel& transport,
|
||||||
|
const word& propertiesName,
|
||||||
|
const word& type
|
||||||
|
)
|
||||||
|
:
|
||||||
|
eddyViscosity<RASModel<BasicTurbulenceModel>>
|
||||||
|
(
|
||||||
|
type,
|
||||||
|
alpha,
|
||||||
|
rho,
|
||||||
|
U,
|
||||||
|
alphaRhoPhi,
|
||||||
|
phi,
|
||||||
|
transport,
|
||||||
|
propertiesName
|
||||||
|
),
|
||||||
|
|
||||||
|
Cmu_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"Cmu",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
(
|
||||||
|
"Cmu",
|
||||||
|
this->coeffDict_,
|
||||||
|
0.09
|
||||||
|
)
|
||||||
|
),
|
||||||
|
C1_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"C1",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
(
|
||||||
|
"C1",
|
||||||
|
this->coeffDict_,
|
||||||
|
1.44
|
||||||
|
)
|
||||||
|
),
|
||||||
|
C2_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"C2",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
(
|
||||||
|
"C2",
|
||||||
|
this->coeffDict_,
|
||||||
|
1.92
|
||||||
|
)
|
||||||
|
),
|
||||||
|
sigmak_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"sigmak",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
(
|
||||||
|
"sigmak",
|
||||||
|
this->coeffDict_,
|
||||||
|
1.0
|
||||||
|
)
|
||||||
|
),
|
||||||
|
sigmaEps_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"sigmaEps",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensioned<scalar>::lookupOrAddToDict
|
||||||
|
(
|
||||||
|
"sigmaEps",
|
||||||
|
this->coeffDict_,
|
||||||
|
1.3
|
||||||
|
)
|
||||||
|
),
|
||||||
|
|
||||||
|
CdSigma_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"CdSigma",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensionedScalar("CdSigma", dimless/dimLength, 0)
|
||||||
|
),
|
||||||
|
betap_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"betap",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensionedScalar("betap", dimless, 0)
|
||||||
|
),
|
||||||
|
betad_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"betad",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensionedScalar("betad", dimless, 0)
|
||||||
|
),
|
||||||
|
C4_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"C4",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensionedScalar("C4", dimless, 0)
|
||||||
|
),
|
||||||
|
C5_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"C5",
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
this->mesh_,
|
||||||
|
dimensionedScalar("C5", dimless, 0)
|
||||||
|
),
|
||||||
|
|
||||||
|
k_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
IOobject::groupName("k", alphaRhoPhi.group()),
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
this->mesh_
|
||||||
|
),
|
||||||
|
epsilon_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
IOobject::groupName("epsilon", alphaRhoPhi.group()),
|
||||||
|
this->runTime_.timeName(),
|
||||||
|
this->mesh_,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
this->mesh_
|
||||||
|
)
|
||||||
|
{
|
||||||
|
bound(k_, this->kMin_);
|
||||||
|
bound(epsilon_, this->epsilonMin_);
|
||||||
|
|
||||||
|
if (type == typeName)
|
||||||
|
{
|
||||||
|
this->printCoeffs(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
setPorosityCoefficients();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
bool kEpsilonLopesdaCosta<BasicTurbulenceModel>::read()
|
||||||
|
{
|
||||||
|
if (eddyViscosity<RASModel<BasicTurbulenceModel>>::read())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
void kEpsilonLopesdaCosta<BasicTurbulenceModel>::correct()
|
||||||
|
{
|
||||||
|
if (!this->turbulence_)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Local references
|
||||||
|
const alphaField& alpha = this->alpha_;
|
||||||
|
const rhoField& rho = this->rho_;
|
||||||
|
const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_;
|
||||||
|
const volVectorField& U = this->U_;
|
||||||
|
volScalarField& nut = this->nut_;
|
||||||
|
fv::options& fvOptions(fv::options::New(this->mesh_));
|
||||||
|
|
||||||
|
eddyViscosity<RASModel<BasicTurbulenceModel>>::correct();
|
||||||
|
|
||||||
|
volScalarField::Internal divU
|
||||||
|
(
|
||||||
|
fvc::div(fvc::absolute(this->phi(), U))().v()
|
||||||
|
);
|
||||||
|
|
||||||
|
tmp<volTensorField> tgradU = fvc::grad(U);
|
||||||
|
volScalarField::Internal G
|
||||||
|
(
|
||||||
|
this->GName(),
|
||||||
|
nut.v()*(dev(twoSymm(tgradU().v())) && tgradU().v())
|
||||||
|
);
|
||||||
|
tgradU.clear();
|
||||||
|
|
||||||
|
// Update epsilon and G at the wall
|
||||||
|
epsilon_.boundaryFieldRef().updateCoeffs();
|
||||||
|
|
||||||
|
volScalarField::Internal magU(mag(U));
|
||||||
|
volScalarField::Internal magU3(pow3(magU));
|
||||||
|
|
||||||
|
// Dissipation equation
|
||||||
|
tmp<fvScalarMatrix> epsEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(alpha, rho, epsilon_)
|
||||||
|
+ fvm::div(alphaRhoPhi, epsilon_)
|
||||||
|
- fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_)
|
||||||
|
==
|
||||||
|
C1_*alpha()*rho()*G*epsilon_()/k_()
|
||||||
|
- fvm::SuSp(((2.0/3.0)*C1_)*alpha()*rho()*divU, epsilon_)
|
||||||
|
- fvm::Sp(C2_*alpha()*rho()*epsilon_()/k_(), epsilon_)
|
||||||
|
+ epsilonSource(magU, magU3)
|
||||||
|
+ fvOptions(alpha, rho, epsilon_)
|
||||||
|
);
|
||||||
|
|
||||||
|
epsEqn.ref().relax();
|
||||||
|
fvOptions.constrain(epsEqn.ref());
|
||||||
|
epsEqn.ref().boundaryManipulate(epsilon_.boundaryFieldRef());
|
||||||
|
solve(epsEqn);
|
||||||
|
fvOptions.correct(epsilon_);
|
||||||
|
bound(epsilon_, this->epsilonMin_);
|
||||||
|
|
||||||
|
// Turbulent kinetic energy equation
|
||||||
|
tmp<fvScalarMatrix> kEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(alpha, rho, k_)
|
||||||
|
+ fvm::div(alphaRhoPhi, k_)
|
||||||
|
- fvm::laplacian(alpha*rho*DkEff(), k_)
|
||||||
|
==
|
||||||
|
alpha()*rho()*G
|
||||||
|
- fvm::SuSp((2.0/3.0)*alpha()*rho()*divU, k_)
|
||||||
|
- fvm::Sp(alpha()*rho()*epsilon_()/k_(), k_)
|
||||||
|
+ kSource(magU, magU3)
|
||||||
|
+ fvOptions(alpha, rho, k_)
|
||||||
|
);
|
||||||
|
|
||||||
|
kEqn.ref().relax();
|
||||||
|
fvOptions.constrain(kEqn.ref());
|
||||||
|
solve(kEqn);
|
||||||
|
fvOptions.correct(k_);
|
||||||
|
bound(k_, this->kMin_);
|
||||||
|
|
||||||
|
correctNut();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace RASModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,245 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::RASModels::kEpsilonLopesdaCosta
|
||||||
|
|
||||||
|
Group
|
||||||
|
grpRASTurbulence
|
||||||
|
|
||||||
|
Description
|
||||||
|
Variant of the standard k-epsilon turbulence model with additional source
|
||||||
|
terms to handle the changes in turbulence in porous regions represented by
|
||||||
|
the powerLawLopesdaCosta porosity model.
|
||||||
|
|
||||||
|
Reference:
|
||||||
|
\verbatim
|
||||||
|
Costa, J. C. P. L. D. (2007).
|
||||||
|
Atmospheric flow over forested and non-forested complex terrain.
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
The default model coefficients are
|
||||||
|
\verbatim
|
||||||
|
kEpsilonLopesdaCostaCoeffs
|
||||||
|
{
|
||||||
|
Cmu 0.09;
|
||||||
|
C1 1.44;
|
||||||
|
C2 1.92;
|
||||||
|
sigmak 1.0;
|
||||||
|
sigmaEps 1.3;
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
See also
|
||||||
|
Foam::RASModels::kEpsilon
|
||||||
|
Foam::porosityModels::powerLawLopesdaCosta
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
kEpsilonLopesdaCosta.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef kEpsilonLopesdaCosta_H
|
||||||
|
#define kEpsilonLopesdaCosta_H
|
||||||
|
|
||||||
|
#include "RASModel.H"
|
||||||
|
#include "eddyViscosity.H"
|
||||||
|
#include "powerLawLopesdaCosta.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace RASModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class kEpsilonLopesdaCosta Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
template<class BasicTurbulenceModel>
|
||||||
|
class kEpsilonLopesdaCosta
|
||||||
|
:
|
||||||
|
public eddyViscosity<RASModel<BasicTurbulenceModel>>
|
||||||
|
{
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
// Disallow default bitwise copy construct and assignment
|
||||||
|
kEpsilonLopesdaCosta(const kEpsilonLopesdaCosta&);
|
||||||
|
void operator=(const kEpsilonLopesdaCosta&);
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
// Standard model coefficients
|
||||||
|
|
||||||
|
volScalarField Cmu_;
|
||||||
|
volScalarField::Internal C1_;
|
||||||
|
volScalarField::Internal C2_;
|
||||||
|
volScalarField sigmak_;
|
||||||
|
volScalarField sigmaEps_;
|
||||||
|
|
||||||
|
// Lopes da Costa porosity coefficients
|
||||||
|
|
||||||
|
volScalarField::Internal CdSigma_;
|
||||||
|
volScalarField::Internal betap_;
|
||||||
|
volScalarField::Internal betad_;
|
||||||
|
volScalarField::Internal C4_;
|
||||||
|
volScalarField::Internal C5_;
|
||||||
|
|
||||||
|
|
||||||
|
// Fields
|
||||||
|
|
||||||
|
volScalarField k_;
|
||||||
|
volScalarField epsilon_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected Member Functions
|
||||||
|
|
||||||
|
void setPorosityCoefficient
|
||||||
|
(
|
||||||
|
volScalarField::Internal& C,
|
||||||
|
const porosityModels::powerLawLopesdaCosta& pm
|
||||||
|
);
|
||||||
|
|
||||||
|
void setCdSigma
|
||||||
|
(
|
||||||
|
volScalarField::Internal& C,
|
||||||
|
const porosityModels::powerLawLopesdaCosta& pm
|
||||||
|
);
|
||||||
|
|
||||||
|
void setPorosityCoefficients();
|
||||||
|
|
||||||
|
virtual void correctNut();
|
||||||
|
|
||||||
|
virtual tmp<fvScalarMatrix> kSource
|
||||||
|
(
|
||||||
|
const volScalarField::Internal& magU,
|
||||||
|
const volScalarField::Internal& magU3
|
||||||
|
) const;
|
||||||
|
|
||||||
|
virtual tmp<fvScalarMatrix> epsilonSource
|
||||||
|
(
|
||||||
|
const volScalarField::Internal& magU,
|
||||||
|
const volScalarField::Internal& magU3
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef typename BasicTurbulenceModel::alphaField alphaField;
|
||||||
|
typedef typename BasicTurbulenceModel::rhoField rhoField;
|
||||||
|
typedef typename BasicTurbulenceModel::transportModel transportModel;
|
||||||
|
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("kEpsilonLopesdaCosta");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from components
|
||||||
|
kEpsilonLopesdaCosta
|
||||||
|
(
|
||||||
|
const alphaField& alpha,
|
||||||
|
const rhoField& rho,
|
||||||
|
const volVectorField& U,
|
||||||
|
const surfaceScalarField& alphaRhoPhi,
|
||||||
|
const surfaceScalarField& phi,
|
||||||
|
const transportModel& transport,
|
||||||
|
const word& propertiesName = turbulenceModel::propertiesName,
|
||||||
|
const word& type = typeName
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~kEpsilonLopesdaCosta()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Re-read model coefficients if they have changed
|
||||||
|
virtual bool read();
|
||||||
|
|
||||||
|
//- Return the effective diffusivity for k
|
||||||
|
tmp<volScalarField> DkEff() const
|
||||||
|
{
|
||||||
|
return tmp<volScalarField>
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
"DkEff",
|
||||||
|
(this->nut_/sigmak_ + this->nu())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the effective diffusivity for epsilon
|
||||||
|
tmp<volScalarField> DepsilonEff() const
|
||||||
|
{
|
||||||
|
return tmp<volScalarField>
|
||||||
|
(
|
||||||
|
new volScalarField
|
||||||
|
(
|
||||||
|
"DepsilonEff",
|
||||||
|
(this->nut_/sigmaEps_ + this->nu())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the turbulence kinetic energy
|
||||||
|
virtual tmp<volScalarField> k() const
|
||||||
|
{
|
||||||
|
return k_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the turbulence kinetic energy dissipation rate
|
||||||
|
virtual tmp<volScalarField> epsilon() const
|
||||||
|
{
|
||||||
|
return epsilon_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Solve the turbulence equations and correct the turbulence viscosity
|
||||||
|
virtual void correct();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace RASModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
#include "kEpsilonLopesdaCosta.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,419 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "powerLawLopesdaCosta.H"
|
||||||
|
#include "geometricOneField.H"
|
||||||
|
#include "fvMatrices.H"
|
||||||
|
#include "triSurfaceMesh.H"
|
||||||
|
#include "triSurfaceTools.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace porosityModels
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(powerLawLopesdaCosta, 0);
|
||||||
|
addToRunTimeSelectionTable(porosityModel, powerLawLopesdaCosta, mesh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::porosityModels::powerLawLopesdaCostaZone::powerLawLopesdaCostaZone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const word& modelType,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
zoneName_(name + ":porousZone")
|
||||||
|
{
|
||||||
|
dictionary coeffs(dict.optionalSubDict(modelType + "Coeffs"));
|
||||||
|
|
||||||
|
// Vertical direction within porous region
|
||||||
|
vector zDir(coeffs.lookup("zDir"));
|
||||||
|
|
||||||
|
// Span of the search for the cells in the porous region
|
||||||
|
scalar searchSpan(readScalar(coeffs.lookup("searchSpan")));
|
||||||
|
|
||||||
|
// Top surface file name defining the extent of the porous region
|
||||||
|
word topSurfaceFileName(coeffs.lookup("topSurface"));
|
||||||
|
|
||||||
|
// List of the ground patches defining the lower surface
|
||||||
|
// of the porous region
|
||||||
|
List<wordRe> groundPatches(coeffs.lookup("groundPatches"));
|
||||||
|
|
||||||
|
// Functional form of the porosity surface area per unit volume as a
|
||||||
|
// function of the normalized vertical position
|
||||||
|
autoPtr<Function1<scalar >> SigmaFunc
|
||||||
|
(
|
||||||
|
Function1<scalar>::New("Sigma", dict)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Searchable triSurface for the top of the porous region
|
||||||
|
triSurfaceMesh searchSurf
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
topSurfaceFileName,
|
||||||
|
mesh.time().constant(),
|
||||||
|
"triSurface",
|
||||||
|
mesh.time()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Limit the porous cell search to those within the lateral and vertical
|
||||||
|
// extent of the top surface
|
||||||
|
|
||||||
|
boundBox surfBounds(searchSurf.points());
|
||||||
|
boundBox searchBounds
|
||||||
|
(
|
||||||
|
surfBounds.min() - searchSpan*zDir, surfBounds.max()
|
||||||
|
);
|
||||||
|
|
||||||
|
const pointField& C = mesh.cellCentres();
|
||||||
|
|
||||||
|
// List of cells within the porous region
|
||||||
|
labelList porousCells(C.size());
|
||||||
|
label porousCelli = 0;
|
||||||
|
|
||||||
|
forAll(C, celli)
|
||||||
|
{
|
||||||
|
if (searchBounds.contains(C[celli]))
|
||||||
|
{
|
||||||
|
porousCells[porousCelli++] = celli;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
porousCells.setSize(porousCelli);
|
||||||
|
|
||||||
|
pointField start(porousCelli);
|
||||||
|
pointField end(porousCelli);
|
||||||
|
|
||||||
|
forAll(porousCells, porousCelli)
|
||||||
|
{
|
||||||
|
start[porousCelli] = C[porousCells[porousCelli]];
|
||||||
|
end[porousCelli] = start[porousCelli] + searchSpan*zDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Field of distance between the cell centre and the corresponding point
|
||||||
|
// on the porous region top surface
|
||||||
|
scalarField zTop(porousCelli);
|
||||||
|
|
||||||
|
// Search the porous cells for those with a corresponding point on the
|
||||||
|
// porous region top surface
|
||||||
|
List<pointIndexHit> hitInfo;
|
||||||
|
searchSurf.findLine(start, end, hitInfo);
|
||||||
|
|
||||||
|
porousCelli = 0;
|
||||||
|
|
||||||
|
forAll(porousCells, celli)
|
||||||
|
{
|
||||||
|
const pointIndexHit& hit = hitInfo[celli];
|
||||||
|
|
||||||
|
if (hit.hit())
|
||||||
|
{
|
||||||
|
porousCells[porousCelli] = porousCells[celli];
|
||||||
|
|
||||||
|
zTop[porousCelli] =
|
||||||
|
(hit.hitPoint() - C[porousCells[porousCelli]]) & zDir;
|
||||||
|
|
||||||
|
porousCelli++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resize the porous cells list and height field
|
||||||
|
porousCells.setSize(porousCelli);
|
||||||
|
zTop.setSize(porousCelli);
|
||||||
|
|
||||||
|
// Create a triSurface for the ground patch(s)
|
||||||
|
triSurface groundSurface
|
||||||
|
(
|
||||||
|
triSurfaceTools::triangulate
|
||||||
|
(
|
||||||
|
mesh.boundaryMesh(),
|
||||||
|
mesh.boundaryMesh().patchSet(groundPatches),
|
||||||
|
searchBounds
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Combine the ground triSurfaces across all processors
|
||||||
|
if (Pstream::parRun())
|
||||||
|
{
|
||||||
|
List<List<labelledTri>> groundSurfaceProcTris(Pstream::nProcs());
|
||||||
|
List<pointField> groundSurfaceProcPoints(Pstream::nProcs());
|
||||||
|
|
||||||
|
groundSurfaceProcTris[Pstream::myProcNo()] = groundSurface;
|
||||||
|
groundSurfaceProcPoints[Pstream::myProcNo()] = groundSurface.points();
|
||||||
|
|
||||||
|
Pstream::gatherList(groundSurfaceProcTris);
|
||||||
|
Pstream::scatterList(groundSurfaceProcTris);
|
||||||
|
Pstream::gatherList(groundSurfaceProcPoints);
|
||||||
|
Pstream::scatterList(groundSurfaceProcPoints);
|
||||||
|
|
||||||
|
label nTris = 0;
|
||||||
|
forAll(groundSurfaceProcTris, i)
|
||||||
|
{
|
||||||
|
nTris += groundSurfaceProcTris[i].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<labelledTri> groundSurfaceTris(nTris);
|
||||||
|
label trii = 0;
|
||||||
|
label offset = 0;
|
||||||
|
forAll(groundSurfaceProcTris, i)
|
||||||
|
{
|
||||||
|
forAll(groundSurfaceProcTris[i], j)
|
||||||
|
{
|
||||||
|
groundSurfaceTris[trii] = groundSurfaceProcTris[i][j];
|
||||||
|
groundSurfaceTris[trii][0] += offset;
|
||||||
|
groundSurfaceTris[trii][1] += offset;
|
||||||
|
groundSurfaceTris[trii][2] += offset;
|
||||||
|
trii++;
|
||||||
|
}
|
||||||
|
offset += groundSurfaceProcPoints[i].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
label nPoints = 0;
|
||||||
|
forAll(groundSurfaceProcPoints, i)
|
||||||
|
{
|
||||||
|
nPoints += groundSurfaceProcPoints[i].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
pointField groundSurfacePoints(nPoints);
|
||||||
|
|
||||||
|
label pointi = 0;
|
||||||
|
forAll(groundSurfaceProcPoints, i)
|
||||||
|
{
|
||||||
|
forAll(groundSurfaceProcPoints[i], j)
|
||||||
|
{
|
||||||
|
groundSurfacePoints[pointi++] = groundSurfaceProcPoints[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
groundSurface = triSurface(groundSurfaceTris, groundSurfacePoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a searchable triSurface for the ground
|
||||||
|
triSurfaceSearch groundSearch(groundSurface);
|
||||||
|
|
||||||
|
// Search the porous cells for the corresponding point on the ground
|
||||||
|
|
||||||
|
start.setSize(porousCelli);
|
||||||
|
end.setSize(porousCelli);
|
||||||
|
|
||||||
|
forAll(porousCells, porousCelli)
|
||||||
|
{
|
||||||
|
start[porousCelli] = C[porousCells[porousCelli]];
|
||||||
|
end[porousCelli] = start[porousCelli] - searchSpan*zDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
groundSearch.findLine(start, end, hitInfo);
|
||||||
|
|
||||||
|
scalarField zBottom(porousCelli);
|
||||||
|
|
||||||
|
forAll(porousCells, porousCelli)
|
||||||
|
{
|
||||||
|
const pointIndexHit& hit = hitInfo[porousCelli];
|
||||||
|
|
||||||
|
if (hit.hit())
|
||||||
|
{
|
||||||
|
zBottom[porousCelli] =
|
||||||
|
(C[porousCells[porousCelli]] - hit.hitPoint()) & zDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the normalized height field
|
||||||
|
scalarField zNorm(zBottom/(zBottom + zTop));
|
||||||
|
|
||||||
|
// Create the porosity surface area per unit volume zone field
|
||||||
|
Sigma_ = SigmaFunc->value(zNorm);
|
||||||
|
|
||||||
|
// Create the porous region cellZone and add to the mesh cellZones
|
||||||
|
|
||||||
|
cellZoneMesh& cellZones = const_cast<cellZoneMesh&>(mesh.cellZones());
|
||||||
|
|
||||||
|
label zoneID = cellZones.findZoneID(zoneName_);
|
||||||
|
|
||||||
|
if (zoneID == -1)
|
||||||
|
{
|
||||||
|
zoneID = cellZones.size();
|
||||||
|
cellZones.setSize(zoneID + 1);
|
||||||
|
|
||||||
|
cellZones.set
|
||||||
|
(
|
||||||
|
zoneID,
|
||||||
|
new cellZone
|
||||||
|
(
|
||||||
|
zoneName_,
|
||||||
|
porousCells,
|
||||||
|
zoneID,
|
||||||
|
cellZones
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Unable to create porous cellZone " << zoneName_
|
||||||
|
<< ": zone already exists"
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::porosityModels::powerLawLopesdaCosta::powerLawLopesdaCosta
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const word& modelType,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dictionary& dict,
|
||||||
|
const word& dummyCellZoneName
|
||||||
|
)
|
||||||
|
:
|
||||||
|
powerLawLopesdaCostaZone(name, modelType, mesh, dict),
|
||||||
|
porosityModel
|
||||||
|
(
|
||||||
|
name,
|
||||||
|
modelType,
|
||||||
|
mesh,
|
||||||
|
dict,
|
||||||
|
powerLawLopesdaCostaZone::zoneName_
|
||||||
|
),
|
||||||
|
Cd_(readScalar(coeffs_.lookup("Cd"))),
|
||||||
|
C1_(readScalar(coeffs_.lookup("C1"))),
|
||||||
|
rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho"))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::porosityModels::powerLawLopesdaCosta::~powerLawLopesdaCosta()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const Foam::scalarField&
|
||||||
|
Foam::porosityModels::powerLawLopesdaCostaZone::Sigma() const
|
||||||
|
{
|
||||||
|
return Sigma_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::calcTransformModelData()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::calcForce
|
||||||
|
(
|
||||||
|
const volVectorField& U,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& mu,
|
||||||
|
vectorField& force
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
scalarField Udiag(U.size(), 0.0);
|
||||||
|
const scalarField& V = mesh_.V();
|
||||||
|
|
||||||
|
apply(Udiag, V, rho, U);
|
||||||
|
|
||||||
|
force = Udiag*U;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::correct
|
||||||
|
(
|
||||||
|
fvVectorMatrix& UEqn
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const vectorField& U = UEqn.psi();
|
||||||
|
const scalarField& V = mesh_.V();
|
||||||
|
scalarField& Udiag = UEqn.diag();
|
||||||
|
|
||||||
|
if (UEqn.dimensions() == dimForce)
|
||||||
|
{
|
||||||
|
const volScalarField& rho =
|
||||||
|
mesh_.lookupObject<volScalarField>(rhoName_);
|
||||||
|
|
||||||
|
apply(Udiag, V, rho, U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
apply(Udiag, V, geometricOneField(), U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::correct
|
||||||
|
(
|
||||||
|
fvVectorMatrix& UEqn,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& mu
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const vectorField& U = UEqn.psi();
|
||||||
|
const scalarField& V = mesh_.V();
|
||||||
|
scalarField& Udiag = UEqn.diag();
|
||||||
|
|
||||||
|
apply(Udiag, V, rho, U);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::correct
|
||||||
|
(
|
||||||
|
const fvVectorMatrix& UEqn,
|
||||||
|
volTensorField& AU
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const vectorField& U = UEqn.psi();
|
||||||
|
|
||||||
|
if (UEqn.dimensions() == dimForce)
|
||||||
|
{
|
||||||
|
const volScalarField& rho =
|
||||||
|
mesh_.lookupObject<volScalarField>(rhoName_);
|
||||||
|
|
||||||
|
apply(AU, rho, U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
apply(AU, geometricOneField(), U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::porosityModels::powerLawLopesdaCosta::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
os << indent << name_ << endl;
|
||||||
|
dict_.write(os);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,229 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::powerLawLopesdaCosta
|
||||||
|
|
||||||
|
Description
|
||||||
|
Variant of the power law porosity model with spatially varying
|
||||||
|
drag coefficient
|
||||||
|
|
||||||
|
given by:
|
||||||
|
|
||||||
|
\f[
|
||||||
|
S = -\rho C_d \Sigma |U|^{(C_1 - 1)} U
|
||||||
|
\f]
|
||||||
|
|
||||||
|
where
|
||||||
|
\vartable
|
||||||
|
\Sigma | Porosity surface area per unit volume
|
||||||
|
C_d | Model linear coefficient
|
||||||
|
C_1 | Model exponent coefficient
|
||||||
|
\endvartable
|
||||||
|
|
||||||
|
Reference:
|
||||||
|
\verbatim
|
||||||
|
Costa, J. C. P. L. D. (2007).
|
||||||
|
Atmospheric flow over forested and non-forested complex terrain.
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
See also
|
||||||
|
Foam::RASModels::kEpsilonLopesdaCosta
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
powerLawLopesdaCosta.C
|
||||||
|
powerLawLopesdaCostaTemplates.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef powerLawLopesdaCosta_H
|
||||||
|
#define powerLawLopesdaCosta_H
|
||||||
|
|
||||||
|
#include "porosityModel.H"
|
||||||
|
#include "Function1.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace porosityModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class powerLawLopesdaCostaZone Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class powerLawLopesdaCostaZone
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Automatically generated zone name for this porous zone
|
||||||
|
const word zoneName_;
|
||||||
|
|
||||||
|
//- Porosity surface area per unit volume zone field
|
||||||
|
scalarField Sigma_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Constructor
|
||||||
|
powerLawLopesdaCostaZone
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const word& modelType,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Return the porosity surface area per unit volume zone field
|
||||||
|
const scalarField& Sigma() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class powerLawLopesdaCosta Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class powerLawLopesdaCosta
|
||||||
|
:
|
||||||
|
public powerLawLopesdaCostaZone,
|
||||||
|
public porosityModel
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Cd coefficient
|
||||||
|
scalar Cd_;
|
||||||
|
|
||||||
|
//- C1 coefficient
|
||||||
|
scalar C1_;
|
||||||
|
|
||||||
|
//- Name of density field
|
||||||
|
word rhoName_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Apply resistance
|
||||||
|
template<class RhoFieldType>
|
||||||
|
void apply
|
||||||
|
(
|
||||||
|
scalarField& Udiag,
|
||||||
|
const scalarField& V,
|
||||||
|
const RhoFieldType& rho,
|
||||||
|
const vectorField& U
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Apply resistance
|
||||||
|
template<class RhoFieldType>
|
||||||
|
void apply
|
||||||
|
(
|
||||||
|
tensorField& AU,
|
||||||
|
const RhoFieldType& rho,
|
||||||
|
const vectorField& U
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Disallow default bitwise copy construct
|
||||||
|
powerLawLopesdaCosta(const powerLawLopesdaCosta&);
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const powerLawLopesdaCosta&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("powerLawLopesdaCosta");
|
||||||
|
|
||||||
|
//- Constructor
|
||||||
|
powerLawLopesdaCosta
|
||||||
|
(
|
||||||
|
const word& name,
|
||||||
|
const word& modelType,
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const dictionary& dict,
|
||||||
|
const word& cellZoneName
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~powerLawLopesdaCosta();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Transform the model data wrt mesh changes
|
||||||
|
virtual void calcTransformModelData();
|
||||||
|
|
||||||
|
//- Calculate the porosity force
|
||||||
|
virtual void calcForce
|
||||||
|
(
|
||||||
|
const volVectorField& U,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& mu,
|
||||||
|
vectorField& force
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Add resistance
|
||||||
|
virtual void correct(fvVectorMatrix& UEqn) const;
|
||||||
|
|
||||||
|
//- Add resistance
|
||||||
|
virtual void correct
|
||||||
|
(
|
||||||
|
fvVectorMatrix& UEqn,
|
||||||
|
const volScalarField& rho,
|
||||||
|
const volScalarField& mu
|
||||||
|
) const;
|
||||||
|
|
||||||
|
//- Add resistance
|
||||||
|
virtual void correct
|
||||||
|
(
|
||||||
|
const fvVectorMatrix& UEqn,
|
||||||
|
volTensorField& AU
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
bool writeData(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace porosityModels
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#ifdef NoRepository
|
||||||
|
#include "powerLawLopesdaCostaTemplates.C"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2018 OpenFOAM Foundation
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
License
|
||||||
|
This file is part of OpenFOAM.
|
||||||
|
|
||||||
|
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "volFields.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<class RhoFieldType>
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::apply
|
||||||
|
(
|
||||||
|
scalarField& Udiag,
|
||||||
|
const scalarField& V,
|
||||||
|
const RhoFieldType& rho,
|
||||||
|
const vectorField& U
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const scalar C1m1b2 = (C1_ - 1.0)/2.0;
|
||||||
|
|
||||||
|
forAll(cellZoneIDs_, zonei)
|
||||||
|
{
|
||||||
|
const labelList& cells = mesh_.cellZones()[cellZoneIDs_[zonei]];
|
||||||
|
|
||||||
|
forAll(cells, i)
|
||||||
|
{
|
||||||
|
const label celli = cells[i];
|
||||||
|
|
||||||
|
Udiag[celli] +=
|
||||||
|
V[celli]*rho[celli]
|
||||||
|
*Cd_*Sigma_[i]*pow(magSqr(U[celli]), C1m1b2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class RhoFieldType>
|
||||||
|
void Foam::porosityModels::powerLawLopesdaCosta::apply
|
||||||
|
(
|
||||||
|
tensorField& AU,
|
||||||
|
const RhoFieldType& rho,
|
||||||
|
const vectorField& U
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const scalar C1m1b2 = (C1_ - 1.0)/2.0;
|
||||||
|
|
||||||
|
forAll(cellZoneIDs_, zonei)
|
||||||
|
{
|
||||||
|
const labelList& cells = mesh_.cellZones()[cellZoneIDs_[zonei]];
|
||||||
|
|
||||||
|
forAll(cells, i)
|
||||||
|
{
|
||||||
|
const label celli = cells[i];
|
||||||
|
|
||||||
|
AU[celli] =
|
||||||
|
AU[celli]
|
||||||
|
+ I
|
||||||
|
*(
|
||||||
|
0.5*rho[celli]*Cd_*Sigma_[i]
|
||||||
|
*pow(magSqr(U[celli]), C1m1b2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -71,7 +71,7 @@ Ostream& operator<<(Ostream&, const faMatrix<Type>&);
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class faMatrix
|
class faMatrix
|
||||||
:
|
:
|
||||||
public tmp<faMatrix<Type>>::refCount,
|
public refCount,
|
||||||
public lduMatrix
|
public lduMatrix
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -223,6 +223,9 @@ public:
|
|||||||
//- Return const access to the cell zone IDs
|
//- Return const access to the cell zone IDs
|
||||||
inline const labelList& cellZoneIDs() const;
|
inline const labelList& cellZoneIDs() const;
|
||||||
|
|
||||||
|
//- Return dictionary used for model construction
|
||||||
|
const dictionary& dict() const;
|
||||||
|
|
||||||
//- Transform the model data wrt mesh changes
|
//- Transform the model data wrt mesh changes
|
||||||
virtual void transformModelData();
|
virtual void transformModelData();
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -35,6 +35,12 @@ inline bool Foam::porosityModel::active() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::dictionary& Foam::porosityModel::dict() const
|
||||||
|
{
|
||||||
|
return dict_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const Foam::labelList& Foam::porosityModel::cellZoneIDs() const
|
inline const Foam::labelList& Foam::porosityModel::cellZoneIDs() const
|
||||||
{
|
{
|
||||||
return cellZoneIDs_;
|
return cellZoneIDs_;
|
||||||
|
|||||||
@ -43,6 +43,21 @@ outletMappedUniformInletFvPatchField
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Foam::outletMappedUniformInletFvPatchField<Type>::
|
||||||
|
outletMappedUniformInletFvPatchField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<Type, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchField<Type>(p, iF, dict),
|
||||||
|
outletPatchName_(dict.lookup("outletPatch")),
|
||||||
|
phiName_(dict.lookupOrDefault<word>("phi", "phi"))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::outletMappedUniformInletFvPatchField<Type>::
|
Foam::outletMappedUniformInletFvPatchField<Type>::
|
||||||
outletMappedUniformInletFvPatchField
|
outletMappedUniformInletFvPatchField
|
||||||
@ -59,21 +74,6 @@ outletMappedUniformInletFvPatchField
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
Foam::outletMappedUniformInletFvPatchField<Type>::
|
|
||||||
outletMappedUniformInletFvPatchField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<Type, volMesh>& iF,
|
|
||||||
const dictionary& dict
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedValueFvPatchField<Type>(p, iF, dict),
|
|
||||||
outletPatchName_(dict.lookup("outletPatch")),
|
|
||||||
phiName_(dict.lookupOrDefault<word>("phi", "phi"))
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::outletMappedUniformInletFvPatchField<Type>::
|
Foam::outletMappedUniformInletFvPatchField<Type>::
|
||||||
outletMappedUniformInletFvPatchField
|
outletMappedUniformInletFvPatchField
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -29,14 +29,14 @@ Group
|
|||||||
|
|
||||||
Description
|
Description
|
||||||
This boundary conditon averages the field over the "outlet" patch specified
|
This boundary conditon averages the field over the "outlet" patch specified
|
||||||
by name "outletPatch" and applies this as the uniform value of the
|
by name "outletPatch" and applies this as the uniform value of the field
|
||||||
field over this patch.
|
over this patch.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
\table
|
\table
|
||||||
Property | Description | Required | Default value
|
Property | Description | Required | Default value
|
||||||
outletPatch | name of outlet patch | yes |
|
outletPatch | Name of outlet patch | yes |
|
||||||
phi | flux field name | no | phi
|
phi | Flux field name | no | phi
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
Example of the boundary condition specification:
|
Example of the boundary condition specification:
|
||||||
|
|||||||
@ -51,7 +51,7 @@ Usage
|
|||||||
setAverage | Switch to activate setting of average value | no | false
|
setAverage | Switch to activate setting of average value | no | false
|
||||||
perturb | Perturb points for regular geometries | no | 1e-5
|
perturb | Perturb points for regular geometries | no | 1e-5
|
||||||
points | Name of points file | no | points
|
points | Name of points file | no | points
|
||||||
fieldTableName | Alternative field name to sample | no | this field name
|
fieldTable | Alternative field name to sample | no | this field name
|
||||||
mapMethod | Type of mapping | no | planarInterpolation
|
mapMethod | Type of mapping | no | planarInterpolation
|
||||||
offset | Offset to mapped values | no | Zero
|
offset | Offset to mapped values | no | Zero
|
||||||
\endtable
|
\endtable
|
||||||
|
|||||||
@ -46,7 +46,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
convectionScheme<Type>::convectionScheme(const convectionScheme& cs)
|
convectionScheme<Type>::convectionScheme(const convectionScheme& cs)
|
||||||
:
|
:
|
||||||
tmp<convectionScheme<Type>>::refCount(),
|
refCount(),
|
||||||
mesh_(cs.mesh_)
|
mesh_(cs.mesh_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class convectionScheme
|
class convectionScheme
|
||||||
:
|
:
|
||||||
public tmp<convectionScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
|
|||||||
@ -21,9 +21,6 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Description
|
|
||||||
Abstract base class for finite volume calculus d2dt2 schemes.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "fv.H"
|
#include "fv.H"
|
||||||
@ -84,13 +81,6 @@ tmp<d2dt2Scheme<Type>> d2dt2Scheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
d2dt2Scheme<Type>::~d2dt2Scheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace fv
|
} // End namespace fv
|
||||||
|
|||||||
@ -25,7 +25,7 @@ Class
|
|||||||
Foam::fv::d2dt2Scheme
|
Foam::fv::d2dt2Scheme
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Abstract base class for d2dt2 schemes.
|
Abstract base class for finite volume d2dt2 schemes.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
d2dt2Scheme.C
|
d2dt2Scheme.C
|
||||||
@ -64,7 +64,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class d2dt2Scheme
|
class d2dt2Scheme
|
||||||
:
|
:
|
||||||
public tmp<d2dt2Scheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -76,11 +76,11 @@ protected:
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
d2dt2Scheme(const d2dt2Scheme&);
|
d2dt2Scheme(const d2dt2Scheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const d2dt2Scheme&);
|
void operator=(const d2dt2Scheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -127,7 +127,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~d2dt2Scheme();
|
virtual ~d2dt2Scheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -84,13 +84,6 @@ tmp<ddtScheme<Type>> ddtScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
ddtScheme<Type>::~ddtScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
@ -120,14 +113,11 @@ tmp<fvMatrix<Type>> ddtScheme<Type>::fvmDdt
|
|||||||
{
|
{
|
||||||
NotImplemented;
|
NotImplemented;
|
||||||
|
|
||||||
return tmp<fvMatrix<Type>>
|
return tmp<fvMatrix<Type>>::New
|
||||||
(
|
|
||||||
new fvMatrix<Type>
|
|
||||||
(
|
(
|
||||||
vf,
|
vf,
|
||||||
alpha.dimensions()*rho.dimensions()
|
alpha.dimensions()*rho.dimensions()
|
||||||
*vf.dimensions()*dimVol/dimTime
|
*vf.dimensions()*dimVol/dimTime
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,6 @@ Group
|
|||||||
Description
|
Description
|
||||||
Abstract base class for ddt schemes.
|
Abstract base class for ddt schemes.
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
ddtScheme.C
|
ddtScheme.C
|
||||||
|
|
||||||
@ -68,7 +67,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class ddtScheme
|
class ddtScheme
|
||||||
:
|
:
|
||||||
public tmp<ddtScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -83,11 +82,11 @@ protected:
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
ddtScheme(const ddtScheme&);
|
ddtScheme(const ddtScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const ddtScheme&);
|
void operator=(const ddtScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -136,7 +135,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~ddtScheme();
|
virtual ~ddtScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -85,16 +85,6 @@ tmp<divScheme<Type>> divScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
divScheme<Type>::~divScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
} // End namespace fv
|
} // End namespace fv
|
||||||
|
|||||||
@ -67,7 +67,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class divScheme
|
class divScheme
|
||||||
:
|
:
|
||||||
public tmp<divScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -80,11 +80,11 @@ protected:
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
divScheme(const divScheme&);
|
divScheme(const divScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const divScheme&);
|
void operator=(const divScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -133,7 +133,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~divScheme();
|
virtual ~divScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -72,12 +72,6 @@ Foam::tmp<Foam::fv::gradScheme<Type>> Foam::fv::gradScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
Foam::fv::gradScheme<Type>::~gradScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
|
|||||||
@ -60,7 +60,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class gradScheme
|
class gradScheme
|
||||||
:
|
:
|
||||||
public tmp<gradScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
@ -69,11 +69,11 @@ class gradScheme
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
gradScheme(const gradScheme&);
|
gradScheme(const gradScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const gradScheme&);
|
void operator=(const gradScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -114,7 +114,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~gradScheme();
|
virtual ~gradScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -83,13 +83,6 @@ tmp<laplacianScheme<Type, GType>> laplacianScheme<Type, GType>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type, class GType>
|
|
||||||
laplacianScheme<Type, GType>::~laplacianScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type, class GType>
|
template<class Type, class GType>
|
||||||
|
|||||||
@ -68,7 +68,7 @@ namespace fv
|
|||||||
template<class Type, class GType>
|
template<class Type, class GType>
|
||||||
class laplacianScheme
|
class laplacianScheme
|
||||||
:
|
:
|
||||||
public tmp<laplacianScheme<Type, GType>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -84,11 +84,11 @@ private:
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
laplacianScheme(const laplacianScheme&);
|
laplacianScheme(const laplacianScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const laplacianScheme&);
|
void operator=(const laplacianScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -162,7 +162,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~laplacianScheme();
|
virtual ~laplacianScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -85,13 +85,6 @@ tmp<snGradScheme<Type>> snGradScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
snGradScheme<Type>::~snGradScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
|
|||||||
@ -63,7 +63,7 @@ namespace fv
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class snGradScheme
|
class snGradScheme
|
||||||
:
|
:
|
||||||
public tmp<snGradScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
@ -73,11 +73,11 @@ class snGradScheme
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
snGradScheme(const snGradScheme&);
|
snGradScheme(const snGradScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const snGradScheme&);
|
void operator=(const snGradScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -118,7 +118,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~snGradScheme();
|
virtual ~snGradScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -321,7 +321,7 @@ Foam::fvMatrix<Type>::fvMatrix
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::fvMatrix<Type>::fvMatrix(const fvMatrix<Type>& fvm)
|
Foam::fvMatrix<Type>::fvMatrix(const fvMatrix<Type>& fvm)
|
||||||
:
|
:
|
||||||
tmp<fvMatrix<Type>>::refCount(),
|
refCount(),
|
||||||
lduMatrix(fvm),
|
lduMatrix(fvm),
|
||||||
psi_(fvm.psi_),
|
psi_(fvm.psi_),
|
||||||
dimensions_(fvm.dimensions_),
|
dimensions_(fvm.dimensions_),
|
||||||
|
|||||||
@ -114,7 +114,7 @@ template<class T> class UIndirectList;
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class fvMatrix
|
class fvMatrix
|
||||||
:
|
:
|
||||||
public tmp<fvMatrix<Type>>::refCount,
|
public refCount,
|
||||||
public lduMatrix
|
public lduMatrix
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|||||||
@ -21,9 +21,6 @@ License
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Description
|
|
||||||
Abstract base class for surface interpolation schemes.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "fv.H"
|
#include "fv.H"
|
||||||
@ -85,12 +82,4 @@ Foam::multivariateSurfaceInterpolationScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
Foam::multivariateSurfaceInterpolationScheme<Type>::
|
|
||||||
~multivariateSurfaceInterpolationScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -50,7 +50,7 @@ namespace Foam
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class multivariateSurfaceInterpolationScheme
|
class multivariateSurfaceInterpolationScheme
|
||||||
:
|
:
|
||||||
public tmp<multivariateSurfaceInterpolationScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -85,14 +85,14 @@ private:
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
//- No copy construct
|
||||||
multivariateSurfaceInterpolationScheme
|
multivariateSurfaceInterpolationScheme
|
||||||
(
|
(
|
||||||
const multivariateSurfaceInterpolationScheme&
|
const multivariateSurfaceInterpolationScheme&
|
||||||
);
|
) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const multivariateSurfaceInterpolationScheme&);
|
void operator=(const multivariateSurfaceInterpolationScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -143,7 +143,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~multivariateSurfaceInterpolationScheme();
|
virtual ~multivariateSurfaceInterpolationScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -123,13 +123,6 @@ Foam::surfaceInterpolationScheme<Type>::New
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
template<class Type>
|
|
||||||
Foam::surfaceInterpolationScheme<Type>::~surfaceInterpolationScheme()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
@ -147,8 +140,7 @@ Foam::surfaceInterpolationScheme<Type>::interpolate
|
|||||||
<< "Interpolating "
|
<< "Interpolating "
|
||||||
<< vf.type() << " "
|
<< vf.type() << " "
|
||||||
<< vf.name()
|
<< vf.name()
|
||||||
<< " from cells to faces "
|
<< " from cells to faces without explicit correction"
|
||||||
"without explicit correction"
|
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,7 @@ class fvMesh;
|
|||||||
template<class Type>
|
template<class Type>
|
||||||
class surfaceInterpolationScheme
|
class surfaceInterpolationScheme
|
||||||
:
|
:
|
||||||
public tmp<surfaceInterpolationScheme<Type>>::refCount
|
public refCount
|
||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
@ -65,11 +65,11 @@ class surfaceInterpolationScheme
|
|||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Disallow copy construct
|
//- No copy construct
|
||||||
surfaceInterpolationScheme(const surfaceInterpolationScheme&);
|
surfaceInterpolationScheme(const surfaceInterpolationScheme&) = delete;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- No copy assignment
|
||||||
void operator=(const surfaceInterpolationScheme&);
|
void operator=(const surfaceInterpolationScheme&) = delete;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -134,7 +134,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~surfaceInterpolationScheme();
|
virtual ~surfaceInterpolationScheme() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|||||||
@ -122,11 +122,10 @@ void Foam::functionObjects::runTimePostPro::scene::readColours
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const wordList colours = dict.toc();
|
const wordList colours(dict.toc());
|
||||||
forAll(colours, i)
|
for (const word& c : colours)
|
||||||
{
|
{
|
||||||
const word& c = colours[i];
|
colours_.insert(c, Function1<vector>::New(c, dict));
|
||||||
colours_.insert(c, Function1<vector>::New(c, dict).ptr());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -61,13 +61,6 @@ Foam::fv::explicitPorositySource::explicitPorositySource
|
|||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
|
|
||||||
if (selectionMode_ != smCellZone)
|
|
||||||
{
|
|
||||||
FatalErrorInFunction
|
|
||||||
<< "selection mode is " << selectionModeTypeNames_[selectionMode_]
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
porosityPtr_.reset
|
porosityPtr_.reset
|
||||||
(
|
(
|
||||||
porosityModel::New
|
porosityModel::New
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2012-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -134,6 +134,11 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
|
const porosityModel& model() const
|
||||||
|
{
|
||||||
|
return porosityPtr_();
|
||||||
|
}
|
||||||
|
|
||||||
// Add explicit and implicit contributions
|
// Add explicit and implicit contributions
|
||||||
|
|
||||||
//- Add implicit contribution to momentum equation
|
//- Add implicit contribution to momentum equation
|
||||||
|
|||||||
@ -109,7 +109,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new scalarField(0)
|
autoPtr<scalarField>::New()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -133,7 +133,8 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
== token::Compound<List<scalar>>::typeName
|
== token::Compound<List<scalar>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
scalarField* fPtr = new scalarField;
|
auto fPtr = autoPtr<scalarField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<scalar>>>
|
dynamicCast<token::Compound<List<scalar>>>
|
||||||
@ -167,7 +168,8 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
== token::Compound<List<vector>>::typeName
|
== token::Compound<List<vector>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
vectorField* fPtr = new vectorField;
|
auto fPtr = autoPtr<vectorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<vector>>>
|
dynamicCast<token::Compound<List<vector>>>
|
||||||
@ -201,7 +203,8 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
== token::Compound<List<sphericalTensor>>::typeName
|
== token::Compound<List<sphericalTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
sphericalTensorField* fPtr = new sphericalTensorField;
|
auto fPtr = autoPtr<sphericalTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -238,7 +241,8 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
== token::Compound<List<symmTensor>>::typeName
|
== token::Compound<List<symmTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
symmTensorField* fPtr = new symmTensorField;
|
auto fPtr = autoPtr<symmTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -275,7 +279,8 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
== token::Compound<List<tensor>>::typeName
|
== token::Compound<List<tensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
tensorField* fPtr = new tensorField;
|
auto fPtr = autoPtr<tensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<tensor>>>
|
dynamicCast<token::Compound<List<tensor>>>
|
||||||
@ -331,7 +336,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new scalarField
|
autoPtr<scalarField>::New
|
||||||
(
|
(
|
||||||
this->size(),
|
this->size(),
|
||||||
fieldToken.number()
|
fieldToken.number()
|
||||||
@ -352,7 +357,11 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
vectorFields_.insert
|
vectorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new vectorField(this->size(), vs)
|
autoPtr<vectorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == sphericalTensor::nComponents)
|
else if (l.size() == sphericalTensor::nComponents)
|
||||||
@ -362,7 +371,11 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
sphericalTensorFields_.insert
|
sphericalTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new sphericalTensorField(this->size(), vs)
|
autoPtr<sphericalTensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == symmTensor::nComponents)
|
else if (l.size() == symmTensor::nComponents)
|
||||||
@ -372,7 +385,11 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
symmTensorFields_.insert
|
symmTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new symmTensorField(this->size(), vs)
|
autoPtr<symmTensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == tensor::nComponents)
|
else if (l.size() == tensor::nComponents)
|
||||||
@ -387,7 +404,11 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
tensorFields_.insert
|
tensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new tensorField(this->size(), vs)
|
autoPtr<tensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -434,7 +455,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new scalarField(*iter(), mapper)
|
autoPtr<scalarField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +469,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
vectorFields_.insert
|
vectorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new vectorField(*iter(), mapper)
|
autoPtr<vectorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +483,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
sphericalTensorFields_.insert
|
sphericalTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new sphericalTensorField(*iter(), mapper)
|
autoPtr<sphericalTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +497,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
symmTensorFields_.insert
|
symmTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new symmTensorField(*iter(), mapper)
|
autoPtr<symmTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,7 +511,7 @@ Foam::genericFaPatchField<Type>::genericFaPatchField
|
|||||||
tensorFields_.insert
|
tensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new tensorField(*iter(), mapper)
|
autoPtr<tensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new scalarField(0)
|
autoPtr<scalarField>::New()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -133,7 +133,8 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
== token::Compound<List<scalar>>::typeName
|
== token::Compound<List<scalar>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
scalarField* fPtr = new scalarField;
|
auto fPtr = autoPtr<scalarField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<scalar>>>
|
dynamicCast<token::Compound<List<scalar>>>
|
||||||
@ -167,7 +168,8 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
== token::Compound<List<vector>>::typeName
|
== token::Compound<List<vector>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
vectorField* fPtr = new vectorField;
|
auto fPtr = autoPtr<vectorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<vector>>>
|
dynamicCast<token::Compound<List<vector>>>
|
||||||
@ -201,7 +203,8 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
== token::Compound<List<sphericalTensor>>::typeName
|
== token::Compound<List<sphericalTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
sphericalTensorField* fPtr = new sphericalTensorField;
|
auto fPtr = autoPtr<sphericalTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -238,7 +241,8 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
== token::Compound<List<symmTensor>>::typeName
|
== token::Compound<List<symmTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
symmTensorField* fPtr = new symmTensorField;
|
auto fPtr = autoPtr<symmTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -275,7 +279,8 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
== token::Compound<List<tensor>>::typeName
|
== token::Compound<List<tensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
tensorField* fPtr = new tensorField;
|
auto fPtr = autoPtr<tensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<tensor>>>
|
dynamicCast<token::Compound<List<tensor>>>
|
||||||
@ -331,7 +336,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new scalarField
|
autoPtr<scalarField>::New
|
||||||
(
|
(
|
||||||
this->size(),
|
this->size(),
|
||||||
fieldToken.number()
|
fieldToken.number()
|
||||||
@ -352,7 +357,11 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
vectorFields_.insert
|
vectorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new vectorField(this->size(), vs)
|
autoPtr<vectorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == sphericalTensor::nComponents)
|
else if (l.size() == sphericalTensor::nComponents)
|
||||||
@ -362,7 +371,11 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
sphericalTensorFields_.insert
|
sphericalTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new sphericalTensorField(this->size(), vs)
|
autoPtr<sphericalTensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == symmTensor::nComponents)
|
else if (l.size() == symmTensor::nComponents)
|
||||||
@ -372,7 +385,11 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
symmTensorFields_.insert
|
symmTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new symmTensorField(this->size(), vs)
|
autoPtr<symmTensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (l.size() == tensor::nComponents)
|
else if (l.size() == tensor::nComponents)
|
||||||
@ -387,7 +404,11 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
tensorFields_.insert
|
tensorFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new tensorField(this->size(), vs)
|
autoPtr<tensorField>::New
|
||||||
|
(
|
||||||
|
this->size(),
|
||||||
|
vs
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -434,7 +455,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new scalarField(*iter(), mapper)
|
autoPtr<scalarField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,7 +469,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
vectorFields_.insert
|
vectorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new vectorField(*iter(), mapper)
|
autoPtr<vectorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +483,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
sphericalTensorFields_.insert
|
sphericalTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new sphericalTensorField(*iter(), mapper)
|
autoPtr<sphericalTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +497,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
symmTensorFields_.insert
|
symmTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new symmTensorField(*iter(), mapper)
|
autoPtr<symmTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,7 +511,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
tensorFields_.insert
|
tensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new tensorField(*iter(), mapper)
|
autoPtr<tensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,7 +87,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter().keyword(),
|
iter().keyword(),
|
||||||
new scalarField(0)
|
autoPtr<scalarField>::New()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -111,7 +111,8 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
== token::Compound<List<scalar>>::typeName
|
== token::Compound<List<scalar>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
scalarField* fPtr = new scalarField;
|
auto fPtr = autoPtr<scalarField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<scalar>>>
|
dynamicCast<token::Compound<List<scalar>>>
|
||||||
@ -145,7 +146,8 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
== token::Compound<List<vector>>::typeName
|
== token::Compound<List<vector>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
vectorField* fPtr = new vectorField;
|
auto fPtr = autoPtr<vectorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<vector>>>
|
dynamicCast<token::Compound<List<vector>>>
|
||||||
@ -179,7 +181,8 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
== token::Compound<List<sphericalTensor>>::typeName
|
== token::Compound<List<sphericalTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
sphericalTensorField* fPtr = new sphericalTensorField;
|
auto fPtr = autoPtr<sphericalTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -216,7 +219,8 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
== token::Compound<List<symmTensor>>::typeName
|
== token::Compound<List<symmTensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
symmTensorField* fPtr = new symmTensorField;
|
auto fPtr = autoPtr<symmTensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast
|
dynamicCast
|
||||||
@ -253,7 +257,8 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
== token::Compound<List<tensor>>::typeName
|
== token::Compound<List<tensor>>::typeName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
tensorField* fPtr = new tensorField;
|
auto fPtr = autoPtr<tensorField>::New();
|
||||||
|
|
||||||
fPtr->transfer
|
fPtr->transfer
|
||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<tensor>>>
|
dynamicCast<token::Compound<List<tensor>>>
|
||||||
@ -325,7 +330,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
scalarFields_.insert
|
scalarFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new scalarField(*iter(), mapper)
|
autoPtr<scalarField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,7 +344,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
vectorFields_.insert
|
vectorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new vectorField(*iter(), mapper)
|
autoPtr<vectorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -353,7 +358,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
sphericalTensorFields_.insert
|
sphericalTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new sphericalTensorField(*iter(), mapper)
|
autoPtr<sphericalTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,7 +372,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
symmTensorFields_.insert
|
symmTensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new symmTensorField(*iter(), mapper)
|
autoPtr<symmTensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +386,7 @@ Foam::genericPointPatchField<Type>::genericPointPatchField
|
|||||||
tensorFields_.insert
|
tensorFields_.insert
|
||||||
(
|
(
|
||||||
iter.key(),
|
iter.key(),
|
||||||
new tensorField(*iter(), mapper)
|
autoPtr<tensorField>::New(*iter(), mapper)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2276,7 +2276,6 @@ Foam::triSurfaceTools::sideType Foam::triSurfaceTools::surfaceSide
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// triangulation of boundaryMesh
|
|
||||||
Foam::triSurface Foam::triSurfaceTools::triangulate
|
Foam::triSurface Foam::triSurfaceTools::triangulate
|
||||||
(
|
(
|
||||||
const polyBoundaryMesh& bMesh,
|
const polyBoundaryMesh& bMesh,
|
||||||
@ -2357,6 +2356,96 @@ Foam::triSurface Foam::triSurfaceTools::triangulate
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::triSurface Foam::triSurfaceTools::triangulate
|
||||||
|
(
|
||||||
|
const polyBoundaryMesh& bMesh,
|
||||||
|
const labelHashSet& includePatches,
|
||||||
|
const boundBox& bBox,
|
||||||
|
const bool verbose
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const polyMesh& mesh = bMesh.mesh();
|
||||||
|
|
||||||
|
// Storage for surfaceMesh. Size estimate.
|
||||||
|
DynamicList<labelledTri> triangles
|
||||||
|
(
|
||||||
|
mesh.nFaces() - mesh.nInternalFaces()
|
||||||
|
);
|
||||||
|
|
||||||
|
label newPatchi = 0;
|
||||||
|
|
||||||
|
forAllConstIter(labelHashSet, includePatches, iter)
|
||||||
|
{
|
||||||
|
const label patchi = iter.key();
|
||||||
|
const polyPatch& patch = bMesh[patchi];
|
||||||
|
const pointField& points = patch.points();
|
||||||
|
|
||||||
|
label nTriTotal = 0;
|
||||||
|
|
||||||
|
forAll(patch, patchFacei)
|
||||||
|
{
|
||||||
|
const face& f = patch[patchFacei];
|
||||||
|
|
||||||
|
if (bBox.containsAny(points, f))
|
||||||
|
{
|
||||||
|
faceList triFaces(f.nTriangles(points));
|
||||||
|
|
||||||
|
label nTri = 0;
|
||||||
|
|
||||||
|
f.triangles(points, nTri, triFaces);
|
||||||
|
|
||||||
|
forAll(triFaces, triFacei)
|
||||||
|
{
|
||||||
|
const face& f = triFaces[triFacei];
|
||||||
|
|
||||||
|
triangles.append(labelledTri(f[0], f[1], f[2], newPatchi));
|
||||||
|
|
||||||
|
nTriTotal++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
{
|
||||||
|
Pout<< patch.name() << " : generated " << nTriTotal
|
||||||
|
<< " triangles from " << patch.size() << " faces with"
|
||||||
|
<< " new patchid " << newPatchi << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
newPatchi++;
|
||||||
|
}
|
||||||
|
triangles.shrink();
|
||||||
|
|
||||||
|
// Create globally numbered tri surface
|
||||||
|
triSurface rawSurface(triangles, mesh.points());
|
||||||
|
|
||||||
|
// Create locally numbered tri surface
|
||||||
|
triSurface surface
|
||||||
|
(
|
||||||
|
rawSurface.localFaces(),
|
||||||
|
rawSurface.localPoints()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Add patch names to surface
|
||||||
|
surface.patches().setSize(newPatchi);
|
||||||
|
|
||||||
|
newPatchi = 0;
|
||||||
|
|
||||||
|
forAllConstIter(labelHashSet, includePatches, iter)
|
||||||
|
{
|
||||||
|
const label patchi = iter.key();
|
||||||
|
const polyPatch& patch = bMesh[patchi];
|
||||||
|
|
||||||
|
surface.patches()[newPatchi].name() = patch.name();
|
||||||
|
surface.patches()[newPatchi].geometricType() = patch.type();
|
||||||
|
|
||||||
|
newPatchi++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return surface;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// triangulation of boundaryMesh
|
// triangulation of boundaryMesh
|
||||||
Foam::triSurface Foam::triSurfaceTools::triangulateFaceCentre
|
Foam::triSurface Foam::triSurfaceTools::triangulateFaceCentre
|
||||||
(
|
(
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
|
||||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -67,6 +67,7 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of classes
|
// Forward declaration of classes
|
||||||
|
class boundBox;
|
||||||
class edge;
|
class edge;
|
||||||
class labelledTri;
|
class labelledTri;
|
||||||
class polyBoundaryMesh;
|
class polyBoundaryMesh;
|
||||||
@ -76,7 +77,6 @@ class face;
|
|||||||
class Time;
|
class Time;
|
||||||
template<class Face> class MeshedSurface;
|
template<class Face> class MeshedSurface;
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class triSurfaceTools Declaration
|
Class triSurfaceTools Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -484,6 +484,16 @@ public:
|
|||||||
const bool verbose = false
|
const bool verbose = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
static triSurface triangulate
|
||||||
|
(
|
||||||
|
const polyBoundaryMesh& bMesh,
|
||||||
|
const labelHashSet& includePatches,
|
||||||
|
const boundBox& bBox,
|
||||||
|
const bool verbose = false
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Face-centre triangulation of (selected patches of) boundaryMesh.
|
//- Face-centre triangulation of (selected patches of) boundaryMesh.
|
||||||
// Needs
|
// Needs
|
||||||
// polyMesh (or polyBoundaryMesh) since only at this level are the
|
// polyMesh (or polyBoundaryMesh) since only at this level are the
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user