mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
merge after conflict resolution
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
basicPsiThermo& thermo = pThermo();
|
basicPsiThermo& thermo = pThermo();
|
||||||
|
|
||||||
volScalarField& p = thermo.p();
|
volScalarField& p = thermo.p();
|
||||||
volScalarField& e = thermo.h();
|
volScalarField& e = thermo.e();
|
||||||
const volScalarField& psi = thermo.psi();
|
const volScalarField& psi = thermo.psi();
|
||||||
|
|
||||||
volScalarField rho
|
volScalarField rho
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -14,5 +14,5 @@ IOdictionary mdEquilibrationDict
|
|||||||
|
|
||||||
scalar targetTemperature = readScalar
|
scalar targetTemperature = readScalar
|
||||||
(
|
(
|
||||||
mdEquilibrationDict.lookup("equilibrationTargetTemperature")
|
mdEquilibrationDict.lookup("targetTemperature")
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
|
-I../buoyantBoussinesqSimpleFoam \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/turbulenceModels \
|
-I$(LIB_SRC)/turbulenceModels \
|
||||||
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \
|
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
volScalarField kappaEff
|
volScalarField kappaEff
|
||||||
(
|
(
|
||||||
"kappaEff",
|
"kappaEff",
|
||||||
turbulence->nu() + turbulence->nut()/Prt
|
turbulence->nu()/Pr + turbulence->nut()/Prt
|
||||||
);
|
);
|
||||||
|
|
||||||
fvScalarMatrix TEqn
|
fvScalarMatrix TEqn
|
||||||
@ -15,4 +15,6 @@
|
|||||||
TEqn.relax();
|
TEqn.relax();
|
||||||
|
|
||||||
TEqn.solve();
|
TEqn.solve();
|
||||||
|
|
||||||
|
rhok = 1.0 - beta*(T - TRef);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,23 +1,26 @@
|
|||||||
// Solve the momentum equation
|
// Solve the momentum equation
|
||||||
|
|
||||||
tmp<fvVectorMatrix> UEqn
|
fvVectorMatrix UEqn
|
||||||
(
|
(
|
||||||
fvm::ddt(U)
|
fvm::ddt(U)
|
||||||
+ fvm::div(phi, U)
|
+ fvm::div(phi, U)
|
||||||
+ turbulence->divDevReff(U)
|
+ turbulence->divDevReff(U)
|
||||||
);
|
);
|
||||||
|
|
||||||
UEqn().relax();
|
UEqn.relax();
|
||||||
|
|
||||||
solve
|
if (momentumPredictor)
|
||||||
(
|
{
|
||||||
UEqn()
|
solve
|
||||||
==
|
|
||||||
-fvc::reconstruct
|
|
||||||
(
|
(
|
||||||
|
UEqn
|
||||||
|
==
|
||||||
|
fvc::reconstruct
|
||||||
(
|
(
|
||||||
fvc::snGrad(pd)
|
(
|
||||||
- betaghf*fvc::snGrad(T)
|
fvc::interpolate(rhok)*(g & mesh.Sf())
|
||||||
) * mesh.magSf()
|
- fvc::snGrad(p)*mesh.magSf()
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@ -30,18 +30,18 @@ Description
|
|||||||
|
|
||||||
Uses the Boussinesq approximation:
|
Uses the Boussinesq approximation:
|
||||||
\f[
|
\f[
|
||||||
rho_{eff} = 1 - beta(T - T_{ref})
|
rho_{k} = 1 - beta(T - T_{ref})
|
||||||
\f]
|
\f]
|
||||||
|
|
||||||
where:
|
where:
|
||||||
\f$ rho_{eff} \f$ = the effective (driving) density
|
\f$ rho_{k} \f$ = the effective (driving) kinematic density
|
||||||
beta = thermal expansion coefficient [1/K]
|
beta = thermal expansion coefficient [1/K]
|
||||||
T = temperature [K]
|
T = temperature [K]
|
||||||
\f$ T_{ref} \f$ = reference temperature [K]
|
\f$ T_{ref} \f$ = reference temperature [K]
|
||||||
|
|
||||||
Valid when:
|
Valid when:
|
||||||
\f[
|
\f[
|
||||||
rho_{eff} << 1
|
rho_{k} << 1
|
||||||
\f]
|
\f]
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
@ -78,20 +78,17 @@ int main(int argc, char *argv[])
|
|||||||
#include "setDeltaT.H"
|
#include "setDeltaT.H"
|
||||||
|
|
||||||
#include "UEqn.H"
|
#include "UEqn.H"
|
||||||
|
#include "TEqn.H"
|
||||||
|
|
||||||
// --- PISO loop
|
// --- PISO loop
|
||||||
for (int corr=0; corr<nCorr; corr++)
|
for (int corr=0; corr<nCorr; corr++)
|
||||||
{
|
{
|
||||||
#include "TEqn.H"
|
#include "pEqn.H"
|
||||||
#include "pdEqn.H"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
turbulence->correct();
|
turbulence->correct();
|
||||||
|
|
||||||
if (runTime.write())
|
runTime.write();
|
||||||
{
|
|
||||||
#include "writeAdditionalFields.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||||
|
|||||||
@ -14,13 +14,12 @@
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
// kinematic pd
|
Info<< "Reading field p\n" << endl;
|
||||||
Info<< "Reading field pd\n" << endl;
|
volScalarField p
|
||||||
volScalarField pd
|
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"pd",
|
"p",
|
||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::MUST_READ,
|
IOobject::MUST_READ,
|
||||||
@ -53,15 +52,25 @@
|
|||||||
incompressible::RASModel::New(U, phi, laminarTransport)
|
incompressible::RASModel::New(U, phi, laminarTransport)
|
||||||
);
|
);
|
||||||
|
|
||||||
Info<< "Calculating field beta*(g.h)\n" << endl;
|
label pRefCell = 0;
|
||||||
surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf()));
|
scalar pRefValue = 0.0;
|
||||||
|
|
||||||
label pdRefCell = 0;
|
|
||||||
scalar pdRefValue = 0.0;
|
|
||||||
setRefCell
|
setRefCell
|
||||||
(
|
(
|
||||||
pd,
|
p,
|
||||||
mesh.solutionDict().subDict("SIMPLE"),
|
mesh.solutionDict().subDict("PISO"),
|
||||||
pdRefCell,
|
pRefCell,
|
||||||
pdRefValue
|
pRefValue
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Kinematic density for buoyancy force
|
||||||
|
volScalarField rhok
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"rhok",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
|
1.0 - beta*(T - TRef)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
volScalarField rUA("rUA", 1.0/UEqn().A());
|
volScalarField rUA("rUA", 1.0/UEqn.A());
|
||||||
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
|
surfaceScalarField rUAf("(1|A(U))", fvc::interpolate(rUA));
|
||||||
|
|
||||||
U = rUA*UEqn().H();
|
U = rUA*UEqn.H();
|
||||||
UEqn.clear();
|
|
||||||
|
|
||||||
surfaceScalarField phiU
|
surfaceScalarField phiU
|
||||||
(
|
(
|
||||||
@ -11,31 +10,31 @@
|
|||||||
+ fvc::ddtPhiCorr(rUA, U, phi)
|
+ fvc::ddtPhiCorr(rUA, U, phi)
|
||||||
);
|
);
|
||||||
|
|
||||||
phi = phiU + betaghf*fvc::snGrad(T)*rUAf*mesh.magSf();
|
phi = phiU + rUAf*fvc::interpolate(rhok)*(g & mesh.Sf());
|
||||||
|
|
||||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||||
{
|
{
|
||||||
fvScalarMatrix pdEqn
|
fvScalarMatrix pEqn
|
||||||
(
|
(
|
||||||
fvm::laplacian(rUAf, pd) == fvc::div(phi)
|
fvm::laplacian(rUAf, p) == fvc::div(phi)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (corr == nCorr-1 && nonOrth == nNonOrthCorr)
|
if (corr == nCorr-1 && nonOrth == nNonOrthCorr)
|
||||||
{
|
{
|
||||||
pdEqn.solve(mesh.solver(pd.name() + "Final"));
|
pEqn.solve(mesh.solver(p.name() + "Final"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pdEqn.solve(mesh.solver(pd.name()));
|
pEqn.solve(mesh.solver(p.name()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nonOrth == nNonOrthCorr)
|
if (nonOrth == nNonOrthCorr)
|
||||||
{
|
{
|
||||||
phi += pdEqn.flux();
|
phi -= pEqn.flux();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
U -= rUA*fvc::reconstruct((phi - phiU)/rUAf);
|
U += rUA*fvc::reconstruct((phi - phiU)/rUAf);
|
||||||
U.correctBoundaryConditions();
|
U.correctBoundaryConditions();
|
||||||
|
|
||||||
#include "continuityErrs.H"
|
#include "continuityErrs.H"
|
||||||
@ -1,13 +0,0 @@
|
|||||||
singlePhaseTransportModel laminarTransport(U, phi);
|
|
||||||
|
|
||||||
// thermal expansion coefficient [1/K]
|
|
||||||
dimensionedScalar beta(laminarTransport.lookup("beta"));
|
|
||||||
|
|
||||||
// reference temperature [K]
|
|
||||||
dimensionedScalar TRef(laminarTransport.lookup("TRef"));
|
|
||||||
|
|
||||||
// reference kinematic pressure [m2/s2]
|
|
||||||
dimensionedScalar pRef(laminarTransport.lookup("pRef"));
|
|
||||||
|
|
||||||
// turbulent Prandtl number
|
|
||||||
dimensionedScalar Prt(laminarTransport.lookup("Prt"));
|
|
||||||
@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
volScalarField rhoEff
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"rhoEff",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
1.0 - beta*(T - TRef)
|
|
||||||
);
|
|
||||||
rhoEff.write();
|
|
||||||
|
|
||||||
volScalarField p
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"p",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
pd + rhoEff*(g & mesh.C()) + pRef
|
|
||||||
);
|
|
||||||
p.write();
|
|
||||||
}
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
volScalarField kappaEff
|
volScalarField kappaEff
|
||||||
(
|
(
|
||||||
"kappaEff",
|
"kappaEff",
|
||||||
turbulence->nu() + turbulence->nut()/Prt
|
turbulence->nu()/Pr + turbulence->nut()/Prt
|
||||||
);
|
);
|
||||||
|
|
||||||
fvScalarMatrix TEqn
|
fvScalarMatrix TEqn
|
||||||
@ -16,4 +16,6 @@
|
|||||||
|
|
||||||
eqnResidual = TEqn.solve().initialResidual();
|
eqnResidual = TEqn.solve().initialResidual();
|
||||||
maxResidual = max(eqnResidual, maxResidual);
|
maxResidual = max(eqnResidual, maxResidual);
|
||||||
|
|
||||||
|
rhok = 1.0 - beta*(T - TRef);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,12 +13,12 @@
|
|||||||
(
|
(
|
||||||
UEqn()
|
UEqn()
|
||||||
==
|
==
|
||||||
-fvc::reconstruct
|
fvc::reconstruct
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
fvc::snGrad(pd)
|
fvc::interpolate(rhok)*(g & mesh.Sf())
|
||||||
- betaghf*fvc::snGrad(T)
|
- fvc::snGrad(p)*mesh.magSf()
|
||||||
) * mesh.magSf()
|
)
|
||||||
)
|
)
|
||||||
).initialResidual();
|
).initialResidual();
|
||||||
|
|
||||||
|
|||||||
@ -72,21 +72,18 @@ int main(int argc, char *argv[])
|
|||||||
#include "readSIMPLEControls.H"
|
#include "readSIMPLEControls.H"
|
||||||
#include "initConvergenceCheck.H"
|
#include "initConvergenceCheck.H"
|
||||||
|
|
||||||
pd.storePrevIter();
|
p.storePrevIter();
|
||||||
|
|
||||||
// Pressure-velocity SIMPLE corrector
|
// Pressure-velocity SIMPLE corrector
|
||||||
{
|
{
|
||||||
#include "UEqn.H"
|
#include "UEqn.H"
|
||||||
#include "TEqn.H"
|
#include "TEqn.H"
|
||||||
#include "pdEqn.H"
|
#include "pEqn.H"
|
||||||
}
|
}
|
||||||
|
|
||||||
turbulence->correct();
|
turbulence->correct();
|
||||||
|
|
||||||
if (runTime.write())
|
runTime.write();
|
||||||
{
|
|
||||||
#include "writeAdditionalFields.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
|
||||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||||
|
|||||||
@ -14,13 +14,12 @@
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
// kinematic pd
|
Info<< "Reading field p\n" << endl;
|
||||||
Info<< "Reading field pd\n" << endl;
|
volScalarField p
|
||||||
volScalarField pd
|
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
"pd",
|
"p",
|
||||||
runTime.timeName(),
|
runTime.timeName(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::MUST_READ,
|
IOobject::MUST_READ,
|
||||||
@ -56,12 +55,25 @@
|
|||||||
Info<< "Calculating field beta*(g.h)\n" << endl;
|
Info<< "Calculating field beta*(g.h)\n" << endl;
|
||||||
surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf()));
|
surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf()));
|
||||||
|
|
||||||
label pdRefCell = 0;
|
label pRefCell = 0;
|
||||||
scalar pdRefValue = 0.0;
|
scalar pRefValue = 0.0;
|
||||||
setRefCell
|
setRefCell
|
||||||
(
|
(
|
||||||
pd,
|
p,
|
||||||
mesh.solutionDict().subDict("SIMPLE"),
|
mesh.solutionDict().subDict("SIMPLE"),
|
||||||
pdRefCell,
|
pRefCell,
|
||||||
pdRefValue
|
pRefValue
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Kinematic density for buoyancy force
|
||||||
|
volScalarField rhok
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"rhok",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh
|
||||||
|
),
|
||||||
|
1.0 - beta*(T - TRef)
|
||||||
);
|
);
|
||||||
|
|||||||
@ -6,41 +6,42 @@
|
|||||||
UEqn.clear();
|
UEqn.clear();
|
||||||
|
|
||||||
phi = fvc::interpolate(U) & mesh.Sf();
|
phi = fvc::interpolate(U) & mesh.Sf();
|
||||||
adjustPhi(phi, U, pd);
|
adjustPhi(phi, U, p);
|
||||||
surfaceScalarField buoyancyPhi = -betaghf*fvc::snGrad(T)*rUAf*mesh.magSf();
|
surfaceScalarField buoyancyPhi =
|
||||||
phi -= buoyancyPhi;
|
rUAf*fvc::interpolate(rhok)*(g & mesh.Sf());
|
||||||
|
phi += buoyancyPhi;
|
||||||
|
|
||||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||||
{
|
{
|
||||||
fvScalarMatrix pdEqn
|
fvScalarMatrix pEqn
|
||||||
(
|
(
|
||||||
fvm::laplacian(rUAf, pd) == fvc::div(phi)
|
fvm::laplacian(rUAf, p) == fvc::div(phi)
|
||||||
);
|
);
|
||||||
|
|
||||||
pdEqn.setReference(pdRefCell, pdRefValue);
|
pEqn.setReference(pRefCell, pRefValue);
|
||||||
|
|
||||||
// retain the residual from the first iteration
|
// retain the residual from the first iteration
|
||||||
if (nonOrth == 0)
|
if (nonOrth == 0)
|
||||||
{
|
{
|
||||||
eqnResidual = pdEqn.solve().initialResidual();
|
eqnResidual = pEqn.solve().initialResidual();
|
||||||
maxResidual = max(eqnResidual, maxResidual);
|
maxResidual = max(eqnResidual, maxResidual);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pdEqn.solve();
|
pEqn.solve();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nonOrth == nNonOrthCorr)
|
if (nonOrth == nNonOrthCorr)
|
||||||
{
|
{
|
||||||
// Calculate the conservative fluxes
|
// Calculate the conservative fluxes
|
||||||
phi -= pdEqn.flux();
|
phi -= pEqn.flux();
|
||||||
|
|
||||||
// Explicitly relax pressure for momentum corrector
|
// Explicitly relax pressure for momentum corrector
|
||||||
pd.relax();
|
p.relax();
|
||||||
|
|
||||||
// Correct the momentum source with the pressure gradient flux
|
// Correct the momentum source with the pressure gradient flux
|
||||||
// calculated from the relaxed pressure
|
// calculated from the relaxed pressure
|
||||||
U -= rUA*fvc::reconstruct((buoyancyPhi + pdEqn.flux())/rUAf);
|
U += rUA*fvc::reconstruct((buoyancyPhi - pEqn.flux())/rUAf);
|
||||||
U.correctBoundaryConditions();
|
U.correctBoundaryConditions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,13 +1,13 @@
|
|||||||
singlePhaseTransportModel laminarTransport(U, phi);
|
singlePhaseTransportModel laminarTransport(U, phi);
|
||||||
|
|
||||||
// thermal expansion coefficient [1/K]
|
// Thermal expansion coefficient [1/K]
|
||||||
dimensionedScalar beta(laminarTransport.lookup("beta"));
|
dimensionedScalar beta(laminarTransport.lookup("beta"));
|
||||||
|
|
||||||
// reference temperature [K]
|
// Reference temperature [K]
|
||||||
dimensionedScalar TRef(laminarTransport.lookup("TRef"));
|
dimensionedScalar TRef(laminarTransport.lookup("TRef"));
|
||||||
|
|
||||||
// reference kinematic pressure [m2/s2]
|
// Laminar Prandtl number
|
||||||
dimensionedScalar pRef(laminarTransport.lookup("pRef"));
|
dimensionedScalar Pr(laminarTransport.lookup("Pr"));
|
||||||
|
|
||||||
// turbulent Prandtl number
|
// Turbulent Prandtl number
|
||||||
dimensionedScalar Prt(laminarTransport.lookup("Prt"));
|
dimensionedScalar Prt(laminarTransport.lookup("Prt"));
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
volScalarField rhoEff
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"rhoEff",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
1.0 - beta*(T - TRef)
|
|
||||||
);
|
|
||||||
rhoEff.write();
|
|
||||||
|
|
||||||
volScalarField p
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"p",
|
|
||||||
runTime.timeName(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
),
|
|
||||||
pd + rhoEff*(g & mesh.C()) + pRef
|
|
||||||
);
|
|
||||||
p.write();
|
|
||||||
}
|
|
||||||
@ -65,4 +65,3 @@
|
|||||||
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
dimensionedScalar initialMass = fvc::domainIntegrate(rho);
|
||||||
|
|
||||||
dimensionedScalar totalVolume = sum(mesh.V());
|
dimensionedScalar totalVolume = sum(mesh.V());
|
||||||
|
|
||||||
|
|||||||
@ -41,16 +41,15 @@ Description
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
#include "setRootCase.H"
|
||||||
|
#include "createTime.H"
|
||||||
|
#include "createMesh.H"
|
||||||
|
#include "readEnvironmentalProperties.H"
|
||||||
|
#include "createFields.H"
|
||||||
|
#include "createRadiationModel.H"
|
||||||
|
#include "initContinuityErrs.H"
|
||||||
|
|
||||||
# include "setRootCase.H"
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
# include "createTime.H"
|
|
||||||
# include "createMesh.H"
|
|
||||||
# include "readEnvironmentalProperties.H"
|
|
||||||
# include "createFields.H"
|
|
||||||
# include "createRadiationModel.H"
|
|
||||||
# include "initContinuityErrs.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Info<< "\nStarting time loop\n" << endl;
|
Info<< "\nStarting time loop\n" << endl;
|
||||||
|
|
||||||
@ -58,17 +57,17 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||||
|
|
||||||
# include "readSIMPLEControls.H"
|
#include "readSIMPLEControls.H"
|
||||||
# include "initConvergenceCheck.H"
|
#include "initConvergenceCheck.H"
|
||||||
|
|
||||||
p.storePrevIter();
|
p.storePrevIter();
|
||||||
rho.storePrevIter();
|
rho.storePrevIter();
|
||||||
|
|
||||||
// Pressure-velocity SIMPLE corrector
|
// Pressure-velocity SIMPLE corrector
|
||||||
{
|
{
|
||||||
# include "UEqn.H"
|
#include "UEqn.H"
|
||||||
# include "hEqn.H"
|
#include "hEqn.H"
|
||||||
# include "pEqn.H"
|
#include "pEqn.H"
|
||||||
}
|
}
|
||||||
|
|
||||||
turbulence->correct();
|
turbulence->correct();
|
||||||
@ -79,7 +78,7 @@ int main(int argc, char *argv[])
|
|||||||
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
|
||||||
<< nl << endl;
|
<< nl << endl;
|
||||||
|
|
||||||
# include "convergenceCheck.H"
|
#include "convergenceCheck.H"
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< "End\n" << endl;
|
Info<< "End\n" << endl;
|
||||||
|
|||||||
@ -7,7 +7,8 @@
|
|||||||
runTime.constant(),
|
runTime.constant(),
|
||||||
mesh,
|
mesh,
|
||||||
IOobject::MUST_READ,
|
IOobject::MUST_READ,
|
||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
Info<< "Creating merge patch pairs" << nl << endl;
|
|
||||||
|
|
||||||
if (mergePatchPairs.size())
|
if (mergePatchPairs.size())
|
||||||
{
|
{
|
||||||
|
Info<< "Creating merge patch pairs" << nl << endl;
|
||||||
|
|
||||||
// Create and add point and face zones and mesh modifiers
|
// Create and add point and face zones and mesh modifiers
|
||||||
List<pointZone*> pz(mergePatchPairs.size());
|
List<pointZone*> pz(mergePatchPairs.size());
|
||||||
List<faceZone*> fz(3*mergePatchPairs.size());
|
List<faceZone*> fz(3*mergePatchPairs.size());
|
||||||
|
|||||||
@ -26,12 +26,31 @@ action new;
|
|||||||
|
|
||||||
topoSetSources
|
topoSetSources
|
||||||
(
|
(
|
||||||
|
// Select by explicitly providing cell labels
|
||||||
|
labelToCell
|
||||||
|
{
|
||||||
|
value (12 13 56); // labels of cells
|
||||||
|
}
|
||||||
|
|
||||||
// Copy elements from cellSet
|
// Copy elements from cellSet
|
||||||
cellToCell
|
cellToCell
|
||||||
{
|
{
|
||||||
set c1;
|
set c1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cells in cell zone
|
||||||
|
zoneToCell
|
||||||
|
{
|
||||||
|
name ".*Zone"; // Name of cellZone, regular expressions allowed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cells on master or slave side of faceZone
|
||||||
|
faceZoneToCell
|
||||||
|
{
|
||||||
|
name ".*Zone"; // Name of faceZone, regular expressions allowed
|
||||||
|
option master; // master/slave
|
||||||
|
}
|
||||||
|
|
||||||
// Select based on faceSet
|
// Select based on faceSet
|
||||||
faceToCell
|
faceToCell
|
||||||
{
|
{
|
||||||
@ -51,12 +70,6 @@ topoSetSources
|
|||||||
//option all; // cell with all points in pointSet
|
//option all; // cell with all points in pointSet
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select by explicitly providing cell labels
|
|
||||||
labelToCell
|
|
||||||
{
|
|
||||||
value (12 13 56); // labels of cells
|
|
||||||
}
|
|
||||||
|
|
||||||
// Select based on cellShape
|
// Select based on cellShape
|
||||||
shapeToCell
|
shapeToCell
|
||||||
{
|
{
|
||||||
@ -87,7 +100,6 @@ topoSetSources
|
|||||||
radius 5.0;
|
radius 5.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Cells with centre within sphere
|
// Cells with centre within sphere
|
||||||
sphereToCell
|
sphereToCell
|
||||||
{
|
{
|
||||||
@ -95,20 +107,6 @@ topoSetSources
|
|||||||
radius 5.0;
|
radius 5.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cells in cell zone
|
|
||||||
zoneToCell
|
|
||||||
{
|
|
||||||
name ".*Zone"; // Name of cellZone, regular expressions allowed
|
|
||||||
}
|
|
||||||
|
|
||||||
// values of field within certain range
|
|
||||||
fieldToCell
|
|
||||||
{
|
|
||||||
fieldName U; // Note: uses mag(U) since volVectorField
|
|
||||||
min 0.1;
|
|
||||||
max 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cells with cellCentre nearest to coordinates
|
// Cells with cellCentre nearest to coordinates
|
||||||
nearestToCell
|
nearestToCell
|
||||||
{
|
{
|
||||||
@ -129,6 +127,22 @@ topoSetSources
|
|||||||
// and near surf curvature
|
// and near surf curvature
|
||||||
// (set to -100 if not used)
|
// (set to -100 if not used)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// values of field within certain range
|
||||||
|
fieldToCell
|
||||||
|
{
|
||||||
|
fieldName U; // Note: uses mag(U) since volVectorField
|
||||||
|
min 0.1;
|
||||||
|
max 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mesh region (non-face connected part of (subset of)mesh)
|
||||||
|
regionToCell
|
||||||
|
{
|
||||||
|
set c0; // name of cellSet giving mesh subset
|
||||||
|
insidePoint (1 2 3); // point inside region to select
|
||||||
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,31 @@
|
|||||||
#include "pointSet.H"
|
#include "pointSet.H"
|
||||||
#include "IOmanip.H"
|
#include "IOmanip.H"
|
||||||
|
|
||||||
|
bool Foam::checkSync(const wordList& names)
|
||||||
|
{
|
||||||
|
List<wordList> allNames(Pstream::nProcs());
|
||||||
|
allNames[Pstream::myProcNo()] = names;
|
||||||
|
Pstream::gatherList(allNames);
|
||||||
|
|
||||||
|
bool hasError = false;
|
||||||
|
|
||||||
|
for (label procI = 1; procI < allNames.size(); procI++)
|
||||||
|
{
|
||||||
|
if (allNames[procI] != allNames[0])
|
||||||
|
{
|
||||||
|
hasError = true;
|
||||||
|
|
||||||
|
Info<< " ***Inconsistent zones across processors, "
|
||||||
|
"processor 0 has zones:" << allNames[0]
|
||||||
|
<< ", processor " << procI << " has zones:"
|
||||||
|
<< allNames[procI]
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hasError;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::label Foam::checkTopology
|
Foam::label Foam::checkTopology
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
@ -24,6 +49,31 @@ Foam::label Foam::checkTopology
|
|||||||
// Check if the boundary processor patches are correct
|
// Check if the boundary processor patches are correct
|
||||||
mesh.boundaryMesh().checkParallelSync(true);
|
mesh.boundaryMesh().checkParallelSync(true);
|
||||||
|
|
||||||
|
// Check names of zones are equal
|
||||||
|
if (checkSync(mesh.cellZones().names()))
|
||||||
|
{
|
||||||
|
noFailedChecks++;
|
||||||
|
}
|
||||||
|
if (checkSync(mesh.faceZones().names()))
|
||||||
|
{
|
||||||
|
noFailedChecks++;
|
||||||
|
}
|
||||||
|
if (checkSync(mesh.pointZones().names()))
|
||||||
|
{
|
||||||
|
noFailedChecks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check contents of faceZones consistent
|
||||||
|
{
|
||||||
|
forAll(mesh.faceZones(), zoneI)
|
||||||
|
{
|
||||||
|
if (mesh.faceZones()[zoneI].checkParallelSync(true))
|
||||||
|
{
|
||||||
|
noFailedChecks++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
pointSet points(mesh, "unusedPoints", mesh.nPoints()/100);
|
pointSet points(mesh, "unusedPoints", mesh.nPoints()/100);
|
||||||
if (mesh.checkPoints(true, &points))
|
if (mesh.checkPoints(true, &points))
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
#include "label.H"
|
#include "label.H"
|
||||||
|
#include "wordList.H"
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
class polyMesh;
|
class polyMesh;
|
||||||
|
|
||||||
|
bool checkSync(const wordList& names);
|
||||||
|
|
||||||
label checkTopology(const polyMesh&, const bool, const bool);
|
label checkTopology(const polyMesh&, const bool, const bool);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,13 +69,13 @@ void Foam::printMeshStats(const polyMesh& mesh, const bool allTopology)
|
|||||||
<< " cells: "
|
<< " cells: "
|
||||||
<< returnReduce(mesh.cells().size(), sumOp<label>()) << nl
|
<< returnReduce(mesh.cells().size(), sumOp<label>()) << nl
|
||||||
<< " boundary patches: "
|
<< " boundary patches: "
|
||||||
<< returnReduce(mesh.boundaryMesh().size(), sumOp<label>()) << nl
|
<< mesh.boundaryMesh().size() << nl
|
||||||
<< " point zones: "
|
<< " point zones: "
|
||||||
<< returnReduce(mesh.pointZones().size(), sumOp<label>()) << nl
|
<< mesh.pointZones().size() << nl
|
||||||
<< " face zones: "
|
<< " face zones: "
|
||||||
<< returnReduce(mesh.faceZones().size(), sumOp<label>()) << nl
|
<< mesh.faceZones().size() << nl
|
||||||
<< " cell zones: "
|
<< " cell zones: "
|
||||||
<< returnReduce(mesh.cellZones().size(), sumOp<label>()) << nl
|
<< mesh.cellZones().size() << nl
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -43,16 +43,89 @@ Description
|
|||||||
#include "ReadFields.H"
|
#include "ReadFields.H"
|
||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
|
#include "ZoneIDs.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void modifyOrAddFace
|
||||||
|
(
|
||||||
|
polyTopoChange& meshMod,
|
||||||
|
const face& f,
|
||||||
|
const label faceI,
|
||||||
|
const label own,
|
||||||
|
const bool flipFaceFlux,
|
||||||
|
const label newPatchI,
|
||||||
|
const label zoneID,
|
||||||
|
const bool zoneFlip,
|
||||||
|
|
||||||
|
PackedBoolList& modifiedFace
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (!modifiedFace[faceI])
|
||||||
|
{
|
||||||
|
// First usage of face. Modify.
|
||||||
|
meshMod.setAction
|
||||||
|
(
|
||||||
|
polyModifyFace
|
||||||
|
(
|
||||||
|
f, // modified face
|
||||||
|
faceI, // label of face
|
||||||
|
own, // owner
|
||||||
|
-1, // neighbour
|
||||||
|
flipFaceFlux, // face flip
|
||||||
|
newPatchI, // patch for face
|
||||||
|
false, // remove from zone
|
||||||
|
zoneID, // zone for face
|
||||||
|
zoneFlip // face flip in zone
|
||||||
|
)
|
||||||
|
);
|
||||||
|
modifiedFace[faceI] = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Second or more usage of face. Add.
|
||||||
|
meshMod.setAction
|
||||||
|
(
|
||||||
|
polyAddFace
|
||||||
|
(
|
||||||
|
f, // modified face
|
||||||
|
own, // owner
|
||||||
|
-1, // neighbour
|
||||||
|
-1, // master point
|
||||||
|
-1, // master edge
|
||||||
|
faceI, // master face
|
||||||
|
flipFaceFlux, // face flip
|
||||||
|
newPatchI, // patch for face
|
||||||
|
zoneID, // zone for face
|
||||||
|
zoneFlip // face flip in zone
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
label findPatchID(const polyMesh& mesh, const word& name)
|
||||||
|
{
|
||||||
|
label patchI = mesh.boundaryMesh().findPatchID(name);
|
||||||
|
|
||||||
|
if (patchI == -1)
|
||||||
|
{
|
||||||
|
FatalErrorIn("findPatchID(const polyMesh&, const word&)")
|
||||||
|
<< "Cannot find patch " << name << endl
|
||||||
|
<< "Valid patches are " << mesh.boundaryMesh().names()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
return patchI;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Main program:
|
// Main program:
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
argList::validArgs.append("set");
|
argList::validArgs.append("faceZone");
|
||||||
argList::validArgs.append("patch");
|
argList::validArgs.append("patch");
|
||||||
argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)");
|
argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)");
|
||||||
argList::validOptions.insert("overwrite", "");
|
argList::validOptions.insert("overwrite", "");
|
||||||
@ -67,30 +140,28 @@ int main(int argc, char *argv[])
|
|||||||
const faceZoneMesh& faceZones = mesh.faceZones();
|
const faceZoneMesh& faceZones = mesh.faceZones();
|
||||||
|
|
||||||
// Faces to baffle
|
// Faces to baffle
|
||||||
word setName(args.additionalArgs()[0]);
|
faceZoneID zoneID(args.additionalArgs()[0], faceZones);
|
||||||
Info<< "Reading faceSet from " << setName << nl << endl;
|
|
||||||
faceSet facesToSplit(mesh, setName);
|
|
||||||
// Make sure set is synchronised across couples
|
|
||||||
facesToSplit.sync(mesh);
|
|
||||||
Info<< "Read " << returnReduce(facesToSplit.size(), sumOp<label>())
|
|
||||||
<< " faces from " << setName << nl << endl;
|
|
||||||
|
|
||||||
|
Info<< "Converting faces on zone " << zoneID.name()
|
||||||
|
<< " into baffles." << nl << endl;
|
||||||
|
|
||||||
|
const faceZone& fZone = faceZones[zoneID.index()];
|
||||||
|
|
||||||
|
Info<< "Found " << returnReduce(fZone.size(), sumOp<label>())
|
||||||
|
<< " faces on zone " << zoneID.name() << nl << endl;
|
||||||
|
|
||||||
|
// Make sure patches and zoneFaces are synchronised across couples
|
||||||
|
patches.checkParallelSync(true);
|
||||||
|
fZone.checkParallelSync(true);
|
||||||
|
|
||||||
// Patches to put baffles into
|
// Patches to put baffles into
|
||||||
DynamicList<label> newPatches(1);
|
DynamicList<label> newPatches(1);
|
||||||
|
|
||||||
word patchName(args.additionalArgs()[1]);
|
word patchName(args.additionalArgs()[1]);
|
||||||
newPatches.append(patches.findPatchID(patchName));
|
newPatches.append(findPatchID(mesh, patchName));
|
||||||
Pout<< "Using patch " << patchName
|
Info<< "Using patch " << patchName
|
||||||
<< " at index " << newPatches[0] << endl;
|
<< " at index " << newPatches[0] << endl;
|
||||||
|
|
||||||
if (newPatches[0] == -1)
|
|
||||||
{
|
|
||||||
FatalErrorIn(args.executable())
|
|
||||||
<< "Cannot find patch " << patchName << endl
|
|
||||||
<< "Valid patches are " << patches.names() << exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Additional patches
|
// Additional patches
|
||||||
if (args.optionFound("additionalPatches"))
|
if (args.optionFound("additionalPatches"))
|
||||||
@ -103,19 +174,9 @@ int main(int argc, char *argv[])
|
|||||||
newPatches.reserve(patchNames.size() + 1);
|
newPatches.reserve(patchNames.size() + 1);
|
||||||
forAll(patchNames, i)
|
forAll(patchNames, i)
|
||||||
{
|
{
|
||||||
label patchI = patches.findPatchID(patchNames[i]);
|
newPatches.append(findPatchID(mesh, patchNames[i]));
|
||||||
Info<< "Using additional patch " << patchNames[i]
|
Info<< "Using additional patch " << patchNames[i]
|
||||||
<< " at index " << patchI << endl;
|
<< " at index " << newPatches[newPatches.size()-1] << endl;
|
||||||
|
|
||||||
if (patchI == -1)
|
|
||||||
{
|
|
||||||
FatalErrorIn(args.executable())
|
|
||||||
<< "Cannot find patch " << patchNames[i] << endl
|
|
||||||
<< "Valid patches are " << patches.names()
|
|
||||||
<< exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
newPatches.append(patchI);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,111 +227,112 @@ int main(int argc, char *argv[])
|
|||||||
polyTopoChange meshMod(mesh);
|
polyTopoChange meshMod(mesh);
|
||||||
|
|
||||||
|
|
||||||
// Do the actual changes
|
// Do the actual changes. Note:
|
||||||
// Note order in which faces are modified/added is so they end up correctly
|
// - loop in incrementing face order (not necessary if faceZone ordered).
|
||||||
// for cyclic patches (original faces first and then reversed faces)
|
// Preserves any existing ordering on patch faces.
|
||||||
// since otherwise it will have trouble matching baffles.
|
// - two passes, do non-flip faces first and flip faces second. This
|
||||||
|
// guarantees that when e.g. creating a cyclic all faces from one
|
||||||
|
// side come first and faces from the other side next.
|
||||||
|
|
||||||
label nBaffled = 0;
|
PackedBoolList modifiedFace(mesh.nFaces());
|
||||||
|
|
||||||
forAll(newPatches, i)
|
forAll(newPatches, i)
|
||||||
{
|
{
|
||||||
label newPatchI = newPatches[i];
|
label newPatchI = newPatches[i];
|
||||||
|
|
||||||
|
// Pass 1. Do selected side of zone
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
||||||
{
|
{
|
||||||
if (facesToSplit.found(faceI))
|
label zoneFaceI = fZone.whichFace(faceI);
|
||||||
{
|
|
||||||
const face& f = mesh.faces()[faceI];
|
|
||||||
label zoneID = faceZones.whichZone(faceI);
|
|
||||||
bool zoneFlip = false;
|
|
||||||
if (zoneID >= 0)
|
|
||||||
{
|
|
||||||
const faceZone& fZone = faceZones[zoneID];
|
|
||||||
zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == 0)
|
if (zoneFaceI != -1)
|
||||||
|
{
|
||||||
|
if (!fZone.flipMap()[zoneFaceI])
|
||||||
{
|
{
|
||||||
// First usage of face. Modify.
|
// Use owner side of face
|
||||||
meshMod.setAction
|
modifyOrAddFace
|
||||||
(
|
(
|
||||||
polyModifyFace
|
meshMod,
|
||||||
(
|
mesh.faces()[faceI], // modified face
|
||||||
f, // modified face
|
faceI, // label of face
|
||||||
faceI, // label of face
|
mesh.faceOwner()[faceI],// owner
|
||||||
mesh.faceOwner()[faceI], // owner
|
false, // face flip
|
||||||
-1, // neighbour
|
newPatchI, // patch for face
|
||||||
false, // face flip
|
zoneID.index(), // zone for face
|
||||||
newPatchI, // patch for face
|
false, // face flip in zone
|
||||||
false, // remove from zone
|
modifiedFace // modify or add status
|
||||||
zoneID, // zone for face
|
|
||||||
zoneFlip // face flip in zone
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Second or more usage of face. Add.
|
// Use neighbour side of face
|
||||||
meshMod.setAction
|
modifyOrAddFace
|
||||||
(
|
(
|
||||||
polyAddFace
|
meshMod,
|
||||||
(
|
mesh.faces()[faceI].reverseFace(), // modified face
|
||||||
f, // modified face
|
faceI, // label of face
|
||||||
mesh.faceOwner()[faceI], // owner
|
mesh.faceNeighbour()[faceI],// owner
|
||||||
-1, // neighbour
|
|
||||||
-1, // master point
|
|
||||||
-1, // master edge
|
|
||||||
faceI, // master face
|
|
||||||
false, // face flip
|
|
||||||
newPatchI, // patch for face
|
|
||||||
zoneID, // zone for face
|
|
||||||
zoneFlip // face flip in zone
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
nBaffled++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the reversed face.
|
|
||||||
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
|
||||||
{
|
|
||||||
if (facesToSplit.found(faceI))
|
|
||||||
{
|
|
||||||
const face& f = mesh.faces()[faceI];
|
|
||||||
label zoneID = faceZones.whichZone(faceI);
|
|
||||||
bool zoneFlip = false;
|
|
||||||
if (zoneID >= 0)
|
|
||||||
{
|
|
||||||
const faceZone& fZone = faceZones[zoneID];
|
|
||||||
zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)];
|
|
||||||
}
|
|
||||||
label nei = mesh.faceNeighbour()[faceI];
|
|
||||||
|
|
||||||
meshMod.setAction
|
|
||||||
(
|
|
||||||
polyAddFace
|
|
||||||
(
|
|
||||||
f.reverseFace(), // modified face
|
|
||||||
nei, // owner
|
|
||||||
-1, // neighbour
|
|
||||||
-1, // masterPointID
|
|
||||||
-1, // masterEdgeID
|
|
||||||
faceI, // masterFaceID,
|
|
||||||
true, // face flip
|
true, // face flip
|
||||||
newPatchI, // patch for face
|
newPatchI, // patch for face
|
||||||
zoneID, // zone for face
|
zoneID.index(), // zone for face
|
||||||
zoneFlip // face flip in zone
|
true, // face flip in zone
|
||||||
)
|
modifiedFace // modify or add status
|
||||||
);
|
);
|
||||||
|
}
|
||||||
nBaffled++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Pass 2. Do other side of zone
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++)
|
||||||
|
{
|
||||||
|
label zoneFaceI = fZone.whichFace(faceI);
|
||||||
|
|
||||||
|
if (zoneFaceI != -1)
|
||||||
|
{
|
||||||
|
if (!fZone.flipMap()[zoneFaceI])
|
||||||
|
{
|
||||||
|
// Use neighbour side of face
|
||||||
|
modifyOrAddFace
|
||||||
|
(
|
||||||
|
meshMod,
|
||||||
|
mesh.faces()[faceI].reverseFace(), // modified face
|
||||||
|
faceI, // label of face
|
||||||
|
mesh.faceNeighbour()[faceI], // owner
|
||||||
|
true, // face flip
|
||||||
|
newPatchI, // patch for face
|
||||||
|
zoneID.index(), // zone for face
|
||||||
|
true, // face flip in zone
|
||||||
|
modifiedFace // modify or add
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Use owner side of face
|
||||||
|
modifyOrAddFace
|
||||||
|
(
|
||||||
|
meshMod,
|
||||||
|
mesh.faces()[faceI], // modified face
|
||||||
|
faceI, // label of face
|
||||||
|
mesh.faceOwner()[faceI],// owner
|
||||||
|
false, // face flip
|
||||||
|
newPatchI, // patch for face
|
||||||
|
zoneID.index(), // zone for face
|
||||||
|
false, // face flip in zone
|
||||||
|
modifiedFace // modify or add status
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Modify any boundary faces
|
// Modify any boundary faces
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
forAll(patches, patchI)
|
forAll(patches, patchI)
|
||||||
{
|
{
|
||||||
const polyPatch& pp = patches[patchI];
|
const polyPatch& pp = patches[patchI];
|
||||||
@ -286,58 +348,22 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
label faceI = pp.start()+i;
|
label faceI = pp.start()+i;
|
||||||
|
|
||||||
if (facesToSplit.found(faceI))
|
label zoneFaceI = fZone.whichFace(faceI);
|
||||||
|
|
||||||
|
if (zoneFaceI != -1)
|
||||||
{
|
{
|
||||||
const face& f = mesh.faces()[faceI];
|
modifyOrAddFace
|
||||||
label zoneID = faceZones.whichZone(faceI);
|
(
|
||||||
bool zoneFlip = false;
|
meshMod,
|
||||||
if (zoneID >= 0)
|
mesh.faces()[faceI], // modified face
|
||||||
{
|
faceI, // label of face
|
||||||
const faceZone& fZone = faceZones[zoneID];
|
mesh.faceOwner()[faceI], // owner
|
||||||
zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)];
|
false, // face flip
|
||||||
}
|
newPatchI, // patch for face
|
||||||
|
zoneID.index(), // zone for face
|
||||||
if (i == 0)
|
fZone.flipMap()[zoneFaceI], // face flip in zone
|
||||||
{
|
modifiedFace // modify or add status
|
||||||
// First usage of face. Modify.
|
);
|
||||||
meshMod.setAction
|
|
||||||
(
|
|
||||||
polyModifyFace
|
|
||||||
(
|
|
||||||
f, // modified face
|
|
||||||
faceI, // label of face
|
|
||||||
mesh.faceOwner()[faceI],// owner
|
|
||||||
-1, // neighbour
|
|
||||||
false, // face flip
|
|
||||||
newPatchI, // patch for face
|
|
||||||
false, // remove from zone
|
|
||||||
zoneID, // zone for face
|
|
||||||
zoneFlip // face flip in zone
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Second or more usage of face. Add.
|
|
||||||
meshMod.setAction
|
|
||||||
(
|
|
||||||
polyAddFace
|
|
||||||
(
|
|
||||||
f, // modified face
|
|
||||||
mesh.faceOwner()[faceI],// owner
|
|
||||||
-1, // neighbour
|
|
||||||
-1, // master point
|
|
||||||
-1, // master edge
|
|
||||||
faceI, // master face
|
|
||||||
false, // face flip
|
|
||||||
newPatchI, // patch for face
|
|
||||||
zoneID, // zone for face
|
|
||||||
zoneFlip // face flip in zone
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
nBaffled++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -345,7 +371,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Info<< "Converted " << returnReduce(nBaffled, sumOp<label>())
|
Info<< "Converted " << returnReduce(modifiedFace.count(), sumOp<label>())
|
||||||
<< " faces into boundary faces on patch " << patchName << nl << endl;
|
<< " faces into boundary faces on patch " << patchName << nl << endl;
|
||||||
|
|
||||||
if (!overwrite)
|
if (!overwrite)
|
||||||
|
|||||||
@ -51,18 +51,24 @@ topoSetSources
|
|||||||
value (12 13 56); // labels of points
|
value (12 13 56); // labels of points
|
||||||
}
|
}
|
||||||
|
|
||||||
// Points with coordinate within box
|
|
||||||
boxToPoint
|
|
||||||
{
|
|
||||||
box (0 0 0) (1 1 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// All points in pointzone
|
// All points in pointzone
|
||||||
zoneToPoint
|
zoneToPoint
|
||||||
{
|
{
|
||||||
name ".*Zone"; // name of pointZone, regular expressions allowed
|
name ".*Zone"; // name of pointZone, regular expressions allowed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Points nearest to coordinates
|
||||||
|
nearestToPoint
|
||||||
|
{
|
||||||
|
points ((0 0 0) (1 1 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Points with coordinate within box
|
||||||
|
boxToPoint
|
||||||
|
{
|
||||||
|
box (0 0 0) (1 1 1);
|
||||||
|
}
|
||||||
|
|
||||||
// Select based on surface
|
// Select based on surface
|
||||||
surfaceToPoint
|
surfaceToPoint
|
||||||
{
|
{
|
||||||
|
|||||||
@ -367,7 +367,7 @@ bool doCommand
|
|||||||
{
|
{
|
||||||
r = IOobject::NO_READ;
|
r = IOobject::NO_READ;
|
||||||
|
|
||||||
backup(mesh, setName, setName + "_old");
|
//backup(mesh, setName, setName + "_old");
|
||||||
|
|
||||||
currentSetPtr = topoSet::New(setType, mesh, setName, typSize);
|
currentSetPtr = topoSet::New(setType, mesh, setName, typSize);
|
||||||
}
|
}
|
||||||
@ -399,11 +399,11 @@ bool doCommand
|
|||||||
<< " Action:" << actionName
|
<< " Action:" << actionName
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
|
//if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST))
|
||||||
{
|
//{
|
||||||
// currentSet has been read so can make copy.
|
// // currentSet has been read so can make copy.
|
||||||
backup(mesh, setName, currentSet, setName + "_old");
|
// backup(mesh, setName, currentSet, setName + "_old");
|
||||||
}
|
//}
|
||||||
|
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
@ -558,7 +558,8 @@ void printMesh(const Time& runTime, const polyMesh& mesh)
|
|||||||
<< " cells:" << mesh.nCells()
|
<< " cells:" << mesh.nCells()
|
||||||
<< " faces:" << mesh.nFaces()
|
<< " faces:" << mesh.nFaces()
|
||||||
<< " points:" << mesh.nPoints()
|
<< " points:" << mesh.nPoints()
|
||||||
<< " patches:" << mesh.boundaryMesh().size() << nl;
|
<< " patches:" << mesh.boundaryMesh().size()
|
||||||
|
<< " bb:" << mesh.bounds() << nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -28,8 +28,8 @@ Description
|
|||||||
|
|
||||||
There is one catch: for faceZones you also need to specify a flip
|
There is one catch: for faceZones you also need to specify a flip
|
||||||
condition which basically denotes the side of the face. In this app
|
condition which basically denotes the side of the face. In this app
|
||||||
it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) and
|
it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) which
|
||||||
any face whose neighbour is in the cellSet gets a flip=true.
|
is the masterCells of the zone.
|
||||||
There are lots of situations in which this will go wrong but it is the
|
There are lots of situations in which this will go wrong but it is the
|
||||||
best I can think of for now.
|
best I can think of for now.
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ int main(int argc, char *argv[])
|
|||||||
polyMesh::meshSubDir/"sets"
|
polyMesh::meshSubDir/"sets"
|
||||||
);
|
);
|
||||||
|
|
||||||
Pout<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets"
|
Info<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets"
|
||||||
<< nl
|
<< nl
|
||||||
<< "Found : " << objects.names() << nl
|
<< "Found : " << objects.names() << nl
|
||||||
<< endl;
|
<< endl;
|
||||||
@ -95,7 +95,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
IOobjectList pointObjects(objects.lookupClass(pointSet::typeName));
|
IOobjectList pointObjects(objects.lookupClass(pointSet::typeName));
|
||||||
|
|
||||||
Pout<< "pointSets:" << pointObjects.names() << endl;
|
//Pout<< "pointSets:" << pointObjects.names() << endl;
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
@ -126,6 +126,7 @@ int main(int argc, char *argv[])
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
|
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.pointZones().instance() = mesh.facesInstance();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -133,57 +134,17 @@ int main(int argc, char *argv[])
|
|||||||
<< " with that of set " << set.name() << "." << endl;
|
<< " with that of set " << set.name() << "." << endl;
|
||||||
mesh.pointZones()[zoneID] = pointLabels;
|
mesh.pointZones()[zoneID] = pointLabels;
|
||||||
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
|
mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.pointZones().instance() = mesh.facesInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IOobjectList cellObjects(objects.lookupClass(cellSet::typeName));
|
|
||||||
|
|
||||||
Pout<< "cellSets:" << cellObjects.names() << endl;
|
|
||||||
|
|
||||||
for
|
|
||||||
(
|
|
||||||
IOobjectList::const_iterator iter = cellObjects.begin();
|
|
||||||
iter != cellObjects.end();
|
|
||||||
++iter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
// Not in memory. Load it.
|
|
||||||
cellSet set(*iter());
|
|
||||||
SortableList<label> cellLabels(set.toc());
|
|
||||||
|
|
||||||
label zoneID = mesh.cellZones().findZoneID(set.name());
|
|
||||||
if (zoneID == -1)
|
|
||||||
{
|
|
||||||
Info<< "Adding set " << set.name() << " as a cellZone." << endl;
|
|
||||||
label sz = mesh.cellZones().size();
|
|
||||||
mesh.cellZones().setSize(sz+1);
|
|
||||||
mesh.cellZones().set
|
|
||||||
(
|
|
||||||
sz,
|
|
||||||
new cellZone
|
|
||||||
(
|
|
||||||
set.name(), //name
|
|
||||||
cellLabels, //addressing
|
|
||||||
sz, //index
|
|
||||||
mesh.cellZones() //pointZoneMesh
|
|
||||||
)
|
|
||||||
);
|
|
||||||
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Info<< "Overwriting contents of existing cellZone " << zoneID
|
|
||||||
<< " with that of set " << set.name() << "." << endl;
|
|
||||||
mesh.cellZones()[zoneID] = cellLabels;
|
|
||||||
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
IOobjectList faceObjects(objects.lookupClass(faceSet::typeName));
|
IOobjectList faceObjects(objects.lookupClass(faceSet::typeName));
|
||||||
|
|
||||||
Pout<< "faceSets:" << faceObjects.names() << endl;
|
HashSet<word> slaveCellSets;
|
||||||
|
|
||||||
|
//Pout<< "faceSets:" << faceObjects.names() << endl;
|
||||||
|
|
||||||
for
|
for
|
||||||
(
|
(
|
||||||
@ -201,14 +162,11 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (!noFlipMap)
|
if (!noFlipMap)
|
||||||
{
|
{
|
||||||
word setName(set.name() + "Cells");
|
word setName(set.name() + "SlaveCells");
|
||||||
|
|
||||||
Pout<< "Trying to load cellSet " << setName
|
Info<< "Trying to load cellSet " << setName
|
||||||
<< " to find out the flipMap." << nl
|
<< " to find out the slave side of the zone." << nl
|
||||||
<< "If the neighbour side of the face is in the cellSet"
|
<< "If you do not care about the flipMap"
|
||||||
<< " the flipMap becomes true," << nl
|
|
||||||
<< "in all other cases it stays false."
|
|
||||||
<< " If you do not care about the flipMap"
|
|
||||||
<< " (i.e. do not use the sideness)" << nl
|
<< " (i.e. do not use the sideness)" << nl
|
||||||
<< "use the -noFlipMap command line option."
|
<< "use the -noFlipMap command line option."
|
||||||
<< endl;
|
<< endl;
|
||||||
@ -216,6 +174,9 @@ int main(int argc, char *argv[])
|
|||||||
// Load corresponding cells
|
// Load corresponding cells
|
||||||
cellSet cells(mesh, setName);
|
cellSet cells(mesh, setName);
|
||||||
|
|
||||||
|
// Store setName to exclude from cellZones further on
|
||||||
|
slaveCellSets.insert(setName);
|
||||||
|
|
||||||
forAll(faceLabels, i)
|
forAll(faceLabels, i)
|
||||||
{
|
{
|
||||||
label faceI = faceLabels[i];
|
label faceI = faceLabels[i];
|
||||||
@ -302,6 +263,7 @@ int main(int argc, char *argv[])
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
|
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.faceZones().instance() = mesh.facesInstance();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -313,10 +275,63 @@ int main(int argc, char *argv[])
|
|||||||
flipMap.shrink()
|
flipMap.shrink()
|
||||||
);
|
);
|
||||||
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
|
mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.faceZones().instance() = mesh.facesInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pout<< "Writing mesh." << endl;
|
|
||||||
|
|
||||||
|
IOobjectList cellObjects(objects.lookupClass(cellSet::typeName));
|
||||||
|
|
||||||
|
//Pout<< "cellSets:" << cellObjects.names() << endl;
|
||||||
|
|
||||||
|
for
|
||||||
|
(
|
||||||
|
IOobjectList::const_iterator iter = cellObjects.begin();
|
||||||
|
iter != cellObjects.end();
|
||||||
|
++iter
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (!slaveCellSets.found(iter.key()))
|
||||||
|
{
|
||||||
|
// Not in memory. Load it.
|
||||||
|
cellSet set(*iter());
|
||||||
|
SortableList<label> cellLabels(set.toc());
|
||||||
|
|
||||||
|
label zoneID = mesh.cellZones().findZoneID(set.name());
|
||||||
|
if (zoneID == -1)
|
||||||
|
{
|
||||||
|
Info<< "Adding set " << set.name() << " as a cellZone." << endl;
|
||||||
|
label sz = mesh.cellZones().size();
|
||||||
|
mesh.cellZones().setSize(sz+1);
|
||||||
|
mesh.cellZones().set
|
||||||
|
(
|
||||||
|
sz,
|
||||||
|
new cellZone
|
||||||
|
(
|
||||||
|
set.name(), //name
|
||||||
|
cellLabels, //addressing
|
||||||
|
sz, //index
|
||||||
|
mesh.cellZones() //pointZoneMesh
|
||||||
|
)
|
||||||
|
);
|
||||||
|
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.cellZones().instance() = mesh.facesInstance();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Info<< "Overwriting contents of existing cellZone " << zoneID
|
||||||
|
<< " with that of set " << set.name() << "." << endl;
|
||||||
|
mesh.cellZones()[zoneID] = cellLabels;
|
||||||
|
mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE;
|
||||||
|
mesh.cellZones().instance() = mesh.facesInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Info<< "Writing mesh." << endl;
|
||||||
|
|
||||||
if (!mesh.write())
|
if (!mesh.write())
|
||||||
{
|
{
|
||||||
@ -325,7 +340,7 @@ int main(int argc, char *argv[])
|
|||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pout << nl << "End" << endl;
|
Info<< nl << "End" << endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -1,8 +0,0 @@
|
|||||||
latticeStructures = latticeStructures
|
|
||||||
velocityDistributions = velocityDistributions
|
|
||||||
|
|
||||||
createMolecules.C
|
|
||||||
molConfig.C
|
|
||||||
genMolConfig.C
|
|
||||||
|
|
||||||
EXE = $(FOAM_APPBIN)/molConfig
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
EXE_INC = \
|
|
||||||
-I$(latticeStructures) \
|
|
||||||
-I$(velocityDistributions) \
|
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
|
||||||
-I$(LIB_SRC)/lagrangian/molecularDynamics/molecule/lnInclude \
|
|
||||||
-I$(LIB_SRC)/lagrangian/molecularDynamics/potential/lnInclude \
|
|
||||||
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
|
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude
|
|
||||||
|
|
||||||
EXE_LIBS = \
|
|
||||||
-lmeshTools \
|
|
||||||
-ldynamicMesh \
|
|
||||||
-lfiniteVolume \
|
|
||||||
-llagrangian \
|
|
||||||
-lmolecule \
|
|
||||||
-lpotential
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
for (molN = totalMols; molN < totalMols + totalZoneMols; molN++)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Remove bulk momentum introduced by random numbers and add
|
|
||||||
// desired bulk velocity
|
|
||||||
|
|
||||||
// For systems with molecules of significantly differing masses, this may
|
|
||||||
// need to be an iterative process or employ a better algorithm for
|
|
||||||
// removing an appropriate share of the excess momentum from each molecule.
|
|
||||||
|
|
||||||
initialVelocities(molN) += bulkVelocity - momentumSum/totalZoneMols/mass;
|
|
||||||
}
|
|
||||||
|
|
||||||
// momentumSum = vector::zero;
|
|
||||||
//
|
|
||||||
// for (molN = totalMols; molN < totalMols + totalZoneMols; molN++)
|
|
||||||
// {
|
|
||||||
// momentumSum += mass*initialVelocities(molN);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Info << "Check momentum adjustment: " << momentumSum << endl;
|
|
||||||
@ -1,253 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
\*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "molConfig.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
void Foam::molConfig::createMolecules()
|
|
||||||
{
|
|
||||||
Info<< nl << "Creating molecules from zone specifications\n" << endl;
|
|
||||||
|
|
||||||
DynamicList<vector> initialPositions(0);
|
|
||||||
|
|
||||||
DynamicList<label> initialIds(0);
|
|
||||||
|
|
||||||
DynamicList<scalar> initialMasses(0);
|
|
||||||
|
|
||||||
DynamicList<label> initialCelli(0);
|
|
||||||
|
|
||||||
DynamicList<vector> initialVelocities(0);
|
|
||||||
|
|
||||||
DynamicList<vector> initialAccelerations(0);
|
|
||||||
|
|
||||||
DynamicList<label> initialTethered(0);
|
|
||||||
|
|
||||||
DynamicList<vector> initialTetherPositions(0);
|
|
||||||
|
|
||||||
label totalMols = 0;
|
|
||||||
|
|
||||||
label idAssign;
|
|
||||||
|
|
||||||
Random rand(clock::getTime());
|
|
||||||
|
|
||||||
// * * * * * * * * Building the IdList * * * * * * * * * //
|
|
||||||
|
|
||||||
//Notes: - each processor will have an identical idList_.
|
|
||||||
// - The order of id's inside the idList_ depends on the order
|
|
||||||
// of subDicts inside the molConigDict.
|
|
||||||
|
|
||||||
Info<< "Building the idList: " ;
|
|
||||||
|
|
||||||
forAll(molConfigDescription_.toc(), cZs)
|
|
||||||
{
|
|
||||||
word subDictName (molConfigDescription_.toc()[cZs]);
|
|
||||||
|
|
||||||
word iD (molConfigDescription_.subDict(subDictName).lookup("id"));
|
|
||||||
|
|
||||||
if (findIndex(idList_,iD) == -1)
|
|
||||||
{
|
|
||||||
idList_.append(iD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll(idList_, i)
|
|
||||||
{
|
|
||||||
Info << " " << idList_[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
Info << nl << endl;
|
|
||||||
|
|
||||||
// * * * * * * * * Filling the Mesh * * * * * * * * * //
|
|
||||||
|
|
||||||
const cellZoneMesh& cellZoneI = mesh_.cellZones();
|
|
||||||
|
|
||||||
if (cellZoneI.size())
|
|
||||||
{
|
|
||||||
Info<< "Filling the zones with molecules." << nl << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalErrorIn("void createMolecules()\n")
|
|
||||||
<< "No cellZones found in mesh description."
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
forAll (cellZoneI, cZ)
|
|
||||||
{
|
|
||||||
if (cellZoneI[cZ].size())
|
|
||||||
{
|
|
||||||
if (!molConfigDescription_.found(cellZoneI[cZ].name()))
|
|
||||||
{
|
|
||||||
Info << "Zone specification subDictionary: "
|
|
||||||
<< cellZoneI[cZ].name() << " not found." << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
label n = 0;
|
|
||||||
|
|
||||||
label totalZoneMols = 0;
|
|
||||||
|
|
||||||
label molsPlacedThisIteration;
|
|
||||||
|
|
||||||
# include "readZoneSubDict.H"
|
|
||||||
|
|
||||||
idAssign = findIndex(idList_,id);
|
|
||||||
|
|
||||||
# include "startingPoint.H"
|
|
||||||
|
|
||||||
// Continue trying to place molecules as long as at
|
|
||||||
// least one molecule is placed in each iteration.
|
|
||||||
// The "|| totalZoneMols == 0" condition means that the
|
|
||||||
// algorithm will continue if the origin is outside the
|
|
||||||
// zone - it will cause an infinite loop if no molecules
|
|
||||||
// are ever placed by the algorithm.
|
|
||||||
|
|
||||||
if (latticeStructure != "empty")
|
|
||||||
{
|
|
||||||
|
|
||||||
while
|
|
||||||
(
|
|
||||||
molsPlacedThisIteration != 0
|
|
||||||
|| totalZoneMols == 0
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration = 0;
|
|
||||||
|
|
||||||
bool partOfLayerInBounds = false;
|
|
||||||
|
|
||||||
# include "createPositions.H"
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
totalZoneMols == 0
|
|
||||||
&& !partOfLayerInBounds
|
|
||||||
)
|
|
||||||
{
|
|
||||||
WarningIn("molConfig::createMolecules()")
|
|
||||||
<< "A whole layer of unit cells was placed "
|
|
||||||
<< "outside the bounds of the mesh, but no "
|
|
||||||
<< "molecules have been placed in zone '"
|
|
||||||
<< cellZoneI[cZ].name()
|
|
||||||
<< "'. This is likely to be because the zone "
|
|
||||||
<< "has few cells ("
|
|
||||||
<< cellZoneI[cZ].size()
|
|
||||||
<< " in this case) and no lattice position "
|
|
||||||
<< "fell inside them. "
|
|
||||||
<< "Aborting filling this zone."
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
totalZoneMols += molsPlacedThisIteration;
|
|
||||||
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
|
|
||||||
label molN;
|
|
||||||
|
|
||||||
for
|
|
||||||
(
|
|
||||||
molN = totalMols;
|
|
||||||
molN < totalMols + totalZoneMols;
|
|
||||||
molN++
|
|
||||||
)
|
|
||||||
{
|
|
||||||
initialIds.append(idAssign);
|
|
||||||
|
|
||||||
initialMasses.append(mass);
|
|
||||||
|
|
||||||
initialAccelerations.append(vector::zero);
|
|
||||||
|
|
||||||
if (tethered)
|
|
||||||
{
|
|
||||||
initialTethered.append(1);
|
|
||||||
|
|
||||||
initialTetherPositions.append
|
|
||||||
(
|
|
||||||
initialPositions[molN]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
initialTethered.append(0);
|
|
||||||
|
|
||||||
initialTetherPositions.append(vector::zero);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# include "createVelocities.H"
|
|
||||||
|
|
||||||
# include "correctVelocities.H"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
totalMols += totalZoneMols;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
idList_.shrink();
|
|
||||||
|
|
||||||
positions_ = initialPositions;
|
|
||||||
|
|
||||||
positions_.setSize(initialPositions.size());
|
|
||||||
|
|
||||||
id_ = initialIds;
|
|
||||||
|
|
||||||
id_.setSize(initialIds.size());
|
|
||||||
|
|
||||||
mass_ = initialMasses;
|
|
||||||
|
|
||||||
mass_.setSize(initialMasses.size());
|
|
||||||
|
|
||||||
cells_ = initialCelli;
|
|
||||||
|
|
||||||
cells_.setSize(initialCelli.size());
|
|
||||||
|
|
||||||
U_ = initialVelocities;
|
|
||||||
|
|
||||||
U_.setSize(initialVelocities.size());
|
|
||||||
|
|
||||||
A_ = initialAccelerations;
|
|
||||||
|
|
||||||
A_.setSize(initialAccelerations.size());
|
|
||||||
|
|
||||||
tethered_ = initialTethered;
|
|
||||||
|
|
||||||
tethered_.setSize(initialTethered.size());
|
|
||||||
|
|
||||||
tetherPositions_ = initialTetherPositions;
|
|
||||||
|
|
||||||
tetherPositions_.setSize(initialTetherPositions.size());
|
|
||||||
|
|
||||||
nMol_ = totalMols;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
vector latticePosition;
|
|
||||||
|
|
||||||
vector globalPosition;
|
|
||||||
|
|
||||||
if (latticeStructure == "SC")
|
|
||||||
{
|
|
||||||
# include "SC.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (latticeStructure == "FCC")
|
|
||||||
{
|
|
||||||
# include "FCC.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (latticeStructure == "BCC")
|
|
||||||
{
|
|
||||||
# include "BCC.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalErrorIn("createPositions.H\n")
|
|
||||||
<< "latticeStructure " << latticeStructure
|
|
||||||
<< " not supported."
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
vector velocity;
|
|
||||||
|
|
||||||
vector momentumSum = vector::zero;
|
|
||||||
|
|
||||||
if (velocityDistribution == "uniform")
|
|
||||||
{
|
|
||||||
# include "uniform.H"
|
|
||||||
}
|
|
||||||
|
|
||||||
if (velocityDistribution == "maxwellian")
|
|
||||||
{
|
|
||||||
# include "maxwellian.H"
|
|
||||||
}
|
|
||||||
@ -1,129 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "molConfig.H"
|
|
||||||
#include "fvCFD.H"
|
|
||||||
|
|
||||||
using namespace Foam;
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
// Main program:
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
# include "setRootCase.H"
|
|
||||||
# include "createTime.H"
|
|
||||||
# include "createMesh.H"
|
|
||||||
|
|
||||||
Info<< nl << "Reading molecular configuration description dictionary"
|
|
||||||
<< endl;
|
|
||||||
|
|
||||||
IOobject molConfigDescriptionIOobject
|
|
||||||
(
|
|
||||||
"molConfigDict",
|
|
||||||
runTime.system(),
|
|
||||||
runTime,
|
|
||||||
IOobject::MUST_READ,
|
|
||||||
IOobject::NO_WRITE,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!molConfigDescriptionIOobject.headerOk())
|
|
||||||
{
|
|
||||||
FatalErrorIn(args.executable())
|
|
||||||
<< "Cannot find molConfig description file " << nl
|
|
||||||
<< args.caseName()/runTime.system()/"molConfig"/"molConfigDict"
|
|
||||||
<< nl << exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
IOdictionary molConfigDescription(molConfigDescriptionIOobject);
|
|
||||||
|
|
||||||
|
|
||||||
// Create molCloud, registering object with mesh
|
|
||||||
|
|
||||||
Info<< nl << "Creating molecular configuration" << endl;
|
|
||||||
|
|
||||||
molConfig molecules(molConfigDescription, mesh);
|
|
||||||
|
|
||||||
label totalMolecules = molecules.nMol();
|
|
||||||
|
|
||||||
if (Pstream::parRun())
|
|
||||||
{
|
|
||||||
reduce(totalMolecules, sumOp<label>());
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< nl << "Total number of molecules added: " << totalMolecules
|
|
||||||
<< nl << endl;
|
|
||||||
|
|
||||||
moleculeCloud molCloud
|
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
molecules.nMol(),
|
|
||||||
molecules.id(),
|
|
||||||
molecules.mass(),
|
|
||||||
molecules.positions(),
|
|
||||||
molecules.cells(),
|
|
||||||
molecules.U(),
|
|
||||||
molecules.A(),
|
|
||||||
molecules.tethered(),
|
|
||||||
molecules.tetherPositions()
|
|
||||||
);
|
|
||||||
|
|
||||||
IOdictionary idListDict
|
|
||||||
(
|
|
||||||
IOobject
|
|
||||||
(
|
|
||||||
"idList",
|
|
||||||
mesh.time().constant(),
|
|
||||||
mesh,
|
|
||||||
IOobject::NO_READ,
|
|
||||||
IOobject::AUTO_WRITE
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
idListDict.add("idList", molecules.molIdList());
|
|
||||||
|
|
||||||
IOstream::defaultPrecision(12);
|
|
||||||
|
|
||||||
Info << nl << "Writing molecular configuration" << endl;
|
|
||||||
|
|
||||||
if (!mesh.write())
|
|
||||||
{
|
|
||||||
FatalErrorIn(args.executable())
|
|
||||||
<< "Failed writing moleculeCloud."
|
|
||||||
<< nl << exit(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
Info<< nl << "ClockTime = " << runTime.elapsedClockTime() << " s"
|
|
||||||
<< nl << endl;
|
|
||||||
|
|
||||||
Info << nl << "End\n" << endl;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,179 +0,0 @@
|
|||||||
labelVector iN(0,0,0);
|
|
||||||
|
|
||||||
vector gap = (vector::one)*pow((numberDensity/2.0),-(1.0/3.0));
|
|
||||||
|
|
||||||
#include "origin.H"
|
|
||||||
|
|
||||||
// Info<< "gap = " << gap << endl;
|
|
||||||
|
|
||||||
// Special treatment is required for the first position, i.e. iteration zero.
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x()*gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y()*gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z()*gap.z());
|
|
||||||
|
|
||||||
// Placing 2 molecules in each unit cell, using the algorithm from
|
|
||||||
// D. Rapaport, The Art of Molecular Dynamics Simulation, 2nd Ed, p68
|
|
||||||
|
|
||||||
for (label iU = 0; iU < 2; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU == 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition += 0.5 * gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info << nl << n << ", " << unitCellLatticePosition;
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin + transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds = mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition))
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Place top and bottom caps.
|
|
||||||
|
|
||||||
for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n)
|
|
||||||
{
|
|
||||||
for (iN.y() = -n; iN.y() <= n; iN.y()++)
|
|
||||||
{
|
|
||||||
for (iN.x() = -n; iN.x() <= n; iN.x()++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x() * gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y() * gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
for (label iU = 0; iU < 2; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU == 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition += 0.5*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info << nl << iN << ", " << unitCellLatticePosition;
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin
|
|
||||||
+ transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds =
|
|
||||||
mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placing sides
|
|
||||||
|
|
||||||
for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++)
|
|
||||||
{
|
|
||||||
for (label iR = 0; iR <= 2*n -1; iR++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (n*gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = ((-n + (iR + 1))*gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
for (label iK = 0; iK < 4; iK++)
|
|
||||||
{
|
|
||||||
for (label iU = 0; iU < 2; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU == 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition += 0.5 * gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin
|
|
||||||
+ transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds =
|
|
||||||
mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
latticePosition =
|
|
||||||
vector
|
|
||||||
(
|
|
||||||
- latticePosition.y(),
|
|
||||||
latticePosition.x(),
|
|
||||||
latticePosition.z()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,217 +0,0 @@
|
|||||||
labelVector iN(0,0,0);
|
|
||||||
|
|
||||||
vector gap = (vector::one)*pow((numberDensity/4.0),-(1.0/3.0));
|
|
||||||
|
|
||||||
#include "origin.H"
|
|
||||||
|
|
||||||
// Info<< "gap = " << gap << endl;
|
|
||||||
|
|
||||||
// Special treatment is required for the first position, i.e. iteration zero.
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x() * gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y() * gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
// Placing 4 molecules in each unit cell, using the algorithm from
|
|
||||||
// D. Rapaport, The Art of Molecular Dynamics Simulation, 2nd Ed, p68
|
|
||||||
|
|
||||||
for (label iU = 0; iU < 4; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU != 3)
|
|
||||||
{
|
|
||||||
if (iU != 0)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.x() += 0.5 * gap.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.y() += 0.5 * gap.y();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 2)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.z() += 0.5 * gap.z();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info << nl << n << ", " << unitCellLatticePosition;
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin + transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds = mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition))
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Place top and bottom caps.
|
|
||||||
|
|
||||||
for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n)
|
|
||||||
{
|
|
||||||
for (iN.y() = -n; iN.y() <= n; iN.y()++)
|
|
||||||
{
|
|
||||||
for (iN.x() = -n; iN.x() <= n; iN.x()++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x() * gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y() * gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
for (label iU = 0; iU < 4; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU != 3)
|
|
||||||
{
|
|
||||||
if (iU != 0)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.x() += 0.5 * gap.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.y() += 0.5 * gap.y();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 2)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.z() += 0.5 * gap.z();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin
|
|
||||||
+ transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds =
|
|
||||||
mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Placing sides
|
|
||||||
|
|
||||||
for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++)
|
|
||||||
{
|
|
||||||
for (label iR = 0; iR <= 2*n -1; iR++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (n * gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = ((-n + (iR + 1)) * gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
for (label iK = 0; iK < 4; iK++)
|
|
||||||
{
|
|
||||||
for (label iU = 0; iU < 4; iU++)
|
|
||||||
{
|
|
||||||
vector unitCellLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (iU != 3)
|
|
||||||
{
|
|
||||||
if (iU != 0)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.x() += 0.5 * gap.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 1)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.y() += 0.5 * gap.y();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iU != 2)
|
|
||||||
{
|
|
||||||
unitCellLatticePosition.z() += 0.5 * gap.z();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
unitCellLatticePosition -= 0.25*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin
|
|
||||||
+ transform(latticeToGlobal,unitCellLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds =
|
|
||||||
mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
latticePosition =
|
|
||||||
vector
|
|
||||||
(
|
|
||||||
- latticePosition.y(),
|
|
||||||
latticePosition.x(),
|
|
||||||
latticePosition.z()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,127 +0,0 @@
|
|||||||
labelVector iN(0,0,0);
|
|
||||||
|
|
||||||
vector gap = (vector::one)*pow(numberDensity, -(1.0/3.0));
|
|
||||||
|
|
||||||
#include "origin.H"
|
|
||||||
|
|
||||||
// Info<< "gap = " << gap << endl;
|
|
||||||
|
|
||||||
// Special treatment is required for the first position, i.e. iteration zero.
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
{
|
|
||||||
latticePosition = vector::zero;
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
latticePosition += 0.5*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition = origin + transform(latticeToGlobal,latticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds = mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if (findIndex(mesh_.cellZones()[cZ], mesh_.findCell(globalPosition)) != -1)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (iN.z() = -n; iN.z() <= n; iN.z() += 2*n)
|
|
||||||
{
|
|
||||||
for (iN.y() = -n; iN.y() <= n; iN.y()++)
|
|
||||||
{
|
|
||||||
for (iN.x() = -n; iN.x() <= n; iN.x()++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x() * gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y() * gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z() * gap.z());
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
latticePosition += 0.5*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin + transform(latticeToGlobal,latticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds = mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tensor quarterRotate(EulerCoordinateRotation(-90, 0, 0, true).R());
|
|
||||||
|
|
||||||
iN.x() = n;
|
|
||||||
for (iN.z() = -(n-1); iN.z() <= (n-1); iN.z()++)
|
|
||||||
{
|
|
||||||
for (iN.y() = -(n-1); iN.y() <= n; iN.y()++)
|
|
||||||
{
|
|
||||||
latticePosition.x() = (iN.x()*gap.x());
|
|
||||||
|
|
||||||
latticePosition.y() = (iN.y()*gap.y());
|
|
||||||
|
|
||||||
latticePosition.z() = (iN.z()*gap.z());
|
|
||||||
|
|
||||||
for (label iR = 0; iR < 4; iR++)
|
|
||||||
{
|
|
||||||
vector offsetCorrectedLatticePosition = latticePosition;
|
|
||||||
|
|
||||||
if (originSpecifies == "corner")
|
|
||||||
{
|
|
||||||
offsetCorrectedLatticePosition += 0.5*gap;
|
|
||||||
}
|
|
||||||
|
|
||||||
globalPosition =
|
|
||||||
origin
|
|
||||||
+ transform(latticeToGlobal,offsetCorrectedLatticePosition);
|
|
||||||
|
|
||||||
partOfLayerInBounds = mesh_.bounds().contains(globalPosition);
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
findIndex
|
|
||||||
(
|
|
||||||
mesh_.cellZones()[cZ],
|
|
||||||
mesh_.findCell(globalPosition)
|
|
||||||
)
|
|
||||||
!= -1
|
|
||||||
)
|
|
||||||
{
|
|
||||||
molsPlacedThisIteration++;
|
|
||||||
|
|
||||||
initialPositions.append(globalPosition);
|
|
||||||
|
|
||||||
initialCelli.append(mesh_.findCell(globalPosition));
|
|
||||||
}
|
|
||||||
|
|
||||||
latticePosition = transform(quarterRotate,latticePosition);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "molConfig.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::molConfig::molConfig
|
|
||||||
(
|
|
||||||
IOdictionary& molConfigDescription,
|
|
||||||
const polyMesh& mesh
|
|
||||||
)
|
|
||||||
:
|
|
||||||
molConfigDescription_(molConfigDescription),
|
|
||||||
mesh_(mesh)
|
|
||||||
{
|
|
||||||
createMolecules();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::molConfig::~molConfig()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
// Please refer to notes
|
|
||||||
|
|
||||||
// 1. Determine the unit cell dimensions: xU, yU and zU
|
|
||||||
|
|
||||||
const scalar xU = gap.x();
|
|
||||||
const scalar yU = gap.y();
|
|
||||||
const scalar zU = gap.z();
|
|
||||||
|
|
||||||
// 2. Determine the anchorPoint co-ordinates: xA, yA and zA
|
|
||||||
|
|
||||||
const scalar xA = anchorPoint.x();
|
|
||||||
const scalar yA = anchorPoint.y();
|
|
||||||
const scalar zA = anchorPoint.z();
|
|
||||||
|
|
||||||
// 3. Determine the vector rAB from global co-ordinate system:
|
|
||||||
|
|
||||||
const vector rAB((xMid - xA), (yMid - yA), (zMid - zA));
|
|
||||||
|
|
||||||
// 4. Transform vector rAS into lattice co-ordinate system:
|
|
||||||
|
|
||||||
const vector rASTransf = transform(latticeToGlobal.T(), rAB);
|
|
||||||
|
|
||||||
// Info << "The vector rAS = " << rAS << endl;
|
|
||||||
// Info << "The vector rAStransf = " << rAStransf << endl;
|
|
||||||
|
|
||||||
// 5. Calculate the integer values: ni, nj and nk
|
|
||||||
scalar nIscalar = rASTransf.x()/xU;
|
|
||||||
scalar nJscalar = rASTransf.y()/yU;
|
|
||||||
scalar nKscalar = rASTransf.z()/zU;
|
|
||||||
|
|
||||||
// Info << "The nI, nJ, nK values before are: " << nIscalar <<" "<< nJscalar <<" "<< nKscalar << endl;
|
|
||||||
|
|
||||||
label nI = label(nIscalar + 0.5*sign(nIscalar));
|
|
||||||
label nJ = label(nJscalar + 0.5*sign(nJscalar));
|
|
||||||
label nK = label(nKscalar + 0.5*sign(nKscalar));
|
|
||||||
|
|
||||||
// Info << "The nI, nJ, nK values after are: " << nI <<" "<< nJ <<" "<< nK << endl;
|
|
||||||
|
|
||||||
// 6. Calculate the corrected starting point, rAC (in the lattice co-ordinate system):
|
|
||||||
const vector rAC((nI*xU), (nJ*yU), (nK*zU));
|
|
||||||
|
|
||||||
// 7. Transform the corrected starting point in the global co-ordinate system, rC:
|
|
||||||
const vector rC = anchorPoint + transform(latticeToGlobal, rAC);
|
|
||||||
|
|
||||||
|
|
||||||
const vector& origin = rC;
|
|
||||||
|
|
||||||
// Pout << "The Corrected Starting Point: " << origin << endl;
|
|
||||||
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
|
|
||||||
// Info << "Zone description subDict " << cZ <<": " << cellZoneI[cZ].name() << endl;
|
|
||||||
|
|
||||||
const dictionary& subDictI =
|
|
||||||
molConfigDescription_.subDict(cellZoneI[cZ].name());
|
|
||||||
|
|
||||||
const scalar temperature(readScalar(subDictI.lookup("temperature")));
|
|
||||||
|
|
||||||
const word velocityDistribution(subDictI.lookup("velocityDistribution"));
|
|
||||||
|
|
||||||
const vector bulkVelocity(subDictI.lookup("bulkVelocity"));
|
|
||||||
|
|
||||||
const word id(subDictI.lookup("id"));
|
|
||||||
|
|
||||||
const scalar mass(readScalar(subDictI.lookup("mass")));
|
|
||||||
|
|
||||||
scalar numberDensity_read(0.0);
|
|
||||||
|
|
||||||
if (subDictI.found("numberDensity"))
|
|
||||||
{
|
|
||||||
numberDensity_read = readScalar(subDictI.lookup("numberDensity"));
|
|
||||||
}
|
|
||||||
else if (subDictI.found("massDensity"))
|
|
||||||
{
|
|
||||||
numberDensity_read = readScalar(subDictI.lookup("massDensity"))/mass;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FatalErrorIn("readZoneSubDict.H\n")
|
|
||||||
<< "massDensity or numberDensity not specified " << nl
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
const scalar numberDensity(numberDensity_read);
|
|
||||||
|
|
||||||
const word latticeStructure(subDictI.lookup("latticeStructure"));
|
|
||||||
|
|
||||||
const vector anchorPoint(subDictI.lookup("anchor"));
|
|
||||||
|
|
||||||
const word originSpecifies(subDictI.lookup("anchorSpecifies"));
|
|
||||||
|
|
||||||
if
|
|
||||||
(
|
|
||||||
originSpecifies != "corner"
|
|
||||||
&& originSpecifies != "molecule"
|
|
||||||
)
|
|
||||||
{
|
|
||||||
FatalErrorIn("readZoneSubDict.H\n")
|
|
||||||
<< "anchorSpecifies must be either 'corner' or 'molecule', found "
|
|
||||||
<< originSpecifies << nl
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool tethered = false;
|
|
||||||
|
|
||||||
if (subDictI.found("tethered"))
|
|
||||||
{
|
|
||||||
tethered = Switch(subDictI.lookup("tethered"));
|
|
||||||
}
|
|
||||||
|
|
||||||
const vector orientationAngles(subDictI.lookup("orientationAngles"));
|
|
||||||
|
|
||||||
scalar phi(orientationAngles.x()*mathematicalConstant::pi/180.0);
|
|
||||||
scalar theta(orientationAngles.y()*mathematicalConstant::pi/180.0);
|
|
||||||
scalar psi(orientationAngles.z()*mathematicalConstant::pi/180.0);
|
|
||||||
|
|
||||||
const tensor latticeToGlobal
|
|
||||||
(
|
|
||||||
cos(psi)*cos(phi) - cos(theta)*sin(phi)*sin(psi),
|
|
||||||
cos(psi)*sin(phi) + cos(theta)*cos(phi)*sin(psi),
|
|
||||||
sin(psi)*sin(theta),
|
|
||||||
- sin(psi)*cos(phi) - cos(theta)*sin(phi)*cos(psi),
|
|
||||||
- sin(psi)*sin(phi) + cos(theta)*cos(phi)*cos(psi),
|
|
||||||
cos(psi)*sin(theta),
|
|
||||||
sin(theta)*sin(phi),
|
|
||||||
- sin(theta)*cos(phi),
|
|
||||||
cos(theta)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Info << "\tcells: " << cellZoneI[cZ].size() << endl;
|
|
||||||
// Info << "\tnumberDensity: " << numberDensity << endl;
|
|
||||||
// Info << "\ttemperature: " << temperature << endl;
|
|
||||||
// Info << "\tvelocityDistribution: " << velocityDistribution << endl;
|
|
||||||
// Info << "\tbulkVelocity: " << bulkVelocity << endl;
|
|
||||||
// Info << "\tid: " << id << endl;
|
|
||||||
// Info << "\tmass: " << mass << endl;
|
|
||||||
// Info << "\tlatticeStructure: " << latticeStructure << endl;
|
|
||||||
// Info << "\tanchor: " << anchorPoint << endl;
|
|
||||||
// Info << "\toriginSpecifies: " << originSpecifies << endl;
|
|
||||||
// Info << "\ttethered: " << tethered << endl;
|
|
||||||
// Info << "\torientationAngles: " << orientationAngles << endl;
|
|
||||||
// Info << "\tlatticeToGlobal: " << latticeToGlobal << endl;
|
|
||||||
|
|
||||||
@ -1,97 +0,0 @@
|
|||||||
scalar xMax = 0;
|
|
||||||
|
|
||||||
scalar yMax = 0;
|
|
||||||
|
|
||||||
scalar zMax = 0;
|
|
||||||
|
|
||||||
scalar xMin = 0;
|
|
||||||
|
|
||||||
scalar yMin = 0;
|
|
||||||
|
|
||||||
scalar zMin = 0;
|
|
||||||
|
|
||||||
label xMaxPtLabel = 0;
|
|
||||||
|
|
||||||
label yMaxPtLabel = 0;
|
|
||||||
|
|
||||||
label zMaxPtLabel = 0;
|
|
||||||
|
|
||||||
label xMinPtLabel = 0;
|
|
||||||
|
|
||||||
label yMinPtLabel = 0;
|
|
||||||
|
|
||||||
label zMinPtLabel = 0;
|
|
||||||
|
|
||||||
forAll (cellZoneI[cZ], nC)
|
|
||||||
{
|
|
||||||
const labelList& cellPointsJ = mesh_.cellPoints()[cellZoneI[cZ][nC]];
|
|
||||||
|
|
||||||
forAll(cellPointsJ, nP)
|
|
||||||
{
|
|
||||||
const point& ptI = mesh_.points()[cellPointsJ[nP]];
|
|
||||||
|
|
||||||
const label& ptILabel = cellPointsJ[nP];
|
|
||||||
|
|
||||||
if (ptI.x() > xMax || nC == 0)
|
|
||||||
{
|
|
||||||
xMax = ptI.x();
|
|
||||||
xMaxPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
if (ptI.y() > yMax || nC == 0)
|
|
||||||
{
|
|
||||||
yMax = ptI.y();
|
|
||||||
yMaxPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
if (ptI.z() > zMax || nC == 0)
|
|
||||||
{
|
|
||||||
zMax = ptI.z();
|
|
||||||
zMaxPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
if (ptI.x() < xMin || nC == 0)
|
|
||||||
{
|
|
||||||
xMin = ptI.x();
|
|
||||||
xMinPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
if (ptI.y() < yMin || nC == 0)
|
|
||||||
{
|
|
||||||
yMin = ptI.y();
|
|
||||||
yMinPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
if (ptI.z() < zMin || nC == 0)
|
|
||||||
{
|
|
||||||
zMin = ptI.z();
|
|
||||||
zMinPtLabel = ptILabel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Info << "Xmax: label = " << xMaxPtLabel2 << "; vector = " <<mesh_.points()[xMaxPtLabel2]
|
|
||||||
// <<"; x-component = " << mesh_.points()[xMaxPtLabel2].x() << endl;
|
|
||||||
// Info << "Ymax: label = " << yMaxPtLabel2 << "; vector = " <<mesh_.points()[yMaxPtLabel2]
|
|
||||||
// <<"; y-component = " << mesh_.points()[yMaxPtLabel2].y() << endl;
|
|
||||||
// Info << "Zmax: label = " << zMaxPtLabel2 << "; vector = " <<mesh_.points()[zMaxPtLabel2]
|
|
||||||
// <<"; z-component = " << mesh_.points()[zMaxPtLabel2].z() << endl;
|
|
||||||
//
|
|
||||||
// Info << "Xmin: label = " << xMinPtLabel << "; vector = " <<mesh_.points()[xMinPtLabel]
|
|
||||||
// <<"; x-component = " << mesh_.points()[xMinPtLabel].x() << endl;
|
|
||||||
// Info << "Ymin: label = " << yMinPtLabel << "; vector = " <<mesh_.points()[yMinPtLabel]
|
|
||||||
// <<"; y-component = " << mesh_.points()[yMinPtLabel].y() << endl;
|
|
||||||
// Info << "Zmin: label = " << zMinPtLabel << "; vector = " <<mesh_.points()[zMinPtLabel]
|
|
||||||
// <<"; z-component = " << mesh_.points()[zMinPtLabel].z() << endl;
|
|
||||||
|
|
||||||
scalar xMid =
|
|
||||||
(mesh_.points()[xMaxPtLabel].x()
|
|
||||||
+ mesh_.points()[xMinPtLabel].x()) / 2;
|
|
||||||
|
|
||||||
scalar yMid =
|
|
||||||
(mesh_.points()[yMaxPtLabel].y()
|
|
||||||
+ mesh_.points()[yMinPtLabel].y()) / 2;
|
|
||||||
|
|
||||||
scalar zMid =
|
|
||||||
(mesh_.points()[zMaxPtLabel].z()
|
|
||||||
+ mesh_.points()[zMinPtLabel].z()) / 2;
|
|
||||||
|
|
||||||
vector rS(xMid, yMid, zMid);
|
|
||||||
|
|
||||||
// Info << "\t The Estimated Starting Point: " << rS << endl;
|
|
||||||
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
scalar velCmptMag = sqrt(moleculeCloud::kb*temperature/mass);
|
|
||||||
|
|
||||||
for (molN = totalMols; molN < totalMols + totalZoneMols; molN++)
|
|
||||||
{
|
|
||||||
// Assign velocity: random direction, magnitude determined by desired
|
|
||||||
// maxwellian distribution at temperature
|
|
||||||
|
|
||||||
// Temperature gradients could be created by specifying a gradient in the
|
|
||||||
// zone subDict, or by reading a field from a mesh.
|
|
||||||
|
|
||||||
// The velocities are treated on a zone-by-zone basis for the purposes of
|
|
||||||
// removal of bulk momentum - hence nMols becomes totalZoneMols
|
|
||||||
|
|
||||||
velocity = vector
|
|
||||||
(
|
|
||||||
velCmptMag*rand.GaussNormal(),
|
|
||||||
velCmptMag*rand.GaussNormal(),
|
|
||||||
velCmptMag*rand.GaussNormal()
|
|
||||||
);
|
|
||||||
|
|
||||||
momentumSum += mass*velocity;
|
|
||||||
|
|
||||||
initialVelocities.append(velocity);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
scalar initVelMag =
|
|
||||||
sqrt
|
|
||||||
(
|
|
||||||
3.0*(1.0 - 1.0 / totalZoneMols)
|
|
||||||
*moleculeCloud::kb*temperature
|
|
||||||
/mass
|
|
||||||
);
|
|
||||||
|
|
||||||
for (molN = totalMols; molN < totalMols + totalZoneMols; molN++)
|
|
||||||
{
|
|
||||||
// Assign velocity: random direction, magnitude determined by desired
|
|
||||||
// temperature
|
|
||||||
|
|
||||||
// Temperature gradients could be created by specifying a gradient in the
|
|
||||||
// zone subDict, or by reading a field from a mesh.
|
|
||||||
|
|
||||||
// The velocities are treated on a zone-by-zone basis for the purposes of
|
|
||||||
// removal of bulk momentum - hence nMols becomes totalZoneMols
|
|
||||||
|
|
||||||
velocity = (2.0*rand.vector01() - vector::one);
|
|
||||||
|
|
||||||
velocity *= initVelMag/mag(velocity);
|
|
||||||
|
|
||||||
momentumSum += mass*velocity;
|
|
||||||
|
|
||||||
initialVelocities.append(velocity);
|
|
||||||
}
|
|
||||||
@ -35,8 +35,6 @@ License
|
|||||||
#include "BiIndirectList.H"
|
#include "BiIndirectList.H"
|
||||||
#include "contiguous.H"
|
#include "contiguous.H"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
|
||||||
@ -442,34 +440,6 @@ void Foam::List<T>::transfer(SortableList<T>& a)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void Foam::sort(List<T>& a)
|
|
||||||
{
|
|
||||||
std::sort(a.begin(), a.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T, class Cmp>
|
|
||||||
void Foam::sort(List<T>& a, const Cmp& cmp)
|
|
||||||
{
|
|
||||||
std::sort(a.begin(), a.end(), cmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void Foam::stableSort(List<T>& a)
|
|
||||||
{
|
|
||||||
std::stable_sort(a.begin(), a.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
template<class T, class Cmp>
|
|
||||||
void Foam::stableSort(List<T>& a, const Cmp& cmp)
|
|
||||||
{
|
|
||||||
std::stable_sort(a.begin(), a.end(), cmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
// Assignment to UList operator. Takes linear time.
|
// Assignment to UList operator. Takes linear time.
|
||||||
|
|||||||
@ -248,18 +248,6 @@ public:
|
|||||||
template<class T>
|
template<class T>
|
||||||
List<T> readList(Istream&);
|
List<T> readList(Istream&);
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void sort(List<T>&);
|
|
||||||
|
|
||||||
template<class T, class Cmp>
|
|
||||||
void sort(List<T>&, const Cmp&);
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void stableSort(List<T>&);
|
|
||||||
|
|
||||||
template<class T, class Cmp>
|
|
||||||
void stableSort(List<T>&, const Cmp&);
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,8 @@ License
|
|||||||
#include "ListLoopM.H"
|
#include "ListLoopM.H"
|
||||||
#include "contiguous.H"
|
#include "contiguous.H"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
@ -116,6 +118,34 @@ Foam::label Foam::UList<T>::byteSize() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::sort(UList<T>& a)
|
||||||
|
{
|
||||||
|
std::sort(a.begin(), a.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class Cmp>
|
||||||
|
void Foam::sort(UList<T>& a, const Cmp& cmp)
|
||||||
|
{
|
||||||
|
std::sort(a.begin(), a.end(), cmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void Foam::stableSort(UList<T>& a)
|
||||||
|
{
|
||||||
|
std::stable_sort(a.begin(), a.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class T, class Cmp>
|
||||||
|
void Foam::stableSort(UList<T>& a, const Cmp& cmp)
|
||||||
|
{
|
||||||
|
std::stable_sort(a.begin(), a.end(), cmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|||||||
@ -320,6 +320,18 @@ public:
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void sort(UList<T>&);
|
||||||
|
|
||||||
|
template<class T, class Cmp>
|
||||||
|
void sort(UList<T>&, const Cmp&);
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
void stableSort(UList<T>&);
|
||||||
|
|
||||||
|
template<class T, class Cmp>
|
||||||
|
void stableSort(UList<T>&, const Cmp&);
|
||||||
|
|
||||||
// Reverse the first n elements of the list
|
// Reverse the first n elements of the list
|
||||||
template<class T>
|
template<class T>
|
||||||
inline void reverse(UList<T>&, const label n);
|
inline void reverse(UList<T>&, const label n);
|
||||||
|
|||||||
@ -106,6 +106,15 @@ public:
|
|||||||
//- Global sum of localSizes
|
//- Global sum of localSizes
|
||||||
inline label size() const;
|
inline label size() const;
|
||||||
|
|
||||||
|
//- Size of procI data
|
||||||
|
inline label localSize(const label procI) const;
|
||||||
|
|
||||||
|
//- From local to global on procI
|
||||||
|
inline label toGlobal(const label procI, const label i) const;
|
||||||
|
|
||||||
|
//- Is on processor procI
|
||||||
|
inline bool isLocal(const label procI, const label i) const;
|
||||||
|
|
||||||
//- From global to local on procI
|
//- From global to local on procI
|
||||||
inline label toLocal(const label procI, const label i) const;
|
inline label toLocal(const label procI, const label i) const;
|
||||||
|
|
||||||
@ -115,9 +124,6 @@ public:
|
|||||||
//- Start of procI data
|
//- Start of procI data
|
||||||
inline label offset(const label procI) const;
|
inline label offset(const label procI) const;
|
||||||
|
|
||||||
//- Size of procI data
|
|
||||||
inline label localSize(const label procI) const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
|||||||
@ -63,27 +63,39 @@ inline Foam::label Foam::globalIndex::size() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::label Foam::globalIndex::toGlobal(const label i) const
|
inline Foam::label Foam::globalIndex::toGlobal
|
||||||
|
(
|
||||||
|
const label procI,
|
||||||
|
const label i
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
return
|
return(procI == 0 ? i : i + offsets_[procI-1]);
|
||||||
(
|
|
||||||
Pstream::myProcNo() == 0
|
|
||||||
? i
|
|
||||||
: i + offsets_[Pstream::myProcNo()-1]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::label Foam::globalIndex::toGlobal(const label i) const
|
||||||
|
{
|
||||||
|
return toGlobal(Pstream::myProcNo(), i);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//- Is on local processor
|
//- Is on local processor
|
||||||
inline bool Foam::globalIndex::isLocal(const label i) const
|
inline bool Foam::globalIndex::isLocal(const label procI, const label i) const
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(i < offsets_[Pstream::myProcNo()])
|
(i < offsets_[procI])
|
||||||
&& (i >= (Pstream::myProcNo() == 0 ? 0 : offsets_[Pstream::myProcNo()-1]));
|
&& (i >= (procI == 0 ? 0 : offsets_[procI-1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool Foam::globalIndex::isLocal(const label i) const
|
||||||
|
{
|
||||||
|
return isLocal(Pstream::myProcNo(), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Foam::label Foam::globalIndex::toLocal(const label procI, const label i)
|
inline Foam::label Foam::globalIndex::toLocal(const label procI, const label i)
|
||||||
const
|
const
|
||||||
{
|
{
|
||||||
label localI = (procI == 0 ? i : i - offsets_[procI-1]);
|
label localI = (procI == 0 ? i : i - offsets_[procI-1]);
|
||||||
|
|
||||||
|
|||||||
@ -32,7 +32,6 @@ Description
|
|||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
coupledPolyPatch.C
|
coupledPolyPatch.C
|
||||||
coupledPolyPatchMorph.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ Description
|
|||||||
#include "primitiveMesh.H"
|
#include "primitiveMesh.H"
|
||||||
#include "demandDrivenData.H"
|
#include "demandDrivenData.H"
|
||||||
#include "mapPolyMesh.H"
|
#include "mapPolyMesh.H"
|
||||||
|
#include "syncTools.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -530,6 +531,87 @@ bool Foam::faceZone::checkDefinition(const bool report) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Foam::faceZone::checkParallelSync(const bool report) const
|
||||||
|
{
|
||||||
|
const polyMesh& mesh = zoneMesh().mesh();
|
||||||
|
const polyBoundaryMesh& bm = mesh.boundaryMesh();
|
||||||
|
|
||||||
|
bool boundaryError = false;
|
||||||
|
|
||||||
|
|
||||||
|
// Check that zone faces are synced
|
||||||
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
{
|
||||||
|
boolList neiZoneFace(mesh.nFaces()-mesh.nInternalFaces(), false);
|
||||||
|
boolList neiZoneFlip(mesh.nFaces()-mesh.nInternalFaces(), false);
|
||||||
|
forAll(*this, i)
|
||||||
|
{
|
||||||
|
label faceI = operator[](i);
|
||||||
|
|
||||||
|
if (!mesh.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
neiZoneFace[faceI-mesh.nInternalFaces()] = true;
|
||||||
|
neiZoneFlip[faceI-mesh.nInternalFaces()] = flipMap()[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
boolList myZoneFace(neiZoneFace);
|
||||||
|
syncTools::swapBoundaryFaceList(mesh, neiZoneFace, false);
|
||||||
|
boolList myZoneFlip(neiZoneFlip);
|
||||||
|
syncTools::swapBoundaryFaceList(mesh, neiZoneFlip, false);
|
||||||
|
|
||||||
|
forAll(*this, i)
|
||||||
|
{
|
||||||
|
label faceI = operator[](i);
|
||||||
|
|
||||||
|
label patchI = bm.whichPatch(faceI);
|
||||||
|
|
||||||
|
if (patchI != -1 && bm[patchI].coupled())
|
||||||
|
{
|
||||||
|
label bFaceI = faceI-mesh.nInternalFaces();
|
||||||
|
|
||||||
|
// Check face in zone on both sides
|
||||||
|
if (myZoneFace[bFaceI] != neiZoneFace[bFaceI])
|
||||||
|
{
|
||||||
|
boundaryError = true;
|
||||||
|
|
||||||
|
if (report)
|
||||||
|
{
|
||||||
|
Pout<< " ***Problem with faceZone " << index()
|
||||||
|
<< " named " << name()
|
||||||
|
<< ". Face " << faceI
|
||||||
|
<< " on coupled patch "
|
||||||
|
<< bm[patchI].name()
|
||||||
|
<< " is not consistent with its coupled neighbour."
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flip state should be opposite.
|
||||||
|
if (myZoneFlip[bFaceI] == neiZoneFlip[bFaceI])
|
||||||
|
{
|
||||||
|
boundaryError = true;
|
||||||
|
|
||||||
|
if (report)
|
||||||
|
{
|
||||||
|
Pout<< " ***Problem with faceZone " << index()
|
||||||
|
<< " named " << name()
|
||||||
|
<< ". Face " << faceI
|
||||||
|
<< " on coupled patch "
|
||||||
|
<< bm[patchI].name()
|
||||||
|
<< " does not have consistent flipMap"
|
||||||
|
<< " across coupled faces."
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnReduce(boundaryError, orOp<bool>());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::faceZone::movePoints(const pointField& p)
|
void Foam::faceZone::movePoints(const pointField& p)
|
||||||
{
|
{
|
||||||
if (patchPtr_)
|
if (patchPtr_)
|
||||||
|
|||||||
@ -302,6 +302,10 @@ public:
|
|||||||
//- Check zone definition. Return true if in error.
|
//- Check zone definition. Return true if in error.
|
||||||
bool checkDefinition(const bool report = false) const;
|
bool checkDefinition(const bool report = false) const;
|
||||||
|
|
||||||
|
//- Check whether all procs have faces synchronised. Return
|
||||||
|
// true if in error.
|
||||||
|
bool checkParallelSync(const bool report = false) const;
|
||||||
|
|
||||||
//- Correct patch after moving points
|
//- Correct patch after moving points
|
||||||
virtual void movePoints(const pointField&);
|
virtual void movePoints(const pointField&);
|
||||||
|
|
||||||
|
|||||||
@ -607,6 +607,18 @@ inline bool triangle<Point, PointRef>::classify
|
|||||||
// system E0, E1
|
// system E0, E1
|
||||||
//
|
//
|
||||||
|
|
||||||
|
//Pout<< "alpha:" << alpha << endl;
|
||||||
|
//Pout<< "beta:" << beta << endl;
|
||||||
|
//Pout<< "hit:" << hit << endl;
|
||||||
|
//Pout<< "tol:" << tol << endl;
|
||||||
|
|
||||||
|
if (hit)
|
||||||
|
{
|
||||||
|
// alpha,beta might get negative due to precision errors
|
||||||
|
alpha = max(0.0, min(1.0, alpha));
|
||||||
|
beta = max(0.0, min(1.0, beta));
|
||||||
|
}
|
||||||
|
|
||||||
nearType = NONE;
|
nearType = NONE;
|
||||||
nearLabel = -1;
|
nearLabel = -1;
|
||||||
|
|
||||||
|
|||||||
@ -110,7 +110,7 @@ Foam::label Foam::meshRefinement::createBaffle
|
|||||||
-1, // masterPointID
|
-1, // masterPointID
|
||||||
-1, // masterEdgeID
|
-1, // masterEdgeID
|
||||||
faceI, // masterFaceID,
|
faceI, // masterFaceID,
|
||||||
false, // face flip
|
true, // face flip
|
||||||
neiPatch, // patch for face
|
neiPatch, // patch for face
|
||||||
zoneID, // zone for face
|
zoneID, // zone for face
|
||||||
zoneFlip // face flip in zone
|
zoneFlip // face flip in zone
|
||||||
@ -1017,7 +1017,7 @@ void Foam::meshRefinement::findCellZoneGeometric
|
|||||||
|
|
||||||
if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone))
|
if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone))
|
||||||
{
|
{
|
||||||
// Give face the zone of the owner
|
// Give face the zone of max cell zone
|
||||||
namedSurfaceIndex[faceI] = findIndex
|
namedSurfaceIndex[faceI] = findIndex
|
||||||
(
|
(
|
||||||
surfaceToCellZone,
|
surfaceToCellZone,
|
||||||
@ -1059,7 +1059,7 @@ void Foam::meshRefinement::findCellZoneGeometric
|
|||||||
|
|
||||||
if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone))
|
if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone))
|
||||||
{
|
{
|
||||||
// Give face the zone of the owner
|
// Give face the max cell zone
|
||||||
namedSurfaceIndex[faceI] = findIndex
|
namedSurfaceIndex[faceI] = findIndex
|
||||||
(
|
(
|
||||||
surfaceToCellZone,
|
surfaceToCellZone,
|
||||||
@ -2211,16 +2211,14 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
|
|||||||
{
|
{
|
||||||
label faceI = testFaces[i];
|
label faceI = testFaces[i];
|
||||||
|
|
||||||
label own = mesh_.faceOwner()[faceI];
|
|
||||||
|
|
||||||
if (mesh_.isInternalFace(faceI))
|
if (mesh_.isInternalFace(faceI))
|
||||||
{
|
{
|
||||||
start[i] = cellCentres[own];
|
start[i] = cellCentres[faceOwner[faceI]];
|
||||||
end[i] = cellCentres[mesh_.faceNeighbour()[faceI]];
|
end[i] = cellCentres[faceNeighbour[faceI]];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
start[i] = cellCentres[own];
|
start[i] = cellCentres[faceOwner[faceI]];
|
||||||
end[i] = neiCc[faceI-mesh_.nInternalFaces()];
|
end[i] = neiCc[faceI-mesh_.nInternalFaces()];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2357,6 +2355,20 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
|
|||||||
|
|
||||||
if (surfI != -1)
|
if (surfI != -1)
|
||||||
{
|
{
|
||||||
|
// Orient face zone to have slave cells in max cell zone.
|
||||||
|
label ownZone = cellToZone[faceOwner[faceI]];
|
||||||
|
label neiZone = cellToZone[faceNeighbour[faceI]];
|
||||||
|
|
||||||
|
bool flip;
|
||||||
|
if (ownZone == max(ownZone, neiZone))
|
||||||
|
{
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flip = true;
|
||||||
|
}
|
||||||
|
|
||||||
meshMod.setAction
|
meshMod.setAction
|
||||||
(
|
(
|
||||||
polyModifyFace
|
polyModifyFace
|
||||||
@ -2369,12 +2381,31 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
|
|||||||
-1, // patch for face
|
-1, // patch for face
|
||||||
false, // remove from zone
|
false, // remove from zone
|
||||||
surfaceToFaceZone[surfI], // zone for face
|
surfaceToFaceZone[surfI], // zone for face
|
||||||
false // face flip in zone
|
flip // face flip in zone
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get coupled neighbour cellZone. Set to -1 on non-coupled patches.
|
||||||
|
labelList neiCellZone(mesh_.nFaces()-mesh_.nInternalFaces(), -1);
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
|
if (pp.coupled())
|
||||||
|
{
|
||||||
|
forAll(pp, i)
|
||||||
|
{
|
||||||
|
label faceI = pp.start()+i;
|
||||||
|
neiCellZone[faceI-mesh_.nInternalFaces()] =
|
||||||
|
cellToZone[mesh_.faceOwner()[faceI]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false);
|
||||||
|
|
||||||
|
// Set owner as no-flip
|
||||||
forAll(patches, patchI)
|
forAll(patches, patchI)
|
||||||
{
|
{
|
||||||
const polyPatch& pp = patches[patchI];
|
const polyPatch& pp = patches[patchI];
|
||||||
@ -2387,6 +2418,19 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
|
|||||||
|
|
||||||
if (surfI != -1)
|
if (surfI != -1)
|
||||||
{
|
{
|
||||||
|
label ownZone = cellToZone[faceOwner[faceI]];
|
||||||
|
label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()];
|
||||||
|
|
||||||
|
bool flip;
|
||||||
|
if (ownZone == max(ownZone, neiZone))
|
||||||
|
{
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flip = true;
|
||||||
|
}
|
||||||
|
|
||||||
meshMod.setAction
|
meshMod.setAction
|
||||||
(
|
(
|
||||||
polyModifyFace
|
polyModifyFace
|
||||||
@ -2399,7 +2443,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify
|
|||||||
patchI, // patch for face
|
patchI, // patch for face
|
||||||
false, // remove from zone
|
false, // remove from zone
|
||||||
surfaceToFaceZone[surfI], // zone for face
|
surfaceToFaceZone[surfI], // zone for face
|
||||||
false // face flip in zone
|
flip // face flip in zone
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -159,7 +159,7 @@ public:
|
|||||||
// return nRegions_;
|
// return nRegions_;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//- Per point that is to duplicated to the local index
|
//- Per point that is to be duplicated the local index
|
||||||
const Map<label>& meshPointMap() const
|
const Map<label>& meshPointMap() const
|
||||||
{
|
{
|
||||||
return meshPointMap_;
|
return meshPointMap_;
|
||||||
|
|||||||
@ -58,23 +58,6 @@ const Foam::point Foam::polyTopoChange::greatPoint
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
// Renumber
|
|
||||||
void Foam::polyTopoChange::renumber
|
|
||||||
(
|
|
||||||
const labelList& map,
|
|
||||||
DynamicList<label>& elems
|
|
||||||
)
|
|
||||||
{
|
|
||||||
forAll(elems, elemI)
|
|
||||||
{
|
|
||||||
if (elems[elemI] >= 0)
|
|
||||||
{
|
|
||||||
elems[elemI] = map[elems[elemI]];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Renumber with special handling for merged items (marked with <-1)
|
// Renumber with special handling for merged items (marked with <-1)
|
||||||
void Foam::polyTopoChange::renumberReverseMap
|
void Foam::polyTopoChange::renumberReverseMap
|
||||||
(
|
(
|
||||||
@ -208,6 +191,20 @@ void Foam::polyTopoChange::countMap
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelHashSet Foam::polyTopoChange::getSetIndices(const PackedBoolList& lst)
|
||||||
|
{
|
||||||
|
labelHashSet values(lst.count());
|
||||||
|
forAll(lst, i)
|
||||||
|
{
|
||||||
|
if (lst[i])
|
||||||
|
{
|
||||||
|
values.insert(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::polyTopoChange::writeMeshStats(const polyMesh& mesh, Ostream& os)
|
void Foam::polyTopoChange::writeMeshStats(const polyMesh& mesh, Ostream& os)
|
||||||
{
|
{
|
||||||
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
const polyBoundaryMesh& patches = mesh.boundaryMesh();
|
||||||
@ -782,9 +779,11 @@ void Foam::polyTopoChange::reorderCompactFaces
|
|||||||
|
|
||||||
renumberKey(oldToNew, faceFromPoint_);
|
renumberKey(oldToNew, faceFromPoint_);
|
||||||
renumberKey(oldToNew, faceFromEdge_);
|
renumberKey(oldToNew, faceFromEdge_);
|
||||||
renumber(oldToNew, flipFaceFlux_);
|
inplaceReorder(oldToNew, flipFaceFlux_);
|
||||||
|
flipFaceFlux_.setCapacity(newSize);
|
||||||
renumberKey(oldToNew, faceZone_);
|
renumberKey(oldToNew, faceZone_);
|
||||||
renumberKey(oldToNew, faceZoneFlip_);
|
inplaceReorder(oldToNew, faceZoneFlip_);
|
||||||
|
faceZoneFlip_.setCapacity(newSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1097,6 +1096,18 @@ void Foam::polyTopoChange::compact
|
|||||||
{
|
{
|
||||||
faces_[faceI] = faces_[faceI].reverseFace();
|
faces_[faceI] = faces_[faceI].reverseFace();
|
||||||
Swap(faceOwner_[faceI], faceNeighbour_[faceI]);
|
Swap(faceOwner_[faceI], faceNeighbour_[faceI]);
|
||||||
|
flipFaceFlux_[faceI] =
|
||||||
|
(
|
||||||
|
flipFaceFlux_[faceI]
|
||||||
|
? 0
|
||||||
|
: 1
|
||||||
|
);
|
||||||
|
faceZoneFlip_[faceI] =
|
||||||
|
(
|
||||||
|
faceZoneFlip_[faceI]
|
||||||
|
? 0
|
||||||
|
: 1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2302,9 +2313,9 @@ void Foam::polyTopoChange::addMesh
|
|||||||
faceMap_.setCapacity(faceMap_.size() + nAllFaces);
|
faceMap_.setCapacity(faceMap_.size() + nAllFaces);
|
||||||
faceFromPoint_.resize(faceFromPoint_.size() + nAllFaces/100);
|
faceFromPoint_.resize(faceFromPoint_.size() + nAllFaces/100);
|
||||||
faceFromEdge_.resize(faceFromEdge_.size() + nAllFaces/100);
|
faceFromEdge_.resize(faceFromEdge_.size() + nAllFaces/100);
|
||||||
flipFaceFlux_.resize(flipFaceFlux_.size() + nAllFaces/100);
|
flipFaceFlux_.setCapacity(faces_.size() + nAllFaces);
|
||||||
faceZone_.resize(faceZone_.size() + nAllFaces/100);
|
faceZone_.resize(faceZone_.size() + nAllFaces/100);
|
||||||
faceZoneFlip_.resize(faceZoneFlip_.size() + nAllFaces/100);
|
faceZoneFlip_.setCapacity(faces_.size() + nAllFaces);
|
||||||
|
|
||||||
|
|
||||||
// Precalc offset zones
|
// Precalc offset zones
|
||||||
@ -2716,16 +2727,13 @@ Foam::label Foam::polyTopoChange::addFace
|
|||||||
}
|
}
|
||||||
reverseFaceMap_.append(faceI);
|
reverseFaceMap_.append(faceI);
|
||||||
|
|
||||||
if (flipFaceFlux)
|
flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0);
|
||||||
{
|
|
||||||
flipFaceFlux_.insert(faceI);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zoneID >= 0)
|
if (zoneID >= 0)
|
||||||
{
|
{
|
||||||
faceZone_.insert(faceI, zoneID);
|
faceZone_.insert(faceI, zoneID);
|
||||||
faceZoneFlip_.insert(faceI, zoneFlip);
|
|
||||||
}
|
}
|
||||||
|
faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0);
|
||||||
|
|
||||||
return faceI;
|
return faceI;
|
||||||
}
|
}
|
||||||
@ -2754,14 +2762,7 @@ void Foam::polyTopoChange::modifyFace
|
|||||||
faceNeighbour_[faceI] = nei;
|
faceNeighbour_[faceI] = nei;
|
||||||
region_[faceI] = patchID;
|
region_[faceI] = patchID;
|
||||||
|
|
||||||
if (flipFaceFlux)
|
flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0);
|
||||||
{
|
|
||||||
flipFaceFlux_.insert(faceI);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
flipFaceFlux_.erase(faceI);
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<label>::iterator faceFnd = faceZone_.find(faceI);
|
Map<label>::iterator faceFnd = faceZone_.find(faceI);
|
||||||
|
|
||||||
@ -2770,19 +2771,17 @@ void Foam::polyTopoChange::modifyFace
|
|||||||
if (zoneID >= 0)
|
if (zoneID >= 0)
|
||||||
{
|
{
|
||||||
faceFnd() = zoneID;
|
faceFnd() = zoneID;
|
||||||
faceZoneFlip_.find(faceI)() = zoneFlip;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
faceZone_.erase(faceFnd);
|
faceZone_.erase(faceFnd);
|
||||||
faceZoneFlip_.erase(faceI);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (zoneID >= 0)
|
else if (zoneID >= 0)
|
||||||
{
|
{
|
||||||
faceZone_.insert(faceI, zoneID);
|
faceZone_.insert(faceI, zoneID);
|
||||||
faceZoneFlip_.insert(faceI, zoneFlip);
|
|
||||||
}
|
}
|
||||||
|
faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2823,9 +2822,9 @@ void Foam::polyTopoChange::removeFace(const label faceI, const label mergeFaceI)
|
|||||||
}
|
}
|
||||||
faceFromEdge_.erase(faceI);
|
faceFromEdge_.erase(faceI);
|
||||||
faceFromPoint_.erase(faceI);
|
faceFromPoint_.erase(faceI);
|
||||||
flipFaceFlux_.erase(faceI);
|
flipFaceFlux_[faceI] = 0;
|
||||||
faceZone_.erase(faceI);
|
faceZone_.erase(faceI);
|
||||||
faceZoneFlip_.erase(faceI);
|
faceZoneFlip_[faceI] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3119,6 +3118,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
|
|||||||
labelListList faceZonePointMap(mesh.faceZones().size());
|
labelListList faceZonePointMap(mesh.faceZones().size());
|
||||||
calcFaceZonePointMap(mesh, oldFaceZoneMeshPointMaps, faceZonePointMap);
|
calcFaceZonePointMap(mesh, oldFaceZoneMeshPointMaps, faceZonePointMap);
|
||||||
|
|
||||||
|
labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_));
|
||||||
|
|
||||||
return autoPtr<mapPolyMesh>
|
return autoPtr<mapPolyMesh>
|
||||||
(
|
(
|
||||||
@ -3147,7 +3147,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh
|
|||||||
reverseFaceMap_,
|
reverseFaceMap_,
|
||||||
reverseCellMap_,
|
reverseCellMap_,
|
||||||
|
|
||||||
flipFaceFlux_,
|
flipFaceFluxSet,
|
||||||
|
|
||||||
patchPointMap,
|
patchPointMap,
|
||||||
|
|
||||||
@ -3410,6 +3410,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh
|
|||||||
writeMeshStats(mesh, Pout);
|
writeMeshStats(mesh, Pout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_));
|
||||||
|
|
||||||
return autoPtr<mapPolyMesh>
|
return autoPtr<mapPolyMesh>
|
||||||
(
|
(
|
||||||
new mapPolyMesh
|
new mapPolyMesh
|
||||||
@ -3437,7 +3439,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh
|
|||||||
reverseFaceMap_,
|
reverseFaceMap_,
|
||||||
reverseCellMap_,
|
reverseCellMap_,
|
||||||
|
|
||||||
flipFaceFlux_,
|
flipFaceFluxSet,
|
||||||
|
|
||||||
patchPointMap,
|
patchPointMap,
|
||||||
|
|
||||||
|
|||||||
@ -171,13 +171,13 @@ class polyTopoChange
|
|||||||
Map<label> faceFromEdge_;
|
Map<label> faceFromEdge_;
|
||||||
|
|
||||||
//- In mapping whether to reverse the flux.
|
//- In mapping whether to reverse the flux.
|
||||||
labelHashSet flipFaceFlux_;
|
PackedBoolList flipFaceFlux_;
|
||||||
|
|
||||||
//- Zone of face
|
//- Zone of face
|
||||||
Map<label> faceZone_;
|
Map<label> faceZone_;
|
||||||
|
|
||||||
//- Orientation of face in zone
|
//- Orientation of face in zone
|
||||||
Map<bool> faceZoneFlip_;
|
PackedBoolList faceZoneFlip_;
|
||||||
|
|
||||||
//- Active faces
|
//- Active faces
|
||||||
label nActiveFaces_;
|
label nActiveFaces_;
|
||||||
@ -216,8 +216,7 @@ class polyTopoChange
|
|||||||
template<class T>
|
template<class T>
|
||||||
static void renumberKey(const labelList& map, Map<T>&);
|
static void renumberKey(const labelList& map, Map<T>&);
|
||||||
|
|
||||||
//- Renumber elements of list according to map
|
//- Renumber elements of container according to map
|
||||||
static void renumber(const labelList&, DynamicList<label>&);
|
|
||||||
static void renumber(const labelList&, labelHashSet&);
|
static void renumber(const labelList&, labelHashSet&);
|
||||||
//- Special handling of reverse maps which have <-1 in them
|
//- Special handling of reverse maps which have <-1 in them
|
||||||
static void renumberReverseMap(const labelList&, DynamicList<label>&);
|
static void renumberReverseMap(const labelList&, DynamicList<label>&);
|
||||||
@ -225,6 +224,9 @@ class polyTopoChange
|
|||||||
//- Renumber & compact elements of list according to map
|
//- Renumber & compact elements of list according to map
|
||||||
static void renumberCompact(const labelList&, labelList&);
|
static void renumberCompact(const labelList&, labelList&);
|
||||||
|
|
||||||
|
//- Get all set elements as a labelHashSet
|
||||||
|
static labelHashSet getSetIndices(const PackedBoolList&);
|
||||||
|
|
||||||
//- Count number of added and removed quantities from maps.
|
//- Count number of added and removed quantities from maps.
|
||||||
static void countMap
|
static void countMap
|
||||||
(
|
(
|
||||||
|
|||||||
@ -109,7 +109,6 @@ $(derivedFvPatchFields)/directMappedFixedValue/directMappedFixedValueFvPatchFiel
|
|||||||
$(derivedFvPatchFields)/directMappedVelocityFluxFixedValue/directMappedVelocityFluxFixedValueFvPatchField.C
|
$(derivedFvPatchFields)/directMappedVelocityFluxFixedValue/directMappedVelocityFluxFixedValueFvPatchField.C
|
||||||
$(derivedFvPatchFields)/fan/fanFvPatchFields.C
|
$(derivedFvPatchFields)/fan/fanFvPatchFields.C
|
||||||
$(derivedFvPatchFields)/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C
|
$(derivedFvPatchFields)/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C
|
||||||
$(derivedFvPatchFields)/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C
|
|
||||||
$(derivedFvPatchFields)/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.C
|
$(derivedFvPatchFields)/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.C
|
||||||
$(derivedFvPatchFields)/fixedInternalValueFvPatchField/fixedInternalValueFvPatchFields.C
|
$(derivedFvPatchFields)/fixedInternalValueFvPatchField/fixedInternalValueFvPatchFields.C
|
||||||
$(derivedFvPatchFields)/fixedNormalSlip/fixedNormalSlipFvPatchFields.C
|
$(derivedFvPatchFields)/fixedNormalSlip/fixedNormalSlipFvPatchFields.C
|
||||||
@ -148,6 +147,7 @@ $(derivedFvPatchFields)/turbulentInlet/turbulentInletFvPatchFields.C
|
|||||||
$(derivedFvPatchFields)/turbulentIntensityKineticEnergyInlet/turbulentIntensityKineticEnergyInletFvPatchScalarField.C
|
$(derivedFvPatchFields)/turbulentIntensityKineticEnergyInlet/turbulentIntensityKineticEnergyInletFvPatchScalarField.C
|
||||||
$(derivedFvPatchFields)/uniformFixedValue/uniformFixedValueFvPatchFields.C
|
$(derivedFvPatchFields)/uniformFixedValue/uniformFixedValueFvPatchFields.C
|
||||||
$(derivedFvPatchFields)/waveTransmissive/waveTransmissiveFvPatchFields.C
|
$(derivedFvPatchFields)/waveTransmissive/waveTransmissiveFvPatchFields.C
|
||||||
|
$(derivedFvPatchFields)/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C
|
||||||
|
|
||||||
fvsPatchFields = fields/fvsPatchFields
|
fvsPatchFields = fields/fvsPatchFields
|
||||||
$(fvsPatchFields)/fvsPatchField/fvsPatchFields.C
|
$(fvsPatchFields)/fvsPatchField/fvsPatchFields.C
|
||||||
|
|||||||
@ -92,6 +92,7 @@ void Foam::setRefCell
|
|||||||
dict
|
dict
|
||||||
) << "Unable to set reference cell for field " << field.name()
|
) << "Unable to set reference cell for field " << field.name()
|
||||||
<< nl << " Reference point " << refPointName
|
<< nl << " Reference point " << refPointName
|
||||||
|
<< " " << refPointi
|
||||||
<< " found on " << sumHasRef << " domains (should be one)"
|
<< " found on " << sumHasRef << " domains (should be one)"
|
||||||
<< nl << exit(FatalIOError);
|
<< nl << exit(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,149 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H"
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
|
||||||
#include "fvPatchFieldMapper.H"
|
|
||||||
#include "volFields.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(p, iF)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& ptf,
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<scalar, volMesh>& iF,
|
|
||||||
const fvPatchFieldMapper& mapper
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(ptf, p, iF, mapper)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fvPatch& p,
|
|
||||||
const DimensionedField<scalar, volMesh>& iF,
|
|
||||||
const dictionary&
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(p, iF)
|
|
||||||
{
|
|
||||||
fvPatchField<scalar>::operator=(patchInternalField());
|
|
||||||
gradient() = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& wbppsf
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(wbppsf)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& wbppsf,
|
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(wbppsf, iF)
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
void fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::updateCoeffs()
|
|
||||||
{
|
|
||||||
if (updated())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const dictionary& environmentalProperties
|
|
||||||
= db().lookupObject<IOdictionary>("environmentalProperties");
|
|
||||||
|
|
||||||
dimensionedVector g(environmentalProperties.lookup("g"));
|
|
||||||
|
|
||||||
const dictionary& transportProperties
|
|
||||||
= db().lookupObject<IOdictionary>("transportProperties");
|
|
||||||
|
|
||||||
dimensionedScalar beta(transportProperties.lookup("beta"));
|
|
||||||
|
|
||||||
const fvPatchField<scalar>& T =
|
|
||||||
patch().lookupPatchField<volScalarField, scalar>("T");
|
|
||||||
|
|
||||||
gradient() = beta.value()*T.snGrad()*(g.value() & patch().Cf());
|
|
||||||
|
|
||||||
fixedGradientFvPatchScalarField::updateCoeffs();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void fixedFluxBoussinesqBuoyantPressureFvPatchScalarField::write
|
|
||||||
(
|
|
||||||
Ostream& os
|
|
||||||
) const
|
|
||||||
{
|
|
||||||
fixedGradientFvPatchScalarField::write(os);
|
|
||||||
writeEntry("value", os);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
makePatchTypeField
|
|
||||||
(
|
|
||||||
fvPatchScalarField,
|
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
);
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -43,10 +43,27 @@ fixedFluxBuoyantPressureFvPatchScalarField
|
|||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedGradientFvPatchScalarField(p, iF)
|
fixedGradientFvPatchScalarField(p, iF),
|
||||||
|
rhoName_("rho")
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
fixedFluxBuoyantPressureFvPatchScalarField::
|
||||||
|
fixedFluxBuoyantPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedGradientFvPatchScalarField(p, iF),
|
||||||
|
rhoName_(dict.lookupOrDefault<word>("rho", "rho"))
|
||||||
|
{
|
||||||
|
fvPatchField<scalar>::operator=(patchInternalField());
|
||||||
|
gradient() = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField::
|
fixedFluxBuoyantPressureFvPatchScalarField::
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField
|
fixedFluxBuoyantPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
@ -56,43 +73,31 @@ fixedFluxBuoyantPressureFvPatchScalarField
|
|||||||
const fvPatchFieldMapper& mapper
|
const fvPatchFieldMapper& mapper
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedGradientFvPatchScalarField(ptf, p, iF, mapper)
|
fixedGradientFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
|
rhoName_(ptf.rhoName_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField::
|
fixedFluxBuoyantPressureFvPatchScalarField::
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField
|
fixedFluxBuoyantPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fvPatch& p,
|
const fixedFluxBuoyantPressureFvPatchScalarField& ptf
|
||||||
const DimensionedField<scalar, volMesh>& iF,
|
|
||||||
const dictionary&
|
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedGradientFvPatchScalarField(p, iF)
|
fixedGradientFvPatchScalarField(ptf),
|
||||||
{
|
rhoName_(ptf.rhoName_)
|
||||||
fvPatchField<scalar>::operator=(patchInternalField());
|
|
||||||
gradient() = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField::
|
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
|
||||||
const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf
|
|
||||||
)
|
|
||||||
:
|
|
||||||
fixedGradientFvPatchScalarField(wbppsf)
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField::
|
fixedFluxBuoyantPressureFvPatchScalarField::
|
||||||
fixedFluxBuoyantPressureFvPatchScalarField
|
fixedFluxBuoyantPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf,
|
const fixedFluxBuoyantPressureFvPatchScalarField& ptf,
|
||||||
const DimensionedField<scalar, volMesh>& iF
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
fixedGradientFvPatchScalarField(wbppsf, iF)
|
fixedGradientFvPatchScalarField(ptf, iF),
|
||||||
|
rhoName_(ptf.rhoName_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -111,7 +116,7 @@ void fixedFluxBuoyantPressureFvPatchScalarField::updateCoeffs()
|
|||||||
dimensionedVector g(environmentalProperties.lookup("g"));
|
dimensionedVector g(environmentalProperties.lookup("g"));
|
||||||
|
|
||||||
const fvPatchField<scalar>& rho =
|
const fvPatchField<scalar>& rho =
|
||||||
patch().lookupPatchField<volScalarField, scalar>("rho");
|
patch().lookupPatchField<volScalarField, scalar>(rhoName_);
|
||||||
|
|
||||||
// If the variable name is "pd" assume it is p - rho*g.h
|
// If the variable name is "pd" assume it is p - rho*g.h
|
||||||
// and set the gradient appropriately.
|
// and set the gradient appropriately.
|
||||||
@ -132,6 +137,7 @@ void fixedFluxBuoyantPressureFvPatchScalarField::updateCoeffs()
|
|||||||
void fixedFluxBuoyantPressureFvPatchScalarField::write(Ostream& os) const
|
void fixedFluxBuoyantPressureFvPatchScalarField::write(Ostream& os) const
|
||||||
{
|
{
|
||||||
fixedGradientFvPatchScalarField::write(os);
|
fixedGradientFvPatchScalarField::write(os);
|
||||||
|
os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl;
|
||||||
writeEntry("value", os);
|
writeEntry("value", os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,11 @@ class fixedFluxBuoyantPressureFvPatchScalarField
|
|||||||
:
|
:
|
||||||
public fixedGradientFvPatchScalarField
|
public fixedGradientFvPatchScalarField
|
||||||
{
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Name of the density field used to calculate the buoyancy force
|
||||||
|
word rhoName_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,6 @@ License
|
|||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFields.H"
|
#include "surfaceFields.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,168 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "uniformDensityHydrostaticPressureFvPatchScalarField.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "surfaceFields.H"
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField::
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF),
|
||||||
|
rho_(0.0),
|
||||||
|
pRefValue_(0.0),
|
||||||
|
pRefPoint_(vector::zero)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField::
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(p, iF),
|
||||||
|
rho_(readScalar(dict.lookup("rho"))),
|
||||||
|
pRefValue_(readScalar(dict.lookup("pRefValue"))),
|
||||||
|
pRefPoint_(dict.lookup("pRefPoint"))
|
||||||
|
{
|
||||||
|
if (dict.found("value"))
|
||||||
|
{
|
||||||
|
fvPatchField<scalar>::operator=
|
||||||
|
(
|
||||||
|
scalarField("value", dict, p.size())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evaluate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField::
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const uniformDensityHydrostaticPressureFvPatchScalarField& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
|
rho_(ptf.rho_),
|
||||||
|
pRefValue_(ptf.pRefValue_),
|
||||||
|
pRefPoint_(ptf.pRefPoint_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField::
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const uniformDensityHydrostaticPressureFvPatchScalarField& ptf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(ptf),
|
||||||
|
rho_(ptf.rho_),
|
||||||
|
pRefValue_(ptf.pRefValue_),
|
||||||
|
pRefPoint_(ptf.pRefPoint_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField::
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
(
|
||||||
|
const uniformDensityHydrostaticPressureFvPatchScalarField& ptf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValueFvPatchScalarField(ptf, iF),
|
||||||
|
rho_(ptf.rho_),
|
||||||
|
pRefValue_(ptf.pRefValue_),
|
||||||
|
pRefPoint_(ptf.pRefPoint_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::uniformDensityHydrostaticPressureFvPatchScalarField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const dictionary& environmentalProperties
|
||||||
|
= db().lookupObject<IOdictionary>("environmentalProperties");
|
||||||
|
|
||||||
|
dimensionedVector g(environmentalProperties.lookup("g"));
|
||||||
|
|
||||||
|
operator==
|
||||||
|
(
|
||||||
|
pRefValue_
|
||||||
|
+ rho_*((g.value() & patch().Cf()) - (g.value() & pRefPoint_))
|
||||||
|
);
|
||||||
|
|
||||||
|
fixedValueFvPatchScalarField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::uniformDensityHydrostaticPressureFvPatchScalarField::write
|
||||||
|
(
|
||||||
|
Ostream& os
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
fvPatchScalarField::write(os);
|
||||||
|
os.writeKeyword("rho") << rho_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("pRefValue") << pRefValue_ << token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("pRefPoint") << pRefPoint_ << token::END_STATEMENT << nl;
|
||||||
|
writeEntry("value", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -23,23 +23,24 @@ License
|
|||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
Foam::uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Boundary condition on pressure for use with buoyant solvers employing the
|
Hydrostatic pressure boundary condition calculated as
|
||||||
Boussinesq approximation to balance the flux generated by the temperature
|
|
||||||
gradient.
|
pRefValue + rho*g.(x - pRefPoint)
|
||||||
|
|
||||||
|
where rho is provided and assumed uniform.
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C
|
uniformDensityHydrostaticPressureFvPatchScalarField.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H
|
#ifndef uniformDensityHydrostaticPressureFvPatchScalarField_H
|
||||||
#define fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H
|
#define uniformDensityHydrostaticPressureFvPatchScalarField_H
|
||||||
|
|
||||||
#include "fvPatchFields.H"
|
#include "fixedValueFvPatchFields.H"
|
||||||
#include "fixedGradientFvPatchFields.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -47,30 +48,42 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class fixedFluxBoussinesqBuoyantPressureFvPatchScalarField Declaration
|
Class uniformDensityHydrostaticPressureFvPatch Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
class uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
:
|
:
|
||||||
public fixedGradientFvPatchScalarField
|
public fixedValueFvPatchScalarField
|
||||||
{
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Constant density in the far-field
|
||||||
|
scalar rho_;
|
||||||
|
|
||||||
|
//- Reference pressure
|
||||||
|
scalar pRefValue_;
|
||||||
|
|
||||||
|
//- Reference pressure location
|
||||||
|
vector pRefPoint_;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("fixedFluxBoussinesqBuoyantPressure");
|
TypeName("uniformDensityHydrostaticPressure");
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from patch and internal field
|
//- Construct from patch and internal field
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fvPatch&,
|
const fvPatch&,
|
||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct from patch, internal field and dictionary
|
//- Construct from patch, internal field and dictionary
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fvPatch&,
|
const fvPatch&,
|
||||||
const DimensionedField<scalar, volMesh>&,
|
const DimensionedField<scalar, volMesh>&,
|
||||||
@ -78,20 +91,19 @@ public:
|
|||||||
);
|
);
|
||||||
|
|
||||||
//- Construct by mapping given
|
//- Construct by mapping given
|
||||||
// fixedFluxBoussinesqBuoyantPressureFvPatchScalarField onto a new
|
// uniformDensityHydrostaticPressureFvPatchScalarField onto a new patch
|
||||||
// patch
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
|
||||||
(
|
(
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&,
|
const uniformDensityHydrostaticPressureFvPatchScalarField&,
|
||||||
const fvPatch&,
|
const fvPatch&,
|
||||||
const DimensionedField<scalar, volMesh>&,
|
const DimensionedField<scalar, volMesh>&,
|
||||||
const fvPatchFieldMapper&
|
const fvPatchFieldMapper&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct as copy
|
//- Construct as copy
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&
|
const uniformDensityHydrostaticPressureFvPatchScalarField&
|
||||||
);
|
);
|
||||||
|
|
||||||
//- Construct and return a clone
|
//- Construct and return a clone
|
||||||
@ -99,14 +111,14 @@ public:
|
|||||||
{
|
{
|
||||||
return tmp<fvPatchScalarField>
|
return tmp<fvPatchScalarField>
|
||||||
(
|
(
|
||||||
new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField(*this)
|
new uniformDensityHydrostaticPressureFvPatchScalarField(*this)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Construct as copy setting internal field reference
|
//- Construct as copy setting internal field reference
|
||||||
fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&,
|
const uniformDensityHydrostaticPressureFvPatchScalarField&,
|
||||||
const DimensionedField<scalar, volMesh>&
|
const DimensionedField<scalar, volMesh>&
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -118,7 +130,7 @@ public:
|
|||||||
{
|
{
|
||||||
return tmp<fvPatchScalarField>
|
return tmp<fvPatchScalarField>
|
||||||
(
|
(
|
||||||
new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField
|
new uniformDensityHydrostaticPressureFvPatchScalarField
|
||||||
(
|
(
|
||||||
*this,
|
*this,
|
||||||
iF
|
iF
|
||||||
@ -129,8 +141,52 @@ public:
|
|||||||
|
|
||||||
// Member functions
|
// Member functions
|
||||||
|
|
||||||
//- Update the coefficients associated with the patch field
|
// Access
|
||||||
virtual void updateCoeffs();
|
|
||||||
|
//- Return the constant density in the far-field
|
||||||
|
scalar rho() const
|
||||||
|
{
|
||||||
|
return rho_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return reference to the constant density in the far-field
|
||||||
|
// to allow adjustment
|
||||||
|
scalar& rho()
|
||||||
|
{
|
||||||
|
return rho_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the reference pressure
|
||||||
|
scalar pRefValue() const
|
||||||
|
{
|
||||||
|
return pRefValue_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return reference to the reference pressure to allow adjustment
|
||||||
|
scalar& pRefValue()
|
||||||
|
{
|
||||||
|
return pRefValue_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return the pressure reference location
|
||||||
|
const vector& pRefPoint() const
|
||||||
|
{
|
||||||
|
return pRefPoint_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return reference to the pressure reference location
|
||||||
|
// to allow adjustment
|
||||||
|
vector& pRefPoint()
|
||||||
|
{
|
||||||
|
return pRefPoint_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
|
||||||
//- Write
|
//- Write
|
||||||
virtual void write(Ostream&) const;
|
virtual void write(Ostream&) const;
|
||||||
@ -30,5 +30,6 @@ pointPatchFields/derived/angularOscillatingVelocity/angularOscillatingVelocityPo
|
|||||||
pointPatchFields/derived/oscillatingDisplacement/oscillatingDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/oscillatingDisplacement/oscillatingDisplacementPointPatchVectorField.C
|
||||||
pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C
|
||||||
pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C
|
pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C
|
||||||
|
pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libfvMotionSolvers
|
LIB = $(FOAM_LIBBIN)/libfvMotionSolvers
|
||||||
|
|||||||
@ -0,0 +1,514 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2007 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "surfaceDisplacementPointPatchVectorField.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "Time.H"
|
||||||
|
#include "transformField.H"
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "displacementLaplacianFvMotionSolver.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char*
|
||||||
|
NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3>::
|
||||||
|
names[] =
|
||||||
|
{
|
||||||
|
"nearest",
|
||||||
|
"pointNormal",
|
||||||
|
"fixedNormal"
|
||||||
|
};
|
||||||
|
|
||||||
|
const NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3>
|
||||||
|
surfaceDisplacementPointPatchVectorField::projectModeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void surfaceDisplacementPointPatchVectorField::calcProjection
|
||||||
|
(
|
||||||
|
vectorField& displacement
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
const polyMesh& mesh = patch().boundaryMesh().mesh()();
|
||||||
|
const pointField& localPoints = patch().localPoints();
|
||||||
|
const labelList& meshPoints = patch().meshPoints();
|
||||||
|
|
||||||
|
//const scalar deltaT = mesh.time().deltaT().value();
|
||||||
|
|
||||||
|
// Construct large enough vector in direction of projectDir so
|
||||||
|
// we're guaranteed to hit something.
|
||||||
|
|
||||||
|
//- Per point projection vector:
|
||||||
|
const scalar projectLen = mag(mesh.bounds().max()-mesh.bounds().min());
|
||||||
|
|
||||||
|
// For case of fixed projection vector:
|
||||||
|
vector projectVec;
|
||||||
|
if (projectMode_ == FIXEDNORMAL)
|
||||||
|
{
|
||||||
|
vector n = projectDir_/mag(projectDir_);
|
||||||
|
projectVec = projectLen*n;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get fixed points (bit of a hack)
|
||||||
|
const pointZone* zonePtr = NULL;
|
||||||
|
|
||||||
|
if (frozenPointsZone_.size() > 0)
|
||||||
|
{
|
||||||
|
const pointZoneMesh& pZones = mesh.pointZones();
|
||||||
|
|
||||||
|
zonePtr = &pZones[pZones.findZoneID(frozenPointsZone_)];
|
||||||
|
|
||||||
|
Pout<< "surfaceDisplacementPointPatchVectorField : Fixing all "
|
||||||
|
<< zonePtr->size() << " points in pointZone " << zonePtr->name()
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the starting locations from the motionSolver
|
||||||
|
const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver>
|
||||||
|
(
|
||||||
|
"dynamicMeshDict"
|
||||||
|
).points0();
|
||||||
|
|
||||||
|
|
||||||
|
pointField start(meshPoints.size());
|
||||||
|
forAll(start, i)
|
||||||
|
{
|
||||||
|
start[i] = points0[meshPoints[i]] + displacement[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
label nNotProjected = 0;
|
||||||
|
|
||||||
|
if (projectMode_ == NEAREST)
|
||||||
|
{
|
||||||
|
List<pointIndexHit> nearest;
|
||||||
|
labelList hitSurfaces;
|
||||||
|
surfaces().findNearest
|
||||||
|
(
|
||||||
|
start,
|
||||||
|
scalarField(start.size(), sqr(projectLen)),
|
||||||
|
hitSurfaces,
|
||||||
|
nearest
|
||||||
|
);
|
||||||
|
|
||||||
|
forAll(nearest, i)
|
||||||
|
{
|
||||||
|
if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0))
|
||||||
|
{
|
||||||
|
// Fixed point. Reset to point0 location.
|
||||||
|
displacement[i] = points0[meshPoints[i]] - localPoints[i];
|
||||||
|
}
|
||||||
|
else if (nearest[i].hit())
|
||||||
|
{
|
||||||
|
displacement[i] =
|
||||||
|
nearest[i].hitPoint()
|
||||||
|
- points0[meshPoints[i]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nNotProjected++;
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Pout<< " point:" << meshPoints[i]
|
||||||
|
<< " coord:" << localPoints[i]
|
||||||
|
<< " did not find any surface within " << projectLen
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Do tests on all points. Combine later on.
|
||||||
|
|
||||||
|
// 1. Check if already on surface
|
||||||
|
List<pointIndexHit> nearest;
|
||||||
|
{
|
||||||
|
labelList nearestSurface;
|
||||||
|
surfaces().findNearest
|
||||||
|
(
|
||||||
|
start,
|
||||||
|
scalarField(start.size(), sqr(SMALL)),
|
||||||
|
nearestSurface,
|
||||||
|
nearest
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. intersection. (combined later on with information from nearest
|
||||||
|
// above)
|
||||||
|
vectorField projectVecs(start.size(), projectVec);
|
||||||
|
|
||||||
|
if (projectMode_ == POINTNORMAL)
|
||||||
|
{
|
||||||
|
projectVecs = projectLen*patch().pointNormals();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Knock out any wedge component
|
||||||
|
scalarField offset(start.size(), 0.0);
|
||||||
|
if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents)
|
||||||
|
{
|
||||||
|
forAll(offset, i)
|
||||||
|
{
|
||||||
|
offset[i] = start[i][wedgePlane_];
|
||||||
|
start[i][wedgePlane_] = 0;
|
||||||
|
projectVecs[i][wedgePlane_] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<pointIndexHit> rightHit;
|
||||||
|
{
|
||||||
|
labelList rightSurf;
|
||||||
|
surfaces().findAnyIntersection
|
||||||
|
(
|
||||||
|
start,
|
||||||
|
start+projectVecs,
|
||||||
|
rightSurf,
|
||||||
|
rightHit
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<pointIndexHit> leftHit;
|
||||||
|
{
|
||||||
|
labelList leftSurf;
|
||||||
|
surfaces().findAnyIntersection
|
||||||
|
(
|
||||||
|
start,
|
||||||
|
start-projectVecs,
|
||||||
|
leftSurf,
|
||||||
|
leftHit
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Choose either -fixed, nearest, right, left.
|
||||||
|
forAll(displacement, i)
|
||||||
|
{
|
||||||
|
if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0))
|
||||||
|
{
|
||||||
|
// Fixed point. Reset to point0 location.
|
||||||
|
displacement[i] = points0[meshPoints[i]] - localPoints[i];
|
||||||
|
}
|
||||||
|
else if (nearest[i].hit())
|
||||||
|
{
|
||||||
|
// Found nearest.
|
||||||
|
displacement[i] =
|
||||||
|
nearest[i].hitPoint()
|
||||||
|
- points0[meshPoints[i]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pointIndexHit interPt;
|
||||||
|
|
||||||
|
if (rightHit[i].hit())
|
||||||
|
{
|
||||||
|
if (leftHit[i].hit())
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
magSqr(rightHit[i].hitPoint()-start[i])
|
||||||
|
< magSqr(leftHit[i].hitPoint()-start[i])
|
||||||
|
)
|
||||||
|
{
|
||||||
|
interPt = rightHit[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
interPt = leftHit[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
interPt = rightHit[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (leftHit[i].hit())
|
||||||
|
{
|
||||||
|
interPt = leftHit[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (interPt.hit())
|
||||||
|
{
|
||||||
|
if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents)
|
||||||
|
{
|
||||||
|
interPt.rawPoint()[wedgePlane_] += offset[i];
|
||||||
|
}
|
||||||
|
displacement[i] = interPt.rawPoint()-points0[meshPoints[i]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nNotProjected++;
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Pout<< " point:" << meshPoints[i]
|
||||||
|
<< " coord:" << localPoints[i]
|
||||||
|
<< " did not find any intersection between"
|
||||||
|
<< " ray from " << start[i]-projectVecs[i]
|
||||||
|
<< " to " << start[i]+projectVecs[i] << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reduce(nNotProjected, sumOp<label>());
|
||||||
|
|
||||||
|
if (nNotProjected > 0)
|
||||||
|
{
|
||||||
|
Info<< "surfaceDisplacement :"
|
||||||
|
<< " on patch " << patch().name()
|
||||||
|
<< " did not project " << nNotProjected
|
||||||
|
<< " out of " << returnReduce(localPoints.size(), sumOp<label>())
|
||||||
|
<< " points." << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
surfaceDisplacementPointPatchVectorField::
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchVectorField(p, iF),
|
||||||
|
velocity_(vector::zero),
|
||||||
|
projectMode_(NEAREST),
|
||||||
|
projectDir_(vector::zero),
|
||||||
|
wedgePlane_(-1)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
surfaceDisplacementPointPatchVectorField::
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchVectorField(p, iF, dict),
|
||||||
|
velocity_(dict.lookup("velocity")),
|
||||||
|
surfacesDict_(dict.subDict("geometry")),
|
||||||
|
projectMode_(projectModeNames_.read(dict.lookup("projectMode"))),
|
||||||
|
projectDir_(dict.lookup("projectDirection")),
|
||||||
|
wedgePlane_(readLabel(dict.lookup("wedgePlane"))),
|
||||||
|
frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null))
|
||||||
|
{
|
||||||
|
if (velocity_.x() < 0 || velocity_.y() < 0 || velocity_.z() < 0)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"surfaceDisplacementPointPatchVectorField::\n"
|
||||||
|
"surfaceDisplacementPointPatchVectorField\n"
|
||||||
|
"(\n"
|
||||||
|
" const pointPatch& p,\n"
|
||||||
|
" const DimensionedField<vector, pointMesh>& iF,\n"
|
||||||
|
" const dictionary& dict\n"
|
||||||
|
")\n"
|
||||||
|
) << "All components of velocity have to be positive : "
|
||||||
|
<< velocity_ << nl
|
||||||
|
<< "Set velocity components to a great value if no clipping"
|
||||||
|
<< " necessary." << exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
surfaceDisplacementPointPatchVectorField::
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField& ppf,
|
||||||
|
const pointPatch& p,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF,
|
||||||
|
const pointPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchVectorField(ppf, p, iF, mapper),
|
||||||
|
velocity_(ppf.velocity_),
|
||||||
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
|
projectMode_(ppf.projectMode_),
|
||||||
|
projectDir_(ppf.projectDir_),
|
||||||
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
surfaceDisplacementPointPatchVectorField::
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField& ppf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchVectorField(ppf),
|
||||||
|
velocity_(ppf.velocity_),
|
||||||
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
|
projectMode_(ppf.projectMode_),
|
||||||
|
projectDir_(ppf.projectDir_),
|
||||||
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
surfaceDisplacementPointPatchVectorField::
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField& ppf,
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fixedValuePointPatchVectorField(ppf, iF),
|
||||||
|
velocity_(ppf.velocity_),
|
||||||
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
|
projectMode_(ppf.projectMode_),
|
||||||
|
projectDir_(ppf.projectDir_),
|
||||||
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
const searchableSurfaces&
|
||||||
|
surfaceDisplacementPointPatchVectorField::surfaces() const
|
||||||
|
{
|
||||||
|
if (surfacesPtr_.empty())
|
||||||
|
{
|
||||||
|
surfacesPtr_.reset
|
||||||
|
(
|
||||||
|
new searchableSurfaces
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"abc", // dummy name
|
||||||
|
db().time().constant(), // directory
|
||||||
|
"triSurface", // instance
|
||||||
|
db().time(), // registry
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
),
|
||||||
|
surfacesDict_
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return surfacesPtr_();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void surfaceDisplacementPointPatchVectorField::updateCoeffs()
|
||||||
|
{
|
||||||
|
if (this->updated())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const polyMesh& mesh = patch().boundaryMesh().mesh()();
|
||||||
|
|
||||||
|
vectorField currentDisplacement = this->patchInternalField();
|
||||||
|
|
||||||
|
// Calculate intersections with surface w.r.t points0.
|
||||||
|
vectorField displacement(currentDisplacement);
|
||||||
|
calcProjection(displacement);
|
||||||
|
|
||||||
|
// offset wrt current displacement
|
||||||
|
vectorField offset = displacement-currentDisplacement;
|
||||||
|
|
||||||
|
// Clip offset to maximum displacement possible: velocity*timestep
|
||||||
|
|
||||||
|
const scalar deltaT = mesh.time().deltaT().value();
|
||||||
|
const vector clipVelocity = velocity_*deltaT;
|
||||||
|
|
||||||
|
forAll(displacement, i)
|
||||||
|
{
|
||||||
|
vector& d = offset[i];
|
||||||
|
|
||||||
|
for (direction cmpt = 0; cmpt < vector::nComponents; cmpt++)
|
||||||
|
{
|
||||||
|
if (d[cmpt] < 0)
|
||||||
|
{
|
||||||
|
d[cmpt] = max(d[cmpt], -clipVelocity[cmpt]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d[cmpt] = min(d[cmpt], clipVelocity[cmpt]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->operator==(currentDisplacement+offset);
|
||||||
|
|
||||||
|
fixedValuePointPatchVectorField::updateCoeffs();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void surfaceDisplacementPointPatchVectorField::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
fixedValuePointPatchVectorField::write(os);
|
||||||
|
os.writeKeyword("velocity") << velocity_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("geometry") << surfacesDict_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("projectMode") << projectModeNames_[projectMode_]
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("projectDirection") << projectDir_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
os.writeKeyword("wedgePlane") << wedgePlane_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
if (frozenPointsZone_ != word::null)
|
||||||
|
{
|
||||||
|
os.writeKeyword("frozenPointsZone") << frozenPointsZone_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePointPatchTypeField
|
||||||
|
(
|
||||||
|
fixedValuePointPatchVectorField,
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,223 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 1991-2007 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 2 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, write to the Free Software Foundation,
|
||||||
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Class
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
|
||||||
|
Description
|
||||||
|
Displacement fixed by projection onto triSurface.
|
||||||
|
Use in a displacement fvMotionSolver
|
||||||
|
as a bc on the pointDisplacement field.
|
||||||
|
|
||||||
|
Calculates the projection onto the surface according
|
||||||
|
to the projectMode
|
||||||
|
- NEAREST : nearest
|
||||||
|
- POINTNORMAL : intersection with point normal
|
||||||
|
- FIXEDNORMAL : intersection with fixed vector
|
||||||
|
|
||||||
|
This displacement is then clipped with the specified velocity * deltaT.
|
||||||
|
|
||||||
|
Optionally (intersection only) removes a component ("wedgePlane") to
|
||||||
|
stay in 2D.
|
||||||
|
|
||||||
|
Needs:
|
||||||
|
- geometry : dictionary with searchableSurfaces. (usually
|
||||||
|
triSurfaceMeshes in constant/triSurface)
|
||||||
|
- projectMode : see above
|
||||||
|
- projectDirection : if projectMode = fixedNormal
|
||||||
|
- wedgePlane : -1 or component to knock out of intersection normal
|
||||||
|
- frozenPointsZone : empty or name of pointZone containing points
|
||||||
|
that do not move
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
surfaceDisplacementPointPatchVectorField.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef surfaceDisplacementPointPatchVectorField_H
|
||||||
|
#define surfaceDisplacementPointPatchVectorField_H
|
||||||
|
|
||||||
|
#include "pointPatchFields.H"
|
||||||
|
#include "fixedValuePointPatchFields.H"
|
||||||
|
#include "searchableSurfaces.H"
|
||||||
|
#include "Switch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class surfaceDisplacementPointPatchVectorField Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class surfaceDisplacementPointPatchVectorField
|
||||||
|
:
|
||||||
|
public fixedValuePointPatchVectorField
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public data types
|
||||||
|
|
||||||
|
enum projectMode
|
||||||
|
{
|
||||||
|
NEAREST,
|
||||||
|
POINTNORMAL,
|
||||||
|
FIXEDNORMAL
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- project mode names
|
||||||
|
static const NamedEnum<projectMode, 3> projectModeNames_;
|
||||||
|
|
||||||
|
//- Maximum velocity
|
||||||
|
const vector velocity_;
|
||||||
|
|
||||||
|
//- names of surfaces
|
||||||
|
const dictionary surfacesDict_;
|
||||||
|
|
||||||
|
//- How to project/project onto surface
|
||||||
|
const projectMode projectMode_;
|
||||||
|
|
||||||
|
//- direction to project
|
||||||
|
const vector projectDir_;
|
||||||
|
|
||||||
|
//- plane for 2D wedge case or -1.
|
||||||
|
const label wedgePlane_;
|
||||||
|
|
||||||
|
//- pointZone with frozen points
|
||||||
|
const word frozenPointsZone_;
|
||||||
|
|
||||||
|
//- Demand driven: surface to project
|
||||||
|
mutable autoPtr<searchableSurfaces> surfacesPtr_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Calculate displacement (w.r.t. points0()) to project onto surface
|
||||||
|
void calcProjection(vectorField& displacement) const;
|
||||||
|
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const surfaceDisplacementPointPatchVectorField&);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("surfaceDisplacement");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given patchField<vector> onto a new patch
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField&,
|
||||||
|
const pointPatch&,
|
||||||
|
const DimensionedField<vector, pointMesh>&,
|
||||||
|
const pointPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual autoPtr<pointPatchVectorField> clone() const
|
||||||
|
{
|
||||||
|
return autoPtr<pointPatchVectorField>
|
||||||
|
(
|
||||||
|
new surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
*this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
const surfaceDisplacementPointPatchVectorField&,
|
||||||
|
const DimensionedField<vector, pointMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual autoPtr<pointPatchVectorField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<vector, pointMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return autoPtr<pointPatchVectorField>
|
||||||
|
(
|
||||||
|
new surfaceDisplacementPointPatchVectorField
|
||||||
|
(
|
||||||
|
*this,
|
||||||
|
iF
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
//- Surface to follow. Demand loads surfaceNames.
|
||||||
|
const searchableSurfaces& surfaces() const;
|
||||||
|
|
||||||
|
//- Update the coefficients associated with the patch field
|
||||||
|
virtual void updateCoeffs();
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream&) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -40,7 +40,7 @@ namespace Foam
|
|||||||
|
|
||||||
template<>
|
template<>
|
||||||
const char*
|
const char*
|
||||||
NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3>::
|
NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>::
|
||||||
names[] =
|
names[] =
|
||||||
{
|
{
|
||||||
"nearest",
|
"nearest",
|
||||||
@ -48,8 +48,8 @@ names[] =
|
|||||||
"fixedNormal"
|
"fixedNormal"
|
||||||
};
|
};
|
||||||
|
|
||||||
const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3>
|
const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>
|
||||||
surfaceSlipDisplacementPointPatchVectorField::followModeNames_;
|
surfaceSlipDisplacementPointPatchVectorField::projectModeNames_;
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
@ -95,12 +95,10 @@ void surfaceSlipDisplacementPointPatchVectorField::calcProjection
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the starting locations from the motionSolver
|
// Get the starting locations from the motionSolver
|
||||||
const displacementFvMotionSolver& motionSolver =
|
const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver>
|
||||||
mesh.lookupObject<displacementFvMotionSolver>
|
(
|
||||||
(
|
"dynamicMeshDict"
|
||||||
"dynamicMeshDict"
|
).points0();
|
||||||
);
|
|
||||||
const pointField& points0 = motionSolver.points0();
|
|
||||||
|
|
||||||
|
|
||||||
pointField start(meshPoints.size());
|
pointField start(meshPoints.size());
|
||||||
@ -326,7 +324,7 @@ surfaceSlipDisplacementPointPatchVectorField
|
|||||||
:
|
:
|
||||||
pointPatchVectorField(p, iF, dict),
|
pointPatchVectorField(p, iF, dict),
|
||||||
surfacesDict_(dict.subDict("geometry")),
|
surfacesDict_(dict.subDict("geometry")),
|
||||||
projectMode_(followModeNames_.read(dict.lookup("followMode"))),
|
projectMode_(projectModeNames_.read(dict.lookup("projectMode"))),
|
||||||
projectDir_(dict.lookup("projectDirection")),
|
projectDir_(dict.lookup("projectDirection")),
|
||||||
wedgePlane_(readLabel(dict.lookup("wedgePlane"))),
|
wedgePlane_(readLabel(dict.lookup("wedgePlane"))),
|
||||||
frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null))
|
frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null))
|
||||||
@ -343,11 +341,11 @@ surfaceSlipDisplacementPointPatchVectorField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
pointPatchVectorField(p, iF),
|
pointPatchVectorField(p, iF),
|
||||||
surfacesDict_(ppf.surfacesDict()),
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
projectMode_(ppf.projectMode()),
|
projectMode_(ppf.projectMode_),
|
||||||
projectDir_(ppf.projectDir()),
|
projectDir_(ppf.projectDir_),
|
||||||
wedgePlane_(ppf.wedgePlane()),
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
frozenPointsZone_(ppf.frozenPointsZone())
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -358,11 +356,11 @@ surfaceSlipDisplacementPointPatchVectorField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
pointPatchVectorField(ppf),
|
pointPatchVectorField(ppf),
|
||||||
surfacesDict_(ppf.surfacesDict()),
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
projectMode_(ppf.projectMode()),
|
projectMode_(ppf.projectMode_),
|
||||||
projectDir_(ppf.projectDir()),
|
projectDir_(ppf.projectDir_),
|
||||||
wedgePlane_(ppf.wedgePlane()),
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
frozenPointsZone_(ppf.frozenPointsZone())
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -374,11 +372,11 @@ surfaceSlipDisplacementPointPatchVectorField
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
pointPatchVectorField(ppf, iF),
|
pointPatchVectorField(ppf, iF),
|
||||||
surfacesDict_(ppf.surfacesDict()),
|
surfacesDict_(ppf.surfacesDict_),
|
||||||
projectMode_(ppf.projectMode()),
|
projectMode_(ppf.projectMode_),
|
||||||
projectDir_(ppf.projectDir()),
|
projectDir_(ppf.projectDir_),
|
||||||
wedgePlane_(ppf.wedgePlane()),
|
wedgePlane_(ppf.wedgePlane_),
|
||||||
frozenPointsZone_(ppf.frozenPointsZone())
|
frozenPointsZone_(ppf.frozenPointsZone_)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -435,7 +433,7 @@ void surfaceSlipDisplacementPointPatchVectorField::write(Ostream& os) const
|
|||||||
pointPatchVectorField::write(os);
|
pointPatchVectorField::write(os);
|
||||||
os.writeKeyword("geometry") << surfacesDict_
|
os.writeKeyword("geometry") << surfacesDict_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("followMode") << followModeNames_[projectMode_]
|
os.writeKeyword("projectMode") << projectModeNames_[projectMode_]
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
os.writeKeyword("projectDirection") << projectDir_
|
os.writeKeyword("projectDirection") << projectDir_
|
||||||
<< token::END_STATEMENT << nl;
|
<< token::END_STATEMENT << nl;
|
||||||
|
|||||||
@ -26,8 +26,10 @@ Class
|
|||||||
Foam::surfaceSlipDisplacementPointPatchVectorField
|
Foam::surfaceSlipDisplacementPointPatchVectorField
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Displacement follows a triSurface. Use in a displacement fvMotionSolver.
|
Displacement follows a triSurface. Use in a displacement fvMotionSolver
|
||||||
Following is either
|
as a bc on the pointDisplacement field.
|
||||||
|
Following is done by calculating the projection onto the surface according
|
||||||
|
to the projectMode
|
||||||
- NEAREST : nearest
|
- NEAREST : nearest
|
||||||
- POINTNORMAL : intersection with point normal
|
- POINTNORMAL : intersection with point normal
|
||||||
- FIXEDNORMAL : intersection with fixed vector
|
- FIXEDNORMAL : intersection with fixed vector
|
||||||
@ -36,9 +38,10 @@ Description
|
|||||||
stay in 2D.
|
stay in 2D.
|
||||||
|
|
||||||
Needs:
|
Needs:
|
||||||
- projectSurfaces : names of triSurfaceMeshes (in constant/triSurface)
|
- geometry : dictionary with searchableSurfaces. (usually
|
||||||
- followMode : see above
|
triSurfaceMeshes in constant/triSurface)
|
||||||
- projectDirection : if followMode = fixedNormal
|
- projectMode : see above
|
||||||
|
- projectDirection : if projectMode = fixedNormal
|
||||||
- wedgePlane : -1 or component to knock out of intersection normal
|
- wedgePlane : -1 or component to knock out of intersection normal
|
||||||
- frozenPointsZone : empty or name of pointZone containing points
|
- frozenPointsZone : empty or name of pointZone containing points
|
||||||
that do not move
|
that do not move
|
||||||
@ -72,7 +75,7 @@ public:
|
|||||||
|
|
||||||
// Public data types
|
// Public data types
|
||||||
|
|
||||||
enum followMode
|
enum projectMode
|
||||||
{
|
{
|
||||||
NEAREST,
|
NEAREST,
|
||||||
POINTNORMAL,
|
POINTNORMAL,
|
||||||
@ -83,14 +86,14 @@ private:
|
|||||||
|
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
//- follow mode names
|
//- project mode names
|
||||||
static const NamedEnum<followMode, 3> followModeNames_;
|
static const NamedEnum<projectMode, 3> projectModeNames_;
|
||||||
|
|
||||||
//- names of surfaces
|
//- names of surfaces
|
||||||
const dictionary surfacesDict_;
|
const dictionary surfacesDict_;
|
||||||
|
|
||||||
//- How to follow/project onto surface
|
//- How to project/project onto surface
|
||||||
const followMode projectMode_;
|
const projectMode projectMode_;
|
||||||
|
|
||||||
//- direction to project
|
//- direction to project
|
||||||
const vector projectDir_;
|
const vector projectDir_;
|
||||||
@ -101,13 +104,13 @@ private:
|
|||||||
//- pointZone with frozen points
|
//- pointZone with frozen points
|
||||||
const word frozenPointsZone_;
|
const word frozenPointsZone_;
|
||||||
|
|
||||||
//- Demand driven: surface to follow
|
//- Demand driven: surface to project
|
||||||
mutable autoPtr<searchableSurfaces> surfacesPtr_;
|
mutable autoPtr<searchableSurfaces> surfacesPtr_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Calculate displacement to project onto surface
|
//- Calculate displacement (w.r.t. points0()) to project onto surface
|
||||||
void calcProjection(vectorField& displacement) const;
|
void calcProjection(vectorField& displacement) const;
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
//- Disallow default bitwise assignment
|
||||||
@ -189,40 +192,9 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Surfaces to follow
|
|
||||||
const dictionary& surfacesDict() const
|
|
||||||
{
|
|
||||||
return surfacesDict_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Surface to follow. Demand loads surfaceNames.
|
//- Surface to follow. Demand loads surfaceNames.
|
||||||
const searchableSurfaces& surfaces() const;
|
const searchableSurfaces& surfaces() const;
|
||||||
|
|
||||||
//- Mode of projection/following
|
|
||||||
followMode projectMode() const
|
|
||||||
{
|
|
||||||
return projectMode_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Direction to project back onto surface
|
|
||||||
const vector& projectDir() const
|
|
||||||
{
|
|
||||||
return projectDir_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Normal of wedgeplane (0, 1, 2) or -1. Note: should be obtained
|
|
||||||
// from twoDPointCorrector.
|
|
||||||
label wedgePlane() const
|
|
||||||
{
|
|
||||||
return wedgePlane_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Zone containing frozen points
|
|
||||||
const word& frozenPointsZone() const
|
|
||||||
{
|
|
||||||
return frozenPointsZone_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Update the patch field
|
//- Update the patch field
|
||||||
virtual void evaluate
|
virtual void evaluate
|
||||||
(
|
(
|
||||||
|
|||||||
@ -152,26 +152,26 @@ public:
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
#define makeBinaryCollisionModel(CloudType) \
|
#define makeBinaryCollisionModel(CloudType) \
|
||||||
\
|
\
|
||||||
defineNamedTemplateTypeNameAndDebug \
|
defineNamedTemplateTypeNameAndDebug \
|
||||||
( \
|
( \
|
||||||
BinaryCollisionModel<CloudType>, \
|
BinaryCollisionModel<CloudType>, \
|
||||||
0 \
|
0 \
|
||||||
); \
|
); \
|
||||||
\
|
\
|
||||||
defineTemplateRunTimeSelectionTable \
|
defineTemplateRunTimeSelectionTable \
|
||||||
( \
|
( \
|
||||||
BinaryCollisionModel<CloudType>, \
|
BinaryCollisionModel<CloudType>, \
|
||||||
dictionary \
|
dictionary \
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \
|
#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \
|
||||||
\
|
\
|
||||||
defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \
|
defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \
|
||||||
\
|
\
|
||||||
BinaryCollisionModel<CloudType<ParcelType> >:: \
|
BinaryCollisionModel<CloudType<ParcelType> >:: \
|
||||||
adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \
|
adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \
|
||||||
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
add##SS##CloudType##ParcelType##ConstructorToTable_;
|
||||||
|
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -126,6 +126,7 @@ void Foam::bufferedAccumulator<Type>::setSizes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
Foam::label Foam::bufferedAccumulator<Type>::addToBuffers
|
Foam::label Foam::bufferedAccumulator<Type>::addToBuffers
|
||||||
(
|
(
|
||||||
@ -184,11 +185,10 @@ Foam::Field<Type> Foam::bufferedAccumulator<Type>::averaged() const
|
|||||||
WarningIn
|
WarningIn
|
||||||
(
|
(
|
||||||
"bufferedAccumulator<Type>::averagedbufferedAccumulator() const"
|
"bufferedAccumulator<Type>::averagedbufferedAccumulator() const"
|
||||||
)
|
) << "Averaged correlation function requested but averagesTaken = "
|
||||||
<< "Averaged correlation function requested but averagesTaken = "
|
<< averagesTaken_
|
||||||
<< averagesTaken_
|
<< ". Returning empty field."
|
||||||
<< ". Returning empty field."
|
<< endl;
|
||||||
<< endl;
|
|
||||||
|
|
||||||
return Field<Type>(bufferLength(), pTraits<Type>::zero);
|
return Field<Type>(bufferLength(), pTraits<Type>::zero);
|
||||||
}
|
}
|
||||||
@ -218,8 +218,7 @@ void Foam::bufferedAccumulator<Type>::operator=
|
|||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"bufferedAccumulator<Type>::operator=(const bufferedAccumulator&)"
|
"bufferedAccumulator<Type>::operator=(const bufferedAccumulator&)"
|
||||||
)
|
) << "Attempted assignment to self"
|
||||||
<< "Attempted assignment to self"
|
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -34,9 +34,9 @@ Foam::Ostream&
|
|||||||
Foam::operator<<(Ostream& os, const bufferedAccumulator<Type>& bA)
|
Foam::operator<<(Ostream& os, const bufferedAccumulator<Type>& bA)
|
||||||
{
|
{
|
||||||
|
|
||||||
os<< bA.averagesTaken_
|
os << bA.averagesTaken_
|
||||||
<< static_cast<const List< Field<Type> >&>(bA)
|
<< static_cast<const List< Field<Type> >&>(bA)
|
||||||
<< bA.bufferOffsets();
|
<< bA.bufferOffsets();
|
||||||
|
|
||||||
// Check state of Ostream
|
// Check state of Ostream
|
||||||
os.check
|
os.check
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -138,7 +138,7 @@ void Foam::correlationFunction<Type>::calculateCorrelationFunction
|
|||||||
FatalErrorIn("correlationFunction<Type>::calculateCorrelationFunction")
|
FatalErrorIn("correlationFunction<Type>::calculateCorrelationFunction")
|
||||||
<< "Trying to supply a Field of length"
|
<< "Trying to supply a Field of length"
|
||||||
<< currentValues.size()
|
<< currentValues.size()
|
||||||
<<" to calculate the correlation function. "
|
<< " to calculate the correlation function. "
|
||||||
<< "Expecting a Field of length "
|
<< "Expecting a Field of length "
|
||||||
<< measurandFieldSize() << nl
|
<< measurandFieldSize() << nl
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
@ -205,7 +205,7 @@ Foam::scalar Foam::correlationFunction<Type>::integral() const
|
|||||||
|
|
||||||
scalar cFIntegral = 0.0;
|
scalar cFIntegral = 0.0;
|
||||||
|
|
||||||
for(label v = 0; v < averageCF.size() - 1; v++)
|
for (label v = 0; v < averageCF.size() - 1; v++)
|
||||||
{
|
{
|
||||||
cFIntegral +=
|
cFIntegral +=
|
||||||
0.5
|
0.5
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -155,7 +155,10 @@ public:
|
|||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
|
||||||
friend Ostream& operator<< <Type>
|
friend Ostream& operator<< <Type>
|
||||||
(Ostream&, const correlationFunction<Type>&);
|
(
|
||||||
|
Ostream&,
|
||||||
|
const correlationFunction<Type>&
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -34,10 +34,10 @@ bool Foam::correlationFunction<Type>::writeAveraged(Ostream& os) const
|
|||||||
|
|
||||||
forAll(averageCF, v)
|
forAll(averageCF, v)
|
||||||
{
|
{
|
||||||
os<< v*sampleInterval()
|
os << v*sampleInterval()
|
||||||
<< token::SPACE
|
<< token::SPACE
|
||||||
<< averageCF[v]
|
<< averageCF[v]
|
||||||
<< nl;
|
<< nl;
|
||||||
}
|
}
|
||||||
|
|
||||||
return os.good();
|
return os.good();
|
||||||
@ -51,12 +51,12 @@ Foam::Ostream& Foam::operator<<
|
|||||||
const correlationFunction<Type>& cF
|
const correlationFunction<Type>& cF
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
os<< cF.duration()
|
os << cF.duration()
|
||||||
<< nl << cF.sampleInterval()
|
<< nl << cF.sampleInterval()
|
||||||
<< nl << cF.averagingInterval()
|
<< nl << cF.averagingInterval()
|
||||||
<< nl << cF.sampleSteps()
|
<< nl << cF.sampleSteps()
|
||||||
<< nl << cF.tZeroBuffers()
|
<< nl << cF.tZeroBuffers()
|
||||||
<< nl << static_cast<const bufferedAccumulator<scalar>&>(cF);
|
<< nl << static_cast<const bufferedAccumulator<scalar>&>(cF);
|
||||||
|
|
||||||
// Check state of Ostream
|
// Check state of Ostream
|
||||||
os.check
|
os.check
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -75,7 +75,7 @@ label distribution::totalEntries() const
|
|||||||
<< "sumOfEntries = " << sumOfEntries
|
<< "sumOfEntries = " << sumOfEntries
|
||||||
<< ". This is most likely to be because too many samples "
|
<< ". This is most likely to be because too many samples "
|
||||||
<< "have been added to the bins and the label has 'rolled "
|
<< "have been added to the bins and the label has 'rolled "
|
||||||
<< "round'. Try distribution::approxTotalEntries which "
|
<< "round'. Try distribution::approxTotalEntries which "
|
||||||
<< "returns a scalar." << endl;
|
<< "returns a scalar." << endl;
|
||||||
|
|
||||||
sumOfEntries = -1;
|
sumOfEntries = -1;
|
||||||
@ -336,8 +336,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue)
|
|||||||
*(oldDist[u].second() - oldDist[u-1].second())
|
*(oldDist[u].second() - oldDist[u-1].second())
|
||||||
+
|
+
|
||||||
(
|
(
|
||||||
oldDist[u-1].second() * oldDist[u].first()
|
oldDist[u-1].second()*oldDist[u].first()
|
||||||
- oldDist[u].second() * oldDist[u-1].first()
|
- oldDist[u].second()*oldDist[u-1].first()
|
||||||
)
|
)
|
||||||
/binWidth_;
|
/binWidth_;
|
||||||
}
|
}
|
||||||
@ -348,7 +348,7 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue)
|
|||||||
{
|
{
|
||||||
newDist[u].second() =
|
newDist[u].second() =
|
||||||
(0.5 + scalar(newKey))*-oldDist[u].second()
|
(0.5 + scalar(newKey))*-oldDist[u].second()
|
||||||
+ oldDist[u].second() * (oldDist[u].first() + binWidth_)
|
+ oldDist[u].second()*(oldDist[u].first() + binWidth_)
|
||||||
/binWidth_;
|
/binWidth_;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -358,8 +358,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue)
|
|||||||
*(oldDist[u+1].second() - oldDist[u].second())
|
*(oldDist[u+1].second() - oldDist[u].second())
|
||||||
+
|
+
|
||||||
(
|
(
|
||||||
oldDist[u].second() * oldDist[u+1].first()
|
oldDist[u].second()*oldDist[u+1].first()
|
||||||
- oldDist[u+1].second() * oldDist[u].first()
|
- oldDist[u+1].second()*oldDist[u].first()
|
||||||
)
|
)
|
||||||
/binWidth_;
|
/binWidth_;
|
||||||
}
|
}
|
||||||
@ -395,7 +395,7 @@ List<Pair<scalar> > distribution::raw()
|
|||||||
{
|
{
|
||||||
label key = keys[k];
|
label key = keys[k];
|
||||||
|
|
||||||
rawDist[k].first() = (0.5 + scalar(key)) * binWidth_;
|
rawDist[k].first() = (0.5 + scalar(key))*binWidth_;
|
||||||
|
|
||||||
rawDist[k].second() = scalar((*this)[key]);
|
rawDist[k].second() = scalar((*this)[key]);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -30,7 +30,6 @@ Description
|
|||||||
SourceFiles
|
SourceFiles
|
||||||
distributionI.H
|
distributionI.H
|
||||||
distribution.C
|
distribution.C
|
||||||
distributionIO.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -46,7 +45,7 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class distribution Declaration
|
Class distribution Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class distribution
|
class distribution
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -1,35 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation,
|
|
||||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "distribution.H"
|
|
||||||
#include "IOstreams.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// construct from Istream
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -79,8 +79,12 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellI],
|
findIndex
|
||||||
cellJ) == -1
|
(
|
||||||
|
directInteractionList[cellI],
|
||||||
|
cellJ
|
||||||
|
)
|
||||||
|
== -1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellI].append(cellJ);
|
directInteractionList[cellI].append(cellJ);
|
||||||
@ -91,8 +95,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellJ],
|
findIndex
|
||||||
cellI) == -1
|
(
|
||||||
|
directInteractionList[cellJ],
|
||||||
|
cellI
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellJ].append(cellI);
|
directInteractionList[cellJ].append(cellI);
|
||||||
@ -109,18 +118,16 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
Info<< tab << "Point-Face, Edge-Edge direct interaction list build."
|
Info<< tab << "Point-Face, Edge-Edge direct interaction list build."
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
forAll (mesh.points(), p)
|
forAll(mesh.points(), p)
|
||||||
{
|
{
|
||||||
forAll(mesh.faces(), f)
|
forAll(mesh.faces(), f)
|
||||||
{
|
{
|
||||||
if(il_.testPointFaceDistance(p, f))
|
if (il_.testPointFaceDistance(p, f))
|
||||||
{
|
{
|
||||||
const labelList& pCells(mesh.pointCells()[p]);
|
const labelList& pCells(mesh.pointCells()[p]);
|
||||||
|
|
||||||
const label cellO(mesh.faceOwner()[f]);
|
const label cellO(mesh.faceOwner()[f]);
|
||||||
|
|
||||||
const label cellN(mesh.faceNeighbour()[f]);
|
|
||||||
|
|
||||||
forAll(pCells, pC)
|
forAll(pCells, pC)
|
||||||
{
|
{
|
||||||
const label cellI(pCells[pC]);
|
const label cellI(pCells[pC]);
|
||||||
@ -131,8 +138,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellI],
|
findIndex
|
||||||
cellO) == -1
|
(
|
||||||
|
directInteractionList[cellI],
|
||||||
|
cellO
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellI].append(cellO);
|
directInteractionList[cellI].append(cellO);
|
||||||
@ -143,8 +155,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellO],
|
findIndex
|
||||||
cellI) == -1
|
(
|
||||||
|
directInteractionList[cellO],
|
||||||
|
cellI
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellO].append(cellI);
|
directInteractionList[cellO].append(cellI);
|
||||||
@ -156,12 +173,19 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
// boundary faces will not have neighbour
|
// boundary faces will not have neighbour
|
||||||
// information
|
// information
|
||||||
|
|
||||||
|
const label cellN(mesh.faceNeighbour()[f]);
|
||||||
|
|
||||||
if (cellN > cellI)
|
if (cellN > cellI)
|
||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellI],
|
findIndex
|
||||||
cellN) == -1
|
(
|
||||||
|
directInteractionList[cellI],
|
||||||
|
cellN
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellI].append(cellN);
|
directInteractionList[cellI].append(cellN);
|
||||||
@ -172,8 +196,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellN],
|
findIndex
|
||||||
cellI) == -1
|
(
|
||||||
|
directInteractionList[cellN],
|
||||||
|
cellI
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellN].append(cellI);
|
directInteractionList[cellN].append(cellI);
|
||||||
@ -187,7 +216,7 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
|
|
||||||
label edgeJIndex;
|
label edgeJIndex;
|
||||||
|
|
||||||
forAll (mesh.edges(), edgeIIndex)
|
forAll(mesh.edges(), edgeIIndex)
|
||||||
{
|
{
|
||||||
const edge& eI(mesh.edges()[edgeIIndex]);
|
const edge& eI(mesh.edges()[edgeIIndex]);
|
||||||
|
|
||||||
@ -218,8 +247,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellI],
|
findIndex
|
||||||
cellJ) == -1
|
(
|
||||||
|
directInteractionList[cellI],
|
||||||
|
cellJ
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellI].append(cellJ);
|
directInteractionList[cellI].append(cellJ);
|
||||||
@ -230,8 +264,13 @@ void Foam::directInteractionList::buildDirectInteractionList
|
|||||||
{
|
{
|
||||||
if
|
if
|
||||||
(
|
(
|
||||||
findIndex(directInteractionList[cellJ],
|
findIndex
|
||||||
cellI) == -1
|
(
|
||||||
|
directInteractionList[cellJ],
|
||||||
|
cellI
|
||||||
|
)
|
||||||
|
==
|
||||||
|
-1
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
directInteractionList[cellJ].append(cellI);
|
directInteractionList[cellJ].append(cellI);
|
||||||
@ -272,11 +311,11 @@ Foam::directInteractionList::directInteractionList
|
|||||||
labelListList(il.mesh().nCells()),
|
labelListList(il.mesh().nCells()),
|
||||||
il_(il)
|
il_(il)
|
||||||
{
|
{
|
||||||
if((*this).size() > 1)
|
if ((*this).size() > 1)
|
||||||
{
|
{
|
||||||
buildDirectInteractionList(pointPointListBuild);
|
buildDirectInteractionList(pointPointListBuild);
|
||||||
}
|
}
|
||||||
else if((*this).size() == 1)
|
else if ((*this).size() == 1)
|
||||||
{
|
{
|
||||||
Info<< nl
|
Info<< nl
|
||||||
<< "Single cell mesh, no direct interaction lists required."
|
<< "Single cell mesh, no direct interaction lists required."
|
||||||
@ -305,16 +344,4 @@ Foam::directInteractionList::~directInteractionList()
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -59,6 +59,7 @@ class directInteractionList
|
|||||||
|
|
||||||
const interactionLists& il_;
|
const interactionLists& il_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
void buildDirectInteractionList
|
void buildDirectInteractionList
|
||||||
@ -72,6 +73,7 @@ class directInteractionList
|
|||||||
//- Disallow default bitwise assignment
|
//- Disallow default bitwise assignment
|
||||||
void operator=(const directInteractionList&);
|
void operator=(const directInteractionList&);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
@ -89,6 +91,7 @@ public:
|
|||||||
const interactionLists& il
|
const interactionLists& il
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
|
|
||||||
~directInteractionList();
|
~directInteractionList();
|
||||||
@ -100,12 +103,6 @@ public:
|
|||||||
|
|
||||||
inline const interactionLists& il() const;
|
inline const interactionLists& il() const;
|
||||||
|
|
||||||
// Check
|
|
||||||
|
|
||||||
// Edit
|
|
||||||
|
|
||||||
// Write
|
|
||||||
|
|
||||||
|
|
||||||
// IOstream Operators
|
// IOstream Operators
|
||||||
|
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -24,8 +24,6 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline const Foam::interactionLists& Foam::directInteractionList::il() const
|
inline const Foam::interactionLists& Foam::directInteractionList::il() const
|
||||||
@ -34,7 +32,4 @@ inline const Foam::interactionLists& Foam::directInteractionList::il() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -342,6 +342,7 @@ bool Foam::interactionLists::testPointFaceDistance
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Foam::interactionLists::testPointFaceDistance
|
bool Foam::interactionLists::testPointFaceDistance
|
||||||
(
|
(
|
||||||
const vector& p,
|
const vector& p,
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -52,7 +52,7 @@ namespace Foam
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class interactionLists Declaration
|
Class interactionLists Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class interactionLists
|
class interactionLists
|
||||||
@ -71,6 +71,7 @@ class interactionLists
|
|||||||
|
|
||||||
List<receivingReferralList> cellReceivingReferralLists_;
|
List<receivingReferralList> cellReceivingReferralLists_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Build referralLists which define how to send information
|
//- Build referralLists which define how to send information
|
||||||
@ -83,6 +84,7 @@ class interactionLists
|
|||||||
//- Disallow default bitwise assignment
|
//- Disallow default bitwise assignment
|
||||||
void operator=(const interactionLists&);
|
void operator=(const interactionLists&);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Static data members
|
// Static data members
|
||||||
@ -90,6 +92,7 @@ public:
|
|||||||
//- Tolerance for checking that faces on a patch segment
|
//- Tolerance for checking that faces on a patch segment
|
||||||
static scalar transTol;
|
static scalar transTol;
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct and create all information from the mesh
|
//- Construct and create all information from the mesh
|
||||||
@ -103,6 +106,7 @@ public:
|
|||||||
//- Construct from file
|
//- Construct from file
|
||||||
interactionLists(const polyMesh& mesh);
|
interactionLists(const polyMesh& mesh);
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
|
|
||||||
~interactionLists();
|
~interactionLists();
|
||||||
@ -177,6 +181,7 @@ public:
|
|||||||
const labelList& segmentPoints
|
const labelList& segmentPoints
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
|
||||||
// Access
|
// Access
|
||||||
|
|
||||||
inline const polyMesh& mesh() const;
|
inline const polyMesh& mesh() const;
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -143,7 +143,7 @@ bool operator==
|
|||||||
|
|
||||||
Foam::Istream& Foam::operator>>(Istream& is, receivingReferralList& rRL)
|
Foam::Istream& Foam::operator>>(Istream& is, receivingReferralList& rRL)
|
||||||
{
|
{
|
||||||
is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL);
|
is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL);
|
||||||
|
|
||||||
is.check
|
is.check
|
||||||
(
|
(
|
||||||
@ -160,7 +160,7 @@ Foam::Ostream& Foam::operator<<
|
|||||||
const receivingReferralList& rRL
|
const receivingReferralList& rRL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
os << rRL.sourceProc() << token::SPACE
|
os << rRL.sourceProc() << token::SPACE
|
||||||
<< static_cast< const labelListList& >(rRL);
|
<< static_cast< const labelListList& >(rRL);
|
||||||
|
|
||||||
os.check
|
os.check
|
||||||
@ -171,7 +171,5 @@ Foam::Ostream& Foam::operator<<
|
|||||||
return os;
|
return 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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -24,8 +24,6 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline Foam::label Foam::receivingReferralList::sourceProc() const
|
inline Foam::label Foam::receivingReferralList::sourceProc() const
|
||||||
@ -46,7 +44,4 @@ inline bool operator!=
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -145,7 +145,7 @@ Foam::Istream& Foam::operator>>
|
|||||||
sendingReferralList& sRL
|
sendingReferralList& sRL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
is >> sRL.destinationProc_ >> static_cast<labelList&>(sRL);
|
is >> sRL.destinationProc_ >> static_cast<labelList&>(sRL);
|
||||||
|
|
||||||
is.check("Istream& operator<<(Istream& f, const sendingReferralList& sRL");
|
is.check("Istream& operator<<(Istream& f, const sendingReferralList& sRL");
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ Foam::Ostream& Foam::operator<<
|
|||||||
const sendingReferralList& rL
|
const sendingReferralList& rL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
os << rL.destinationProc() << token::SPACE
|
os << rL.destinationProc() << token::SPACE
|
||||||
<< static_cast< const labelList& >(rL);
|
<< static_cast< const labelList& >(rL);
|
||||||
|
|
||||||
os.check("Ostream& operator<<(Ostream& f, const sendingReferralList& rL");
|
os.check("Ostream& operator<<(Ostream& f, const sendingReferralList& rL");
|
||||||
@ -168,6 +168,4 @@ Foam::Ostream& Foam::operator<<
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
|
|||||||
@ -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) 1991-2009 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -24,8 +24,6 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline Foam::label Foam::sendingReferralList::destinationProc() const
|
inline Foam::label Foam::sendingReferralList::destinationProc() const
|
||||||
@ -46,6 +44,4 @@ inline bool operator!=
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user