Merge branch 'master' of /home/noisy3/OpenFOAM/OpenFOAM-dev

This commit is contained in:
mattijs
2009-06-30 22:21:21 +01:00
237 changed files with 5947 additions and 3446 deletions

View File

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

View File

@ -14,5 +14,5 @@ IOdictionary mdEquilibrationDict
scalar targetTemperature = readScalar scalar targetTemperature = readScalar
( (
mdEquilibrationDict.lookup("equilibrationTargetTemperature") mdEquilibrationDict.lookup("targetTemperature")
); );

View File

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

View File

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

View File

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

View File

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

View File

@ -54,18 +54,17 @@ 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 "initContinuityErrs.H"
#include "readTimeControls.H"
#include "CourantNo.H"
#include "setInitialDeltaT.H"
# include "setRootCase.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
# include "createTime.H"
# include "createMesh.H"
# include "readEnvironmentalProperties.H"
# include "createFields.H"
# include "initContinuityErrs.H"
# include "readTimeControls.H"
# include "CourantNo.H"
# include "setInitialDeltaT.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl; Info<< "\nStarting time loop\n" << endl;
@ -73,26 +72,23 @@ int main(int argc, char *argv[])
{ {
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
# include "readTimeControls.H" #include "readTimeControls.H"
# include "readPISOControls.H" #include "readPISOControls.H"
# include "CourantNo.H" #include "CourantNo.H"
# 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"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -54,15 +54,14 @@ 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 "initContinuityErrs.H"
# include "setRootCase.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
# include "createTime.H"
# include "createMesh.H"
# include "readEnvironmentalProperties.H"
# include "createFields.H"
# include "initContinuityErrs.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl; Info<< "\nStarting time loop\n" << endl;
@ -70,30 +69,27 @@ 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"
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"
<< nl << endl; << nl << endl;
# include "convergenceCheck.H" #include "convergenceCheck.H"
} }
Info<< "End\n" << endl; Info<< "End\n" << endl;

View File

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

View File

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

View File

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

View File

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

View File

@ -65,4 +65,3 @@
dimensionedScalar initialMass = fvc::domainIntegrate(rho); dimensionedScalar initialMass = fvc::domainIntegrate(rho);
dimensionedScalar totalVolume = sum(mesh.V()); dimensionedScalar totalVolume = sum(mesh.V());

View File

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

View File

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

View File

@ -1,8 +0,0 @@
latticeStructures = latticeStructures
velocityDistributions = velocityDistributions
createMolecules.C
molConfig.C
genMolConfig.C
EXE = $(FOAM_APPBIN)/molConfig

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +0,0 @@
vector velocity;
vector momentumSum = vector::zero;
if (velocityDistribution == "uniform")
{
# include "uniform.H"
}
if (velocityDistribution == "maxwellian")
{
# include "maxwellian.H"
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,147 +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
Class
Foam::molConfig
Description
SourceFiles
molConfigI.H
molConfig.C
molConfigIO.C
\*---------------------------------------------------------------------------*/
#ifndef molConfig_H
#define molConfig_H
#include "labelVector.H"
#include "scalar.H"
#include "vector.H"
#include "labelField.H"
#include "scalarField.H"
#include "vectorField.H"
#include "IOField.H"
#include "EulerCoordinateRotation.H"
#include "Random.H"
#include "Time.H"
#include "IOdictionary.H"
#include "IOstreams.H"
#include "moleculeCloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class molConfig Declaration
\*---------------------------------------------------------------------------*/
class molConfig
{
// Private data
const IOdictionary& molConfigDescription_;
const polyMesh& mesh_;
DynamicList<word> idList_;
labelField id_;
scalarField mass_;
vectorField positions_;
labelField cells_;
vectorField U_;
vectorField A_;
labelField tethered_;
vectorField tetherPositions_;
label nMol_;
public:
// Constructors
//- Construct from IOdictionary and mesh
molConfig(IOdictionary&, const polyMesh&);
// Destructor
~molConfig();
// Member Functions
void createMolecules();
// Access
inline const List<word>& molIdList() const;
inline const labelField& id() const;
inline const scalarField& mass() const;
inline const vectorField& positions() const;
inline const labelField& cells() const;
inline const vectorField& U() const;
inline const vectorField& A() const;
inline const labelField& tethered() const;
inline const vectorField& tetherPositions() const;
inline label nMol() const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "molConfigI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -30,7 +30,6 @@ License
#include "volFields.H" #include "volFields.H"
#include "surfaceFields.H" #include "surfaceFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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!=
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -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<<
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

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

View File

@ -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!=
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -38,7 +38,7 @@ void referredCell::setConstructionData
const label sourceCell const label sourceCell
) )
{ {
// * * * * * * * * * * * Points * * * * * * * * * * * // Points
const labelList& points = mesh.cellPoints()[sourceCell]; const labelList& points = mesh.cellPoints()[sourceCell];
@ -51,7 +51,8 @@ void referredCell::setConstructionData
vertexPositions_ = referPositions(sourceCellVertices); vertexPositions_ = referPositions(sourceCellVertices);
// * * * * * * * * * * * Edges * * * * * * * * * * *
// Edges
const labelList& edges = mesh.cellEdges()[sourceCell]; const labelList& edges = mesh.cellEdges()[sourceCell];
@ -64,7 +65,8 @@ void referredCell::setConstructionData
locallyMapEdgeList(points, sourceCellEdges); locallyMapEdgeList(points, sourceCellEdges);
// * * * * * * * * * * * Faces * * * * * * * * * * *
// Faces
labelList faces(mesh.cells()[sourceCell]); labelList faces(mesh.cells()[sourceCell]);
@ -383,8 +385,8 @@ bool referredCell::duplicate(const referredCell& refCellDupl) const
return return
( (
sourceProc_ == refCellDupl.sourceProc() sourceProc_ == refCellDupl.sourceProc()
&& sourceCell_ == refCellDupl.sourceCell() && sourceCell_ == refCellDupl.sourceCell()
&& mag(offset_ - refCellDupl.offset()) < interactionLists::transTol && mag(offset_ - refCellDupl.offset()) < interactionLists::transTol
); );
} }
@ -394,8 +396,8 @@ bool referredCell::duplicate(const label procNo,const label nCells) const
return return
( (
sourceProc_ == procNo sourceProc_ == procNo
&& sourceCell_ < nCells && sourceCell_ < nCells
&& mag(offset_) < interactionLists::transTol && mag(offset_) < interactionLists::transTol
); );
} }
@ -405,7 +407,7 @@ bool referredCell::duplicate(const label procNo,const label nCells) const
Istream& operator>>(Istream& is, referredCell& rC) Istream& operator>>(Istream& is, referredCell& rC)
{ {
is >> rC.sourceProc_ is >> rC.sourceProc_
>> rC.sourceCell_ >> rC.sourceCell_
>> rC.vertexPositions_ >> rC.vertexPositions_
>> rC.edges_ >> rC.edges_
@ -424,7 +426,7 @@ Istream& operator>>(Istream& is, referredCell& rC)
Ostream& operator<<(Ostream& os, const referredCell& rC) Ostream& operator<<(Ostream& os, const referredCell& rC)
{ {
os << rC.sourceProc() os << rC.sourceProc()
<< token::SPACE << rC.sourceCell() << token::SPACE << rC.sourceCell()
<< token::SPACE << rC.vertexPositions() << token::SPACE << rC.vertexPositions()
<< token::SPACE << rC.edges() << token::SPACE << rC.edges()

View File

@ -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
@ -53,7 +53,7 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class referredCell Declaration Class referredCell Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class referredCell class referredCell

View File

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

View File

@ -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
@ -357,7 +357,7 @@ void Foam::referredCellList::buildReferredCellList
label iterationNo = 0; label iterationNo = 0;
while(cellsReferredThisIteration) while (cellsReferredThisIteration)
{ {
label refIntListStartSize = referredInteractionList.size(); label refIntListStartSize = referredInteractionList.size();
@ -499,7 +499,10 @@ void Foam::referredCellList::buildReferredCellList
( (
meshPointsOnThisSegment, meshPointsOnThisSegment,
facePoint facePoint
) == -1) )
==
-1
)
{ {
meshPointsOnThisSegment.append(facePoint); meshPointsOnThisSegment.append(facePoint);
} }
@ -610,18 +613,20 @@ void Foam::referredCellList::buildReferredCellList
forAll(referredCellsFoundInRange,cFIR) forAll(referredCellsFoundInRange,cFIR)
{ {
referredCell& existingRefCell = referredInteractionList referredCell& existingRefCell =
[ referredInteractionList
referredCellsFoundInRange[cFIR] [
]; referredCellsFoundInRange[cFIR]
];
referredCell cellToReRefer = existingRefCell.reRefer referredCell cellToReRefer =
( existingRefCell.reRefer
patch.faceCentres()[0], (
patch.faceCentres()[patch.size()/2], patch.faceCentres()[0],
patch.faceNormals()[0], patch.faceCentres()[patch.size()/2],
patch.faceNormals()[patch.size()/2] patch.faceNormals()[0],
); patch.faceNormals()[patch.size()/2]
);
// Test all existing referred and real cells to check // Test all existing referred and real cells to check
// duplicates are not being made or cells aren't being // duplicates are not being made or cells aren't being
@ -705,7 +710,9 @@ void Foam::referredCellList::buildReferredCellList
( (
meshEdgesOnThisSegment, meshEdgesOnThisSegment,
faceEdge faceEdge
) == -1 )
==
-1
) )
{ {
meshEdgesOnThisSegment.append(faceEdge); meshEdgesOnThisSegment.append(faceEdge);
@ -724,7 +731,10 @@ void Foam::referredCellList::buildReferredCellList
( (
meshPointsOnThisSegment, meshPointsOnThisSegment,
facePoint facePoint
) == -1) )
==
-1
)
{ {
meshPointsOnThisSegment.append(facePoint); meshPointsOnThisSegment.append(facePoint);
} }
@ -823,28 +833,30 @@ void Foam::referredCellList::buildReferredCellList
referredInteractionList.shrink(); referredInteractionList.shrink();
referredCellsFoundInRange = referredCellsFoundInRange =
il_.referredCellsInRangeOfSegment il_.referredCellsInRangeOfSegment
( (
referredInteractionList, referredInteractionList,
meshFacesOnThisSegment, meshFacesOnThisSegment,
meshEdgesOnThisSegment, meshEdgesOnThisSegment,
meshPointsOnThisSegment meshPointsOnThisSegment
); );
forAll(referredCellsFoundInRange,cFIR) forAll(referredCellsFoundInRange,cFIR)
{ {
referredCell& existingRefCell = referredInteractionList referredCell& existingRefCell =
[ referredInteractionList
referredCellsFoundInRange[cFIR] [
]; referredCellsFoundInRange[cFIR]
];
referredCell cellToReRefer = existingRefCell.reRefer referredCell cellToReRefer =
( existingRefCell.reRefer
patch.faceCentres()[patch.size()/2], (
patch.faceCentres()[0], patch.faceCentres()[patch.size()/2],
patch.faceNormals()[patch.size()/2], patch.faceCentres()[0],
patch.faceNormals()[0] patch.faceNormals()[patch.size()/2],
); patch.faceNormals()[0]
);
// Test all existing referred and real cells to check // Test all existing referred and real cells to check
// duplicates are not being made or cells aren't being // duplicates are not being made or cells aren't being
@ -901,15 +913,15 @@ void Foam::referredCellList::buildReferredCellList
forAll(procPatches,pP) forAll(procPatches,pP)
{ {
const processorPolyPatch& patch = const processorPolyPatch& patch =
refCast<const processorPolyPatch> refCast<const processorPolyPatch>
( (
mesh.boundaryMesh()[procPatches[pP]] mesh.boundaryMesh()[procPatches[pP]]
); );
DynamicList<referredCell> referredCellsToTransfer; DynamicList<referredCell> referredCellsToTransfer;
const vectorList& neighbFaceCentres = const vectorList& neighbFaceCentres =
allNeighbourFaceCentres[pP]; allNeighbourFaceCentres[pP];
const vectorList& neighbFaceAreas = allNeighbourFaceAreas[pP]; const vectorList& neighbFaceAreas = allNeighbourFaceAreas[pP];
@ -971,7 +983,9 @@ void Foam::referredCellList::buildReferredCellList
( (
meshEdgesOnThisSegment, meshEdgesOnThisSegment,
faceEdge faceEdge
) == -1 )
==
-1
) )
{ {
meshEdgesOnThisSegment.append(faceEdge); meshEdgesOnThisSegment.append(faceEdge);
@ -990,7 +1004,9 @@ void Foam::referredCellList::buildReferredCellList
( (
meshPointsOnThisSegment, meshPointsOnThisSegment,
facePoint facePoint
) == -1 )
==
-1
) )
{ {
meshPointsOnThisSegment.append(facePoint); meshPointsOnThisSegment.append(facePoint);
@ -1032,7 +1048,7 @@ void Foam::referredCellList::buildReferredCellList
forAll(realCellsFoundInRange,cFIR) forAll(realCellsFoundInRange,cFIR)
{ {
const label realCell = const label realCell =
realCellsFoundInRange[cFIR]; realCellsFoundInRange[cFIR];
referredCell cellToRefer referredCell cellToRefer
( (
@ -1074,19 +1090,20 @@ void Foam::referredCellList::buildReferredCellList
forAll(referredCellsFoundInRange,cFIR) forAll(referredCellsFoundInRange,cFIR)
{ {
referredCell& existingRefCell = referredCell& existingRefCell =
referredInteractionList referredInteractionList
[ [
referredCellsFoundInRange[cFIR] referredCellsFoundInRange[cFIR]
]; ];
referredCell cellToReRefer = existingRefCell.reRefer referredCell cellToReRefer =
( existingRefCell.reRefer
patch.faceCentres()[faceT], (
neighbFaceCentres[faceT], patch.faceCentres()[faceT],
patch.faceNormals()[faceT], neighbFaceCentres[faceT],
neighbFaceAreas[faceT] patch.faceNormals()[faceT],
/(mag(neighbFaceAreas[faceT]) + VSMALL) neighbFaceAreas[faceT]
); /(mag(neighbFaceAreas[faceT]) + VSMALL)
);
referredCellsToTransfer.append(cellToReRefer); referredCellsToTransfer.append(cellToReRefer);
} }
@ -1409,6 +1426,7 @@ void Foam::referredCellList::buildReferredCellList
} }
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::referredCellList::referredCellList Foam::referredCellList::referredCellList
@ -1557,7 +1575,4 @@ void Foam::referredCellList::referMolecules
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -48,7 +48,7 @@ namespace Foam
class interactionLists; class interactionLists;
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class referredCellList Declaration Class referredCellList Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class referredCellList class referredCellList
@ -59,7 +59,8 @@ class referredCellList
const interactionLists& il_; const interactionLists& il_;
// Private Member Functions
// Private Member Functions
void buildReferredCellList void buildReferredCellList
( (

View File

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

View File

@ -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
@ -83,6 +83,4 @@ Foam::Ostream& Foam::operator<<
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -45,7 +45,7 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class referredMolecule Declaration Class referredMolecule Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class referredMolecule class referredMolecule

View File

@ -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
@ -45,6 +45,7 @@ Foam::referredMolecule::sitePositions() const
return sitePositions_; return sitePositions_;
} }
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
inline bool Foam::operator== inline bool Foam::operator==
@ -71,6 +72,4 @@ inline bool Foam::operator!=
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -5,68 +5,68 @@ if (runTime.outputTime())
\*-----------------------------------------------------------------------*/ \*-----------------------------------------------------------------------*/
scalarField totalRhoN_sum(mesh.nCells(), 0.0); scalarField totalRhoN_sum(mesh.nCells(), 0.0);
forAll (allSpeciesRhoN, rN) forAll (allSpeciesRhoN, rN)
{ {
allSpeciesRhoN[rN].internalField() = allSpeciesRhoN[rN].internalField() =
allSpeciesN_RU[rN] allSpeciesN_RU[rN]
/mesh.cellVolumes() /mesh.cellVolumes()
/nAveragingSteps; /nAveragingSteps;
totalRhoN_sum += allSpeciesRhoN[rN].internalField(); totalRhoN_sum += allSpeciesRhoN[rN].internalField();
} }
totalRhoN.internalField() = totalRhoN_sum; totalRhoN.internalField() = totalRhoN_sum;
/*-----------------------------------------------------------------------*\ /*-----------------------------------------------------------------------*\
Mass density Mass density
\*-----------------------------------------------------------------------*/ \*-----------------------------------------------------------------------*/
scalarField totalRhoM_sum(mesh.nCells(), 0.0); scalarField totalRhoM_sum(mesh.nCells(), 0.0);
forAll (allSpeciesRhoM, rM) forAll (allSpeciesRhoM, rM)
{ {
allSpeciesRhoM[rM].internalField() = allSpeciesRhoM[rM].internalField() =
allSpeciesM_RU[rM] allSpeciesM_RU[rM]
/mesh.cellVolumes() /mesh.cellVolumes()
/nAveragingSteps; /nAveragingSteps;
totalRhoM_sum += allSpeciesRhoM[rM].internalField(); totalRhoM_sum += allSpeciesRhoM[rM].internalField();
} }
totalRhoM.internalField() = totalRhoM_sum; totalRhoM.internalField() = totalRhoM_sum;
/*-----------------------------------------------------------------------*\ /*-----------------------------------------------------------------------*\
Bulk velocity Bulk velocity
\*-----------------------------------------------------------------------*/ \*-----------------------------------------------------------------------*/
vectorField totalMomentum_sum(mesh.nCells(), vector::zero); vectorField totalMomentum_sum(mesh.nCells(), vector::zero);
scalarField totalMass_sum(mesh.nCells(), 0.0); scalarField totalMass_sum(mesh.nCells(), 0.0);
forAll (allSpeciesVelocity, v) forAll (allSpeciesVelocity, v)
{ {
// A check for 1/0 molecules is required. // A check for 1/0 molecules is required.
vectorField& singleSpeciesVelocity vectorField& singleSpeciesVelocity
( (
allSpeciesVelocity[v].internalField() allSpeciesVelocity[v].internalField()
); );
forAll(singleSpeciesVelocity, sSV) forAll(singleSpeciesVelocity, sSV)
{ {
if(allSpeciesN_RU[v][sSV]) if (allSpeciesN_RU[v][sSV])
{ {
singleSpeciesVelocity[sSV] = singleSpeciesVelocity[sSV] =
allSpeciesVelocitySum_RU[v][sSV] allSpeciesVelocitySum_RU[v][sSV]
/allSpeciesN_RU[v][sSV]; /allSpeciesN_RU[v][sSV];
totalMomentum_sum[sSV] += totalMomentum_sum[sSV] +=
allSpeciesM_RU[v][sSV] allSpeciesM_RU[v][sSV]
/allSpeciesN_RU[v][sSV] /allSpeciesN_RU[v][sSV]
*allSpeciesVelocitySum_RU[v][sSV]; *allSpeciesVelocitySum_RU[v][sSV];
totalMass_sum[sSV] += allSpeciesM_RU[v][sSV]; totalMass_sum[sSV] += allSpeciesM_RU[v][sSV];
} }
else else
@ -75,10 +75,10 @@ if (runTime.outputTime())
} }
} }
} }
forAll(totalVelocity.internalField(), tV) forAll(totalVelocity.internalField(), tV)
{ {
if(totalMass_sum[tV] > VSMALL) if (totalMass_sum[tV] > VSMALL)
{ {
totalVelocity.internalField()[tV] = totalVelocity.internalField()[tV] =
totalMomentum_sum[tV] totalMomentum_sum[tV]
@ -90,34 +90,33 @@ if (runTime.outputTime())
vector::zero; vector::zero;
} }
} }
/*-----------------------------------------------------------------------*\ /*-----------------------------------------------------------------------*\
Kinetic temperature Kinetic temperature
\*-----------------------------------------------------------------------*/ \*-----------------------------------------------------------------------*/
scalarField totalTemperatureVTerms_sum(mesh.nCells(), 0.0); scalarField totalTemperatureVTerms_sum(mesh.nCells(), 0.0);
scalarField totalN_sum(mesh.nCells(), 0.0); scalarField totalN_sum(mesh.nCells(), 0.0);
forAll (allSpeciesTemperature, t) forAll (allSpeciesTemperature, t)
{ {
// A check for 1/0 molecules is required. // A check for 1/0 molecules is required.
scalarField& singleSpeciesTemp scalarField& singleSpeciesTemp
( (
allSpeciesTemperature[t].internalField() allSpeciesTemperature[t].internalField()
); );
forAll(singleSpeciesTemp, sST) forAll(singleSpeciesTemp, sST)
{ {
if(allSpeciesN_RU[t][sST]) if (allSpeciesN_RU[t][sST])
{ {
singleSpeciesTemp[sST] = singleSpeciesTemp[sST] =
allSpeciesM_RU[t][sST] allSpeciesM_RU[t][sST]
/allSpeciesN_RU[t][sST] /allSpeciesN_RU[t][sST]
/(3.0 * moleculeCloud::kb * allSpeciesN_RU[t][sST]) /(3.0 * moleculeCloud::kb * allSpeciesN_RU[t][sST])
* *(
(
allSpeciesVelocityMagSquaredSum_RU[t][sST] allSpeciesVelocityMagSquaredSum_RU[t][sST]
- -
( (
@ -127,14 +126,13 @@ if (runTime.outputTime())
) )
/allSpeciesN_RU[t][sST] /allSpeciesN_RU[t][sST]
); );
totalTemperatureVTerms_sum[sST] += totalTemperatureVTerms_sum[sST] +=
allSpeciesM_RU[t][sST] allSpeciesM_RU[t][sST]
/allSpeciesN_RU[t][sST] /allSpeciesN_RU[t][sST]
* *(
(
allSpeciesVelocityMagSquaredSum_RU[t][sST] allSpeciesVelocityMagSquaredSum_RU[t][sST]
- -
( (
allSpeciesVelocitySum_RU[t][sST] allSpeciesVelocitySum_RU[t][sST]
& &
@ -142,7 +140,7 @@ if (runTime.outputTime())
) )
/allSpeciesN_RU[t][sST] /allSpeciesN_RU[t][sST]
); );
totalN_sum[sST] += allSpeciesN_RU[t][sST]; totalN_sum[sST] += allSpeciesN_RU[t][sST];
} }
else else
@ -151,7 +149,7 @@ if (runTime.outputTime())
} }
} }
} }
forAll(totalTemperature.internalField(), tT) forAll(totalTemperature.internalField(), tT)
{ {
if(totalN_sum[tT] > 0) if(totalN_sum[tT] > 0)
@ -165,41 +163,39 @@ if (runTime.outputTime())
totalTemperature.internalField()[tT] = 0.0; totalTemperature.internalField()[tT] = 0.0;
} }
} }
/*-----------------------------------------------------------------------*\ /*-----------------------------------------------------------------------*\
Mean kinetic energy Mean kinetic energy
\*-----------------------------------------------------------------------*/ \*-----------------------------------------------------------------------*/
scalarField totalKE_sum(mesh.nCells(), 0.0); scalarField totalKE_sum(mesh.nCells(), 0.0);
forAll (allSpeciesMeanKE, mKE) forAll (allSpeciesMeanKE, mKE)
{ {
// A check for 1/0 molecules is required. // A check for 1/0 molecules is required.
scalarField& singleSpeciesMeanKE scalarField& singleSpeciesMeanKE
( (
allSpeciesMeanKE[mKE].internalField() allSpeciesMeanKE[mKE].internalField()
); );
forAll(singleSpeciesMeanKE, sSMKE) forAll(singleSpeciesMeanKE, sSMKE)
{ {
if(allSpeciesN_RU[mKE][sSMKE]) if(allSpeciesN_RU[mKE][sSMKE])
{ {
singleSpeciesMeanKE[sSMKE] = singleSpeciesMeanKE[sSMKE] =
allSpeciesM_RU[mKE][sSMKE] allSpeciesM_RU[mKE][sSMKE]
/allSpeciesN_RU[mKE][sSMKE] /allSpeciesN_RU[mKE][sSMKE]
/(2.0 * allSpeciesN_RU[mKE][sSMKE]) /(2.0*allSpeciesN_RU[mKE][sSMKE])
* *(
(
allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE]
); );
totalKE_sum[sSMKE] += totalKE_sum[sSMKE] +=
allSpeciesM_RU[mKE][sSMKE] allSpeciesM_RU[mKE][sSMKE]
/allSpeciesN_RU[mKE][sSMKE] /allSpeciesN_RU[mKE][sSMKE]
/2.0 /2.0
* *(
(
allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE]
); );
} }
@ -209,7 +205,7 @@ if (runTime.outputTime())
} }
} }
} }
forAll(totalMeanKE.internalField(), tMKE) forAll(totalMeanKE.internalField(), tMKE)
{ {
if(totalN_sum[tMKE] > 0) if(totalN_sum[tMKE] > 0)

View File

@ -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
@ -60,18 +60,15 @@ if (mesh.time().timeIndex() % pacf.sampleSteps() == 0)
{ {
p.x() += p.x() +=
mol().mass() * mol().U().y() * mol().U().z() mol().mass() * mol().U().y() * mol().U().z()
+ + 0.5*mol().rf().yz();
0.5 * mol().rf().yz();
p.y() += p.y() +=
mol().mass() * mol().U().z() * mol().U().x() mol().mass() * mol().U().z() * mol().U().x()
+ + 0.5*mol().rf().zx();
0.5 * mol().rf().zx();
p.z() += p.z() +=
mol().mass() * mol().U().x() * mol().U().y() mol().mass() * mol().U().x() * mol().U().y()
+ + 0.5*mol().rf().xy();
0.5 * mol().rf().xy();
} }
pacf.calculateCorrelationFunction(p); pacf.calculateCorrelationFunction(p);
@ -93,12 +90,10 @@ if (mesh.time().timeIndex() % hfacf.sampleSteps() == 0)
{ {
s += s +=
( (
0.5 * mol().mass() * magSqr(mol().U()) 0.5*mol().mass()*magSqr(mol().U())
+ + mol().potentialEnergy()
mol().potentialEnergy() )*mol().U()
) * mol().U() + 0.5*(mol().rf() & mol().U());
+
0.5 * ( mol().rf() & mol().U() );
} }
hfacf.calculateCorrelationFunction(s); hfacf.calculateCorrelationFunction(s);

View File

@ -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
@ -37,7 +37,7 @@ if (writeVacf)
} }
} }
Info << "Diffusion coefficient = " Info<< "Diffusion coefficient = "
<< vacf.integral() << endl; << vacf.integral() << endl;
if (writePacf) if (writePacf)
@ -57,13 +57,13 @@ Info<< "Viscosity = "
<< pacf.integral()/averageTemperature/moleculeCloud::kb/meshVolume << pacf.integral()/averageTemperature/moleculeCloud::kb/meshVolume
<< endl; << endl;
if(writeHFacf) if (writeHFacf)
{ {
OFstream hfacfFile OFstream hfacfFile
( (
runTime.path()/ + "hfacf" runTime.path()/ + "hfacf"
); );
if (!hfacf.writeAveraged(hfacfFile)) if (!hfacf.writeAveraged(hfacfFile))
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
@ -73,7 +73,7 @@ if(writeHFacf)
} }
} }
Info << "Thermal conductivity = " Info<< "Thermal conductivity = "
<< hfacf.integral() << hfacf.integral()
/averageTemperature /averageTemperature
/averageTemperature /averageTemperature

View File

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

View File

@ -1,11 +1,9 @@
#ifndef md_H #ifndef md_H
#define md_H #define md_H
#include "potential.H"
# include "potential.H" #include "moleculeCloud.H"
# include "moleculeCloud.H" #include "correlationFunction.H"
# include "correlationFunction.H" #include "distribution.H"
# include "distribution.H" #include "reducedUnits.H"
# include "reducedUnits.H"
#endif #endif

View File

@ -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,6 +52,8 @@ scalar singleStepTotalrDotf = 0.0;
label singleStepNMols = molecules.size(); label singleStepNMols = molecules.size();
label singleStepDOFs = 0;
{ {
IDLList<molecule>::iterator mol(molecules.begin()); IDLList<molecule>::iterator mol(molecules.begin());
@ -85,9 +87,11 @@ label singleStepNMols = molecules.size();
{ {
label molId = mol().id(); label molId = mol().id();
scalar molMass(molecules.constProps(molId).mass()); const molecule::constantProperties cP(molecules.constProps(molId));
const diagTensor& molMoI(molecules.constProps(molId).momentOfInertia()); scalar molMass(cP.mass());
const diagTensor& molMoI(cP.momentOfInertia());
const vector& molV(mol().v()); const vector& molV(mol().v());
@ -112,6 +116,8 @@ label singleStepNMols = molecules.size();
singleStepTotalPE += mol().potentialEnergy(); singleStepTotalPE += mol().potentialEnergy();
singleStepTotalrDotf += tr(mol().rf()); singleStepTotalrDotf += tr(mol().rf());
singleStepDOFs += cP.degreesOfFreedom();
} }
} }
@ -134,50 +140,53 @@ if (Pstream::parRun())
reduce(singleStepTotalrDotf, sumOp<scalar>()); reduce(singleStepTotalrDotf, sumOp<scalar>());
reduce(singleStepNMols, sumOp<label>()); reduce(singleStepNMols, sumOp<label>());
reduce(singleStepDOFs, sumOp<label>());
} }
if (singleStepNMols) if (singleStepNMols)
{ {
Info<< "Number of mols in system = " Info<< "Number of molecules in system = "
<< singleStepNMols << nl << singleStepNMols << nl
<< "Overall number density = " << "Overall number density = "
<< singleStepNMols/meshVolume << nl << singleStepNMols/meshVolume << nl
<< "Overall mass density = " << "Overall mass density = "
<< singleStepTotalMass/meshVolume << nl << singleStepTotalMass/meshVolume << nl
<< "Average linear momentum per mol = " << "Average linear momentum per molecule = "
<< singleStepTotalLinearMomentum/singleStepNMols << ' ' << singleStepTotalLinearMomentum/singleStepNMols << ' '
<< mag(singleStepTotalLinearMomentum)/singleStepNMols << nl << mag(singleStepTotalLinearMomentum)/singleStepNMols << nl
<< "Average angular momentum per mol = " << "Average angular momentum per molecule = "
<< singleStepTotalAngularMomentum << ' ' << singleStepTotalAngularMomentum << ' '
<< mag(singleStepTotalAngularMomentum)/singleStepNMols << nl << mag(singleStepTotalAngularMomentum)/singleStepNMols << nl
<< "Maximum |velocity| = " << "Maximum |velocity| = "
<< singleStepMaxVelocityMag << nl << singleStepMaxVelocityMag << nl
<< "Average linear KE per mol = " << "Average linear KE per molecule = "
<< singleStepTotalLinearKE/singleStepNMols << nl << singleStepTotalLinearKE/singleStepNMols << nl
<< "Average angular KE per mol = " << "Average angular KE per molecule = "
<< singleStepTotalAngularKE/singleStepNMols << nl << singleStepTotalAngularKE/singleStepNMols << nl
<< "Average PE per mol = " << "Average PE per molecule = "
<< singleStepTotalPE/singleStepNMols << nl << singleStepTotalPE/singleStepNMols << nl
<< "Average TE per mol = " << "Average TE per molecule = "
<< <<
( (
singleStepTotalLinearKE singleStepTotalLinearKE
+ singleStepTotalAngularKE + singleStepTotalAngularKE
+ singleStepTotalPE + singleStepTotalPE
) )
/singleStepNMols /singleStepNMols
<< endl; << endl;
// Info << singleStepNMols << " " // Info << singleStepNMols << " "
// // << singleStepTotalMomentum/singleStepTotalMass << " " // << singleStepTotalMomentum/singleStepTotalMass << " "
// << singleStepMaxVelocityMag << " " // << singleStepMaxVelocityMag << " "
// << singleStepTotalKE/singleStepNMols << " " // << singleStepTotalKE/singleStepNMols << " "
// << singleStepTotalPE/singleStepNMols << " " // << singleStepTotalPE/singleStepNMols << " "
// << (singleStepTotalKE + singleStepTotalPE)/singleStepNMols << endl; // << (singleStepTotalKE + singleStepTotalPE)
// /singleStepNMols << endl;
} }
else else
{ {
Info << "No molecules in system" << endl; Info<< "No molecules in system" << endl;
} }

View File

@ -3,24 +3,24 @@ if (runTime.outputTime())
allSpeciesN_RU = List< scalarField > allSpeciesN_RU = List< scalarField >
( (
molecules.potential().nIds(), molecules.potential().nIds(),
scalarField (mesh.nCells(), 0.0) scalarField(mesh.nCells(), 0.0)
); );
allSpeciesM_RU = List< scalarField > allSpeciesM_RU = List< scalarField >
( (
molecules.potential().nIds(), molecules.potential().nIds(),
scalarField (mesh.nCells(), 0.0) scalarField(mesh.nCells(), 0.0)
); );
allSpeciesVelocitySum_RU = List< vectorField > allSpeciesVelocitySum_RU = List< vectorField >
( (
molecules.potential().nIds(), molecules.potential().nIds(),
vectorField (mesh.nCells(), vector::zero) vectorField(mesh.nCells(), vector::zero)
); );
allSpeciesVelocityMagSquaredSum_RU = List< scalarField > allSpeciesVelocityMagSquaredSum_RU = List< scalarField >
( (
molecules.potential().nIds(), molecules.potential().nIds(),
scalarField (mesh.nCells(), 0.0) scalarField(mesh.nCells(), 0.0)
); );
} }

View File

@ -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
@ -47,17 +47,17 @@ accumulatedTotalrDotfSum += singleStepTotalrDotf;
accumulatedNMols += singleStepNMols; accumulatedNMols += singleStepNMols;
accumulatedDOFs += singleStepDOFs;
if (runTime.outputTime()) if (runTime.outputTime())
{ {
// calculate averages
if (accumulatedNMols) if (accumulatedNMols)
{ {
Info << "calculating averages" << endl; Info << "calculating averages" << endl;
averageTemperature = averageTemperature =
( (
2.0/(6.0 * moleculeCloud::kb * accumulatedNMols) 2.0/(moleculeCloud::kb * accumulatedDOFs)
* *
( (
accumulatedTotalLinearKE + accumulatedTotalAngularKE accumulatedTotalLinearKE + accumulatedTotalAngularKE
@ -79,27 +79,20 @@ if (runTime.outputTime())
meshVolume meshVolume
); );
// output values
Info << "----------------------------------------" << nl Info << "----------------------------------------" << nl
<< "Averaged properties" << nl << "Averaged properties" << nl
<< "Average |velocity| = " << "Average |velocity| = "
<< mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass << nl
<< " m/s" << nl << "Average temperature = " << averageTemperature << nl
<< "Average temperature = " << "Average pressure = " << averagePressure << nl
<< averageTemperature << " K" << nl
<< "Average pressure = "
<< averagePressure << " N/m^2" << nl
<< "----------------------------------------" << endl; << "----------------------------------------" << endl;
} }
else else
{ {
Info << "Not averaging temperature and pressure: " Info<< "Not averaging temperature and pressure: "
<< "no molecules in system" << endl; << "no molecules in system" << endl;
} }
// reset counters
accumulatedTotalLinearMomentum = vector::zero; accumulatedTotalLinearMomentum = vector::zero;
accumulatedTotalMass = 0.0; accumulatedTotalMass = 0.0;
@ -113,6 +106,9 @@ if (runTime.outputTime())
accumulatedTotalrDotfSum = 0.0; accumulatedTotalrDotfSum = 0.0;
accumulatedNMols = 0; accumulatedNMols = 0;
accumulatedDOFs = 0;
} }
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -44,6 +44,8 @@ scalar accumulatedTotalrDotfSum = 0.0;
label accumulatedNMols = 0; label accumulatedNMols = 0;
label accumulatedDOFs = 0;
scalar averageTemperature = 0.0; scalar averageTemperature = 0.0;
scalar averagePressure = 0.0; scalar averagePressure = 0.0;

View File

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

View File

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

View File

@ -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
@ -82,6 +82,8 @@ public:
Field<vector> siteReferencePositions_; Field<vector> siteReferencePositions_;
List<scalar> siteMasses_;
List<scalar> siteCharges_; List<scalar> siteCharges_;
List<label> siteIds_; List<label> siteIds_;
@ -106,6 +108,7 @@ public:
bool linearMoleculeTest() const; bool linearMoleculeTest() const;
public: public:
inline constantProperties(); inline constantProperties();
@ -117,6 +120,8 @@ public:
inline const Field<vector>& siteReferencePositions() const; inline const Field<vector>& siteReferencePositions() const;
inline const List<scalar>& siteMasses() const;
inline const List<scalar>& siteCharges() const; inline const List<scalar>& siteCharges() const;
inline const List<label>& siteIds() const; inline const List<label>& siteIds() const;
@ -137,6 +142,8 @@ public:
inline bool pointMolecule() const; inline bool pointMolecule() const;
inline label degreesOfFreedom() const;
inline scalar mass() const; inline scalar mass() const;
inline label nSites() const; inline label nSites() const;
@ -208,6 +215,7 @@ private:
List<vector> sitePositions_; List<vector> sitePositions_;
// Private Member Functions // Private Member Functions
tensor rotationTensorX(scalar deltaT) const; tensor rotationTensorX(scalar deltaT) const;
@ -216,6 +224,7 @@ private:
tensor rotationTensorZ(scalar deltaT) const; tensor rotationTensorZ(scalar deltaT) const;
public: public:
friend class Cloud<molecule>; friend class Cloud<molecule>;

View File

@ -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
@ -29,6 +29,7 @@ License
inline Foam::molecule::constantProperties::constantProperties() inline Foam::molecule::constantProperties::constantProperties()
: :
siteReferencePositions_(Field<vector>(0)), siteReferencePositions_(Field<vector>(0)),
siteMasses_(List<scalar>(0)),
siteCharges_(List<scalar>(0)), siteCharges_(List<scalar>(0)),
siteIds_(List<label>(0)), siteIds_(List<label>(0)),
pairPotentialSites_(List<bool>(false)), pairPotentialSites_(List<bool>(false)),
@ -44,6 +45,7 @@ inline Foam::molecule::constantProperties::constantProperties
) )
: :
siteReferencePositions_(dict.lookup("siteReferencePositions")), siteReferencePositions_(dict.lookup("siteReferencePositions")),
siteMasses_(dict.lookup("siteMasses")),
siteCharges_(dict.lookup("siteCharges")), siteCharges_(dict.lookup("siteCharges")),
siteIds_(List<word>(dict.lookup("siteIds")).size(), -1), siteIds_(List<word>(dict.lookup("siteIds")).size(), -1),
pairPotentialSites_(), pairPotentialSites_(),
@ -59,9 +61,7 @@ inline Foam::molecule::constantProperties::constantProperties
List<word>(dict.lookup("pairPotentialSiteIds")) List<word>(dict.lookup("pairPotentialSiteIds"))
); );
scalarList siteMasses(dict.lookup("siteMasses")); mass_ = sum(siteMasses_);
mass_ = sum(siteMasses);
vector centreOfMass(vector::zero); vector centreOfMass(vector::zero);
@ -70,7 +70,7 @@ inline Foam::molecule::constantProperties::constantProperties
forAll(siteReferencePositions_, i) forAll(siteReferencePositions_, i)
{ {
centreOfMass += siteReferencePositions_[i]*siteMasses[i]; centreOfMass += siteReferencePositions_[i]*siteMasses_[i];
} }
centreOfMass /= mass_; centreOfMass /= mass_;
@ -106,7 +106,7 @@ inline Foam::molecule::constantProperties::constantProperties
forAll(siteReferencePositions_, i) forAll(siteReferencePositions_, i)
{ {
centreOfMass += siteReferencePositions_[i]*siteMasses[i]; centreOfMass += siteReferencePositions_[i]*siteMasses_[i];
} }
centreOfMass /= mass_; centreOfMass /= mass_;
@ -119,10 +119,8 @@ inline Foam::molecule::constantProperties::constantProperties
{ {
const vector& p(siteReferencePositions_[i]); const vector& p(siteReferencePositions_[i]);
momOfInertia += siteMasses[i]*diagTensor momOfInertia +=
( siteMasses_[i]*diagTensor(0, p.x()*p.x(), p.x()*p.x());
0, p.x()*p.x(), p.x()*p.x()
);
} }
momentOfInertia_ = diagTensor momentOfInertia_ = diagTensor
@ -144,7 +142,7 @@ inline Foam::molecule::constantProperties::constantProperties
{ {
const vector& p(siteReferencePositions_[i]); const vector& p(siteReferencePositions_[i]);
momOfInertia += siteMasses[i]*tensor momOfInertia += siteMasses_[i]*tensor
( (
p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(), p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(),
-p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(), -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(),
@ -156,8 +154,7 @@ inline Foam::molecule::constantProperties::constantProperties
{ {
FatalErrorIn("molecule::constantProperties::constantProperties") FatalErrorIn("molecule::constantProperties::constantProperties")
<< "An eigenvalue of the inertia tensor is zero, the molecule " << "An eigenvalue of the inertia tensor is zero, the molecule "
<< dict.name() << dict.name() << " is not a valid 6DOF shape."
<< " is not a valid 6DOF shape."
<< nl << abort(FatalError); << nl << abort(FatalError);
} }
@ -172,7 +169,7 @@ inline Foam::molecule::constantProperties::constantProperties
// global axes // global axes
tensor Q = tensor Q =
vector(1,0,0)*e.x() + vector(0,1,0)*e.y() + vector(0,0,1)*e.z(); vector(1,0,0)*e.x() + vector(0,1,0)*e.y() + vector(0,0,1)*e.z();
// Transform the site positions // Transform the site positions
@ -187,7 +184,7 @@ inline Foam::molecule::constantProperties::constantProperties
forAll(siteReferencePositions_, i) forAll(siteReferencePositions_, i)
{ {
centreOfMass += siteReferencePositions_[i]*siteMasses[i]; centreOfMass += siteReferencePositions_[i]*siteMasses_[i];
} }
centreOfMass /= mass_; centreOfMass /= mass_;
@ -203,7 +200,7 @@ inline Foam::molecule::constantProperties::constantProperties
{ {
const vector& p(siteReferencePositions_[i]); const vector& p(siteReferencePositions_[i]);
momOfInertia += siteMasses[i]*tensor momOfInertia += siteMasses_[i]*tensor
( (
p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(), p.y()*p.y() + p.z()*p.z(), -p.x()*p.y(), -p.x()*p.z(),
-p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(), -p.y()*p.x(), p.x()*p.x() + p.z()*p.z(), -p.y()*p.z(),
@ -337,6 +334,13 @@ Foam::molecule::constantProperties::siteReferencePositions() const
} }
inline const Foam::List<Foam::scalar>&
Foam::molecule::constantProperties::siteMasses() const
{
return siteMasses_;
}
inline const Foam::List<Foam::scalar>& inline const Foam::List<Foam::scalar>&
Foam::molecule::constantProperties::siteCharges() const Foam::molecule::constantProperties::siteCharges() const
{ {
@ -372,7 +376,7 @@ inline bool Foam::molecule::constantProperties::pairPotentialSite
{ {
label s = findIndex(siteIds_, sId); label s = findIndex(siteIds_, sId);
if(s == -1) if (s == -1)
{ {
FatalErrorIn("moleculeI.H") << nl FatalErrorIn("moleculeI.H") << nl
<< sId << " site not found." << sId << " site not found."
@ -396,10 +400,12 @@ inline bool Foam::molecule::constantProperties::electrostaticSite
{ {
label s = findIndex(siteIds_, sId); label s = findIndex(siteIds_, sId);
if(s == -1) if (s == -1)
{ {
FatalErrorIn("moleculeI.H") << nl FatalErrorIn
<< sId << " site not found." (
"molecule::constantProperties::electrostaticSite(label)"
) << sId << " site not found."
<< nl << abort(FatalError); << nl << abort(FatalError);
} }
@ -416,7 +422,7 @@ Foam::molecule::constantProperties::momentOfInertia() const
inline bool Foam::molecule::constantProperties::linearMolecule() const inline bool Foam::molecule::constantProperties::linearMolecule() const
{ {
return (momentOfInertia_.xx() < 0); return ((momentOfInertia_.xx() < 0) && (momentOfInertia_.yy() > 0));
} }
@ -426,6 +432,23 @@ inline bool Foam::molecule::constantProperties::pointMolecule() const
} }
inline Foam::label Foam::molecule::constantProperties::degreesOfFreedom() const
{
if (linearMolecule())
{
return 5;
}
else if (pointMolecule())
{
return 3;
}
else
{
return 6;
}
}
inline Foam::scalar Foam::molecule::constantProperties::mass() const inline Foam::scalar Foam::molecule::constantProperties::mass() const
{ {
return mass_; return mass_;
@ -592,6 +615,4 @@ inline Foam::label Foam::molecule::id() const
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -55,16 +55,16 @@ Foam::molecule::molecule
{ {
if (is.format() == IOstream::ASCII) if (is.format() == IOstream::ASCII)
{ {
is >> Q_; is >> Q_;
is >> v_; is >> v_;
is >> a_; is >> a_;
is >> pi_; is >> pi_;
is >> tau_; is >> tau_;
is >> siteForces_; is >> siteForces_;
is >> sitePositions_; is >> sitePositions_;
is >> specialPosition_; is >> specialPosition_;
potentialEnergy_ = readScalar(is); potentialEnergy_ = readScalar(is);
is >> rf_; is >> rf_;
special_ = readLabel(is); special_ = readLabel(is);
id_ = readLabel(is); id_ = readLabel(is);
} }
@ -74,18 +74,18 @@ Foam::molecule::molecule
( (
reinterpret_cast<char*>(&Q_), reinterpret_cast<char*>(&Q_),
sizeof(Q_) sizeof(Q_)
+ sizeof(v_) + sizeof(v_)
+ sizeof(a_) + sizeof(a_)
+ sizeof(pi_) + sizeof(pi_)
+ sizeof(tau_) + sizeof(tau_)
+ sizeof(specialPosition_) + sizeof(specialPosition_)
+ sizeof(potentialEnergy_) + sizeof(potentialEnergy_)
+ sizeof(rf_) + sizeof(rf_)
+ sizeof(special_) + sizeof(special_)
+ sizeof(id_) + sizeof(id_)
); );
is >> siteForces_ >> sitePositions_; is >> siteForces_ >> sitePositions_;
} }
} }
@ -169,6 +169,38 @@ void Foam::molecule::writeFields(const moleculeCloud& mC)
IOField<label> special(mC.fieldIOobject("special", IOobject::NO_READ), np); IOField<label> special(mC.fieldIOobject("special", IOobject::NO_READ), np);
IOField<label> id(mC.fieldIOobject("id", IOobject::NO_READ), np); IOField<label> id(mC.fieldIOobject("id", IOobject::NO_READ), np);
// Post processing fields
IOField<vector> piGlobal
(
mC.fieldIOobject("piGlobal", IOobject::NO_READ),
np
);
IOField<vector> tauGlobal
(
mC.fieldIOobject("tauGlobal", IOobject::NO_READ),
np
);
IOField<vector> orientation1
(
mC.fieldIOobject("orientation1", IOobject::NO_READ),
np
);
IOField<vector> orientation2
(
mC.fieldIOobject("orientation2", IOobject::NO_READ),
np
);
IOField<vector> orientation3
(
mC.fieldIOobject("orientation3", IOobject::NO_READ),
np
);
label i = 0; label i = 0;
forAllConstIter(moleculeCloud, mC, iter) forAllConstIter(moleculeCloud, mC, iter)
{ {
@ -182,6 +214,14 @@ void Foam::molecule::writeFields(const moleculeCloud& mC)
specialPosition[i] = mol.specialPosition_; specialPosition[i] = mol.specialPosition_;
special[i] = mol.special_; special[i] = mol.special_;
id[i] = mol.id_; id[i] = mol.id_;
piGlobal[i] = mol.Q_ & mol.pi_;
tauGlobal[i] = mol.Q_ & mol.tau_;
orientation1[i] = mol.Q_ & vector(1,0,0);
orientation2[i] = mol.Q_ & vector(0,1,0);
orientation3[i] = mol.Q_ & vector(0,0,1);
i++; i++;
} }
@ -193,6 +233,18 @@ void Foam::molecule::writeFields(const moleculeCloud& mC)
specialPosition.write(); specialPosition.write();
special.write(); special.write();
id.write(); id.write();
piGlobal.write();
tauGlobal.write();
orientation1.write();
orientation2.write();
orientation3.write();
mC.writeXYZ
(
mC.mesh().time().timePath() + "/lagrangian" + "/moleculeCloud.xmol"
);
} }
@ -225,17 +277,17 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const molecule& mol)
( (
reinterpret_cast<const char*>(&mol.Q_), reinterpret_cast<const char*>(&mol.Q_),
sizeof(mol.Q_) sizeof(mol.Q_)
+ sizeof(mol.v_) + sizeof(mol.v_)
+ sizeof(mol.a_) + sizeof(mol.a_)
+ sizeof(mol.pi_) + sizeof(mol.pi_)
+ sizeof(mol.tau_) + sizeof(mol.tau_)
+ sizeof(mol.specialPosition_) + sizeof(mol.specialPosition_)
+ sizeof(mol.potentialEnergy_) + sizeof(mol.potentialEnergy_)
+ sizeof(mol.rf_) + sizeof(mol.rf_)
+ sizeof(mol.special_) + sizeof(mol.special_)
+ sizeof(mol.id_) + sizeof(mol.id_)
); );
os << mol.siteForces_ << mol.sitePositions_; os << mol.siteForces_ << mol.sitePositions_;
} }
// Check state of Ostream // Check state of Ostream

View File

@ -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
@ -928,7 +928,6 @@ void Foam::moleculeCloud::initialiseMolecules
n++; n++;
} }
} }
} }
} }
@ -1025,6 +1024,21 @@ void Foam::moleculeCloud::createMolecule
} }
Foam::label Foam::moleculeCloud::nSites() const
{
label n = 0;
const_iterator mol(this->begin());
for (mol = this->begin(); mol != this->end(); ++mol)
{
n += constProps(mol().id()).nSites();
}
return n;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::moleculeCloud::moleculeCloud Foam::moleculeCloud::moleculeCloud
@ -1158,4 +1172,30 @@ void Foam::moleculeCloud::writeFields() const
} }
void Foam::moleculeCloud::writeXYZ(const fileName& fName) const
{
OFstream str(fName);
str << nSites() << nl << "moleculeCloud site positions in angstroms" << nl;
const_iterator mol(this->begin());
for (mol = this->begin(); mol != this->end(); ++mol)
{
const molecule::constantProperties& cP = constProps(mol().id());
forAll(mol().sitePositions(), i)
{
const point& sP = mol().sitePositions()[i];
str << pot_.siteIdList()[cP.siteIds()[i]]
<< ' ' << sP.x()*1e10
<< ' ' << sP.y()*1e10
<< ' ' << sP.z()*1e10
<< nl;
}
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -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
@ -44,6 +44,7 @@ SourceFiles
#include "interactionLists.H" #include "interactionLists.H"
#include "labelVector.H" #include "labelVector.H"
#include "Random.H" #include "Random.H"
#include "fileName.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -51,7 +52,7 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class moleculeCloud Declaration Class moleculeCloud Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class moleculeCloud class moleculeCloud
@ -75,6 +76,7 @@ private:
Random rndGen_; Random rndGen_;
// Private Member Functions // Private Member Functions
void buildConstProps(); void buildConstProps();
@ -131,6 +133,8 @@ private:
const vector& bulkVelocity const vector& bulkVelocity
); );
label nSites() const;
inline vector equipartitionLinearVelocity inline vector equipartitionLinearVelocity
( (
scalar temperature, scalar temperature,
@ -160,6 +164,7 @@ public:
static scalar vacuumPermittivity; static scalar vacuumPermittivity;
// Constructors // Constructors
//- Construct given mesh and potential references //- Construct given mesh and potential references
@ -177,8 +182,8 @@ public:
const IOdictionary& mdInitialiseDict const IOdictionary& mdInitialiseDict
); );
// Member Functions
// Member Functions
//- Evolve the molecules (move, calculate forces, control state etc) //- Evolve the molecules (move, calculate forces, control state etc)
void evolve(); void evolve();
@ -191,6 +196,7 @@ public:
const scalar measuredTemperature const scalar measuredTemperature
); );
// Access // Access
inline const polyMesh& mesh() const; inline const polyMesh& mesh() const;
@ -204,15 +210,18 @@ public:
inline const List<molecule::constantProperties> constProps() const; inline const List<molecule::constantProperties> constProps() const;
inline const molecule::constantProperties& inline const molecule::constantProperties&
constProps(label id) const; constProps(label id) const;
inline Random& rndGen(); inline Random& rndGen();
// Member Operators // Member Operators
//- Write fields //- Write fields
void writeFields() const;
void writeFields() const; //- Write molecule sites in XYZ format
void writeXYZ(const fileName& fName) const;
}; };

View File

@ -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
@ -32,9 +32,9 @@ inline void Foam::moleculeCloud::evaluatePair
molecule* molJ molecule* molJ
) )
{ {
const pairPotentialList& pairPot(pot_.pairPotentials()); const pairPotentialList& pairPot = pot_.pairPotentials();
const electrostaticPotential& electrostatic(pot_.electrostatic()); const pairPotential& electrostatic = pairPot.electrostatic();
label idI = molI->id(); label idI = molI->id();
@ -67,7 +67,7 @@ inline void Foam::moleculeCloud::evaluatePair
if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ])
{ {
vector rsIsJ = vector rsIsJ =
molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; molI->sitePositions()[sI] - molJ->sitePositions()[sJ];
scalar rsIsJMagSq = magSqr(rsIsJ); scalar rsIsJMagSq = magSqr(rsIsJ);
@ -75,8 +75,9 @@ inline void Foam::moleculeCloud::evaluatePair
{ {
scalar rsIsJMag = mag(rsIsJ); scalar rsIsJMag = mag(rsIsJ);
vector fsIsJ = (rsIsJ/rsIsJMag) vector fsIsJ =
*pairPot.force(idsI, idsJ, rsIsJMag); (rsIsJ/rsIsJMag)
*pairPot.force(idsI, idsJ, rsIsJMag);
molI->siteForces()[sI] += fsIsJ; molI->siteForces()[sI] += fsIsJ;
@ -91,9 +92,18 @@ inline void Foam::moleculeCloud::evaluatePair
molJ->potentialEnergy() += 0.5*potentialEnergy; molJ->potentialEnergy() += 0.5*potentialEnergy;
molI->rf() += rsIsJ * fsIsJ; vector rIJ = molI->position() - molJ->position();
molJ->rf() += rsIsJ * fsIsJ; tensor virialContribution =
(rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq;
molI->rf() += virialContribution;
molJ->rf() += virialContribution;
// molI->rf() += rsIsJ * fsIsJ;
// molJ->rf() += rsIsJ * fsIsJ;
} }
} }
@ -104,7 +114,7 @@ inline void Foam::moleculeCloud::evaluatePair
scalar rsIsJMagSq = magSqr(rsIsJ); scalar rsIsJMagSq = magSqr(rsIsJ);
if(pairPot.rCutMaxSqr(rsIsJMagSq)) if(rsIsJMagSq <= electrostatic.rCutSqr())
{ {
scalar rsIsJMag = mag(rsIsJ); scalar rsIsJMag = mag(rsIsJ);
@ -112,38 +122,50 @@ inline void Foam::moleculeCloud::evaluatePair
scalar chargeJ = constPropJ.siteCharges()[sJ]; scalar chargeJ = constPropJ.siteCharges()[sJ];
vector fsIsJ = (rsIsJ/rsIsJMag) vector fsIsJ =
*chargeI*chargeJ*electrostatic.force(rsIsJMag); (rsIsJ/rsIsJMag)
*chargeI*chargeJ*electrostatic.force(rsIsJMag);
molI->siteForces()[sI] += fsIsJ; molI->siteForces()[sI] += fsIsJ;
molJ->siteForces()[sJ] += -fsIsJ; molJ->siteForces()[sJ] += -fsIsJ;
scalar potentialEnergy = chargeI*chargeJ scalar potentialEnergy =
*electrostatic.energy(rsIsJMag); chargeI*chargeJ
*electrostatic.energy(rsIsJMag);
molI->potentialEnergy() += 0.5*potentialEnergy; molI->potentialEnergy() += 0.5*potentialEnergy;
molJ->potentialEnergy() += 0.5*potentialEnergy; molJ->potentialEnergy() += 0.5*potentialEnergy;
molI->rf() += rsIsJ * fsIsJ; vector rIJ = molI->position() - molJ->position();
molJ->rf() += rsIsJ * fsIsJ; tensor virialContribution =
(rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq;
molI->rf() += virialContribution;
molJ->rf() += virialContribution;
// molI->rf() += rsIsJ * fsIsJ;
// molJ->rf() += rsIsJ * fsIsJ;
} }
} }
} }
} }
} }
inline void Foam::moleculeCloud::evaluatePair inline void Foam::moleculeCloud::evaluatePair
( (
molecule* molReal, molecule* molReal,
referredMolecule* molRef referredMolecule* molRef
) )
{ {
const pairPotentialList& pairPot(pot_.pairPotentials()); const pairPotentialList& pairPot = pot_.pairPotentials();
const electrostaticPotential& electrostatic(pot_.electrostatic()); const pairPotential& electrostatic = pairPot.electrostatic();
label idReal = molReal->id(); label idReal = molReal->id();
@ -176,16 +198,18 @@ inline void Foam::moleculeCloud::evaluatePair
if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef])
{ {
vector rsRealsRef = vector rsRealsRef =
molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; molReal->sitePositions()[sReal]
- molRef->sitePositions()[sRef];
scalar rsRealsRefMagSq = magSqr(rsRealsRef); scalar rsRealsRefMagSq = magSqr(rsRealsRef);
if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq))
{ {
scalar rsRealsRefMag = mag(rsRealsRef); scalar rsRealsRefMag = mag(rsRealsRef);
vector fsRealsRef = (rsRealsRef/rsRealsRefMag) vector fsRealsRef =
*pairPot.force(idsReal, idsRef, rsRealsRefMag); (rsRealsRef/rsRealsRefMag)
*pairPot.force(idsReal, idsRef, rsRealsRefMag);
molReal->siteForces()[sReal] += fsRealsRef; molReal->siteForces()[sReal] += fsRealsRef;
@ -196,7 +220,14 @@ inline void Foam::moleculeCloud::evaluatePair
molReal->potentialEnergy() += 0.5*potentialEnergy; molReal->potentialEnergy() += 0.5*potentialEnergy;
molReal->rf() += rsRealsRef * fsRealsRef; vector rRealRef = molReal->position() - molRef->position();
molReal->rf() +=
(rsRealsRef*fsRealsRef)
*(rsRealsRef & rRealRef)
/rsRealsRefMagSq;
// molReal->rf() += rsRealsRef * fsRealsRef;
} }
} }
@ -204,11 +235,12 @@ inline void Foam::moleculeCloud::evaluatePair
if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef]) if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef])
{ {
vector rsRealsRef = vector rsRealsRef =
molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; molReal->sitePositions()[sReal]
- molRef->sitePositions()[sRef];
scalar rsRealsRefMagSq = magSqr(rsRealsRef); scalar rsRealsRefMagSq = magSqr(rsRealsRef);
if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) if (rsRealsRefMagSq <= electrostatic.rCutSqr())
{ {
scalar rsRealsRefMag = mag(rsRealsRef); scalar rsRealsRefMag = mag(rsRealsRef);
@ -216,18 +248,27 @@ inline void Foam::moleculeCloud::evaluatePair
scalar chargeRef = constPropRef.siteCharges()[sRef]; scalar chargeRef = constPropRef.siteCharges()[sRef];
vector fsRealsRef = (rsRealsRef/rsRealsRefMag) vector fsRealsRef =
*chargeReal*chargeRef (rsRealsRef/rsRealsRefMag)
*electrostatic.force(rsRealsRefMag); *chargeReal*chargeRef
*electrostatic.force(rsRealsRefMag);
molReal->siteForces()[sReal] += fsRealsRef; molReal->siteForces()[sReal] += fsRealsRef;
scalar potentialEnergy = chargeReal*chargeRef scalar potentialEnergy =
*electrostatic.energy(rsRealsRefMag); chargeReal*chargeRef
*electrostatic.energy(rsRealsRefMag);
molReal->potentialEnergy() += 0.5*potentialEnergy; molReal->potentialEnergy() += 0.5*potentialEnergy;
molReal->rf() += rsRealsRef * fsRealsRef; vector rRealRef = molReal->position() - molRef->position();
molReal->rf() +=
(rsRealsRef*fsRealsRef)
*(rsRealsRef & rRealRef)
/rsRealsRefMagSq;
// molReal->rf() += rsRealsRef * fsRealsRef;
} }
} }
} }
@ -241,9 +282,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
molecule* molJ molecule* molJ
) const ) const
{ {
const pairPotentialList& pairPot(pot_.pairPotentials()); const pairPotentialList& pairPot = pot_.pairPotentials();
const electrostaticPotential& electrostatic(pot_.electrostatic()); const pairPotential& electrostatic = pairPot.electrostatic();
label idI = molI->id(); label idI = molI->id();
@ -276,11 +317,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ])
{ {
vector rsIsJ = vector rsIsJ =
molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; molI->sitePositions()[sI] - molJ->sitePositions()[sJ];
scalar rsIsJMagSq = magSqr(rsIsJ); scalar rsIsJMagSq = magSqr(rsIsJ);
if(pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq))
{ {
scalar rsIsJMag = mag(rsIsJ); scalar rsIsJMag = mag(rsIsJ);
@ -291,7 +332,7 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (rsIsJMag < SMALL) if (rsIsJMag < SMALL)
{ {
WarningIn("moleculeCloud::removeHighEnergyOverlaps()") WarningIn("moleculeCloud::removeHighEnergyOverlaps()")
<< "Molecule site pair closer than " << "Molecule site pair closer than "
<< SMALL << SMALL
<< ": mag separation = " << rsIsJMag << ": mag separation = " << rsIsJMag
<< ". These may have been placed on top of each" << ". These may have been placed on top of each"
@ -325,11 +366,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (electrostaticSitesI[sI] && electrostaticSitesJ[sJ]) if (electrostaticSitesI[sI] && electrostaticSitesJ[sJ])
{ {
vector rsIsJ = vector rsIsJ =
molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; molI->sitePositions()[sI] - molJ->sitePositions()[sJ];
scalar rsIsJMagSq = magSqr(rsIsJ); scalar rsIsJMagSq = magSqr(rsIsJ);
if(pairPot.rCutMaxSqr(rsIsJMagSq)) if (pairPot.rCutMaxSqr(rsIsJMagSq))
{ {
scalar rsIsJMag = mag(rsIsJ); scalar rsIsJMag = mag(rsIsJ);
@ -340,18 +381,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (rsIsJMag < SMALL) if (rsIsJMag < SMALL)
{ {
WarningIn("moleculeCloud::removeHighEnergyOverlaps()") WarningIn("moleculeCloud::removeHighEnergyOverlaps()")
<< "Molecule site pair closer than " << "Molecule site pair closer than "
<< SMALL << SMALL
<< ": mag separation = " << rsIsJMag << ": mag separation = " << rsIsJMag
<< ". These may have been placed on top of each" << ". These may have been placed on top of each"
<< " other by a rounding error in molConfig in" << " other by a rounding error in mdInitialise in"
<< " parallel or a block filled with molecules " << " parallel or a block filled with molecules"
<< " twice. Removing one of the molecules." << " twice. Removing one of the molecules."
<< endl; << endl;
return true; return true;
} }
if (rsIsJMag < electrostatic.rMin())
{
return true;
}
scalar chargeI = constPropI.siteCharges()[sI]; scalar chargeI = constPropI.siteCharges()[sI];
scalar chargeJ = constPropJ.siteCharges()[sJ]; scalar chargeJ = constPropJ.siteCharges()[sJ];
@ -379,9 +425,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
referredMolecule* molRef referredMolecule* molRef
) const ) const
{ {
const pairPotentialList& pairPot(pot_.pairPotentials()); const pairPotentialList& pairPot = pot_.pairPotentials();
const electrostaticPotential& electrostatic(pot_.electrostatic()); const pairPotential& electrostatic = pairPot.electrostatic();
label idReal = molReal->id(); label idReal = molReal->id();
@ -414,11 +460,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef])
{ {
vector rsRealsRef = vector rsRealsRef =
molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; molReal->sitePositions()[sReal]
- molRef->sitePositions()[sRef];
scalar rsRealsRefMagSq = magSqr(rsRealsRef); scalar rsRealsRefMagSq = magSqr(rsRealsRef);
if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq))
{ {
scalar rsRealsRefMag = mag(rsRealsRef); scalar rsRealsRefMag = mag(rsRealsRef);
@ -429,12 +476,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (rsRealsRefMag < SMALL) if (rsRealsRefMag < SMALL)
{ {
WarningIn("moleculeCloud::removeHighEnergyOverlaps()") WarningIn("moleculeCloud::removeHighEnergyOverlaps()")
<< "Molecule site pair closer than " << "Molecule site pair closer than "
<< SMALL << SMALL
<< ": mag separation = " << rsRealsRefMag << ": mag separation = " << rsRealsRefMag
<< ". These may have been placed on top of each" << ". These may have been placed on top of each"
<< " other by a rounding error in molConfig in" << " other by a rounding error in mdInitialise in"
<< " parallel or a block filled with molecules " << " parallel or a block filled with molecules"
<< " twice. Removing one of the molecules." << " twice. Removing one of the molecules."
<< endl; << endl;
@ -464,11 +511,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef]) if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef])
{ {
vector rsRealsRef = vector rsRealsRef =
molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; molReal->sitePositions()[sReal]
- molRef->sitePositions()[sRef];
scalar rsRealsRefMagSq = magSqr(rsRealsRef); scalar rsRealsRefMagSq = magSqr(rsRealsRef);
if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) if (pairPot.rCutMaxSqr(rsRealsRefMagSq))
{ {
scalar rsRealsRefMag = mag(rsRealsRef); scalar rsRealsRefMag = mag(rsRealsRef);
@ -479,18 +527,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
if (rsRealsRefMag < SMALL) if (rsRealsRefMag < SMALL)
{ {
WarningIn("moleculeCloud::removeHighEnergyOverlaps()") WarningIn("moleculeCloud::removeHighEnergyOverlaps()")
<< "Molecule site pair closer than " << "Molecule site pair closer than "
<< SMALL << SMALL
<< ": mag separation = " << rsRealsRefMag << ": mag separation = " << rsRealsRefMag
<< ". These may have been placed on top of each" << ". These may have been placed on top of each"
<< " other by a rounding error in molConfig in" << " other by a rounding error in mdInitialise in"
<< " parallel or a block filled with molecules " << " parallel or a block filled with molecules"
<< " twice. Removing one of the molecules." << " twice. Removing one of the molecules."
<< endl; << endl;
return true; return true;
} }
if (rsRealsRefMag < electrostatic.rMin())
{
return true;
}
scalar chargeReal = constPropReal.siteCharges()[sReal]; scalar chargeReal = constPropReal.siteCharges()[sReal];
scalar chargeRef = constPropRef.siteCharges()[sRef]; scalar chargeRef = constPropRef.siteCharges()[sRef];
@ -499,8 +552,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit
( (
mag mag
( (
chargeReal*chargeRef chargeReal
*electrostatic.energy(rsRealsRefMag) *chargeRef
*electrostatic.energy(rsRealsRefMag)
) )
> pot_.potentialEnergyLimit() > pot_.potentialEnergyLimit()
) )
@ -559,6 +613,7 @@ inline Foam::vector Foam::moleculeCloud::equipartitionAngularMomentum
} }
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
inline const Foam::polyMesh& Foam::moleculeCloud::mesh() const inline const Foam::polyMesh& Foam::moleculeCloud::mesh() const

View File

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

View File

@ -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
@ -46,7 +46,7 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class reducedUnits Declaration Class reducedUnits Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class reducedUnits class reducedUnits

View File

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

View File

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

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