diff --git a/applications/solvers/compressible/sonicDyMFoam/createFields.H b/applications/solvers/compressible/sonicDyMFoam/createFields.H index 93dac20e076c44a31a4848b83987429bafa87b1d..4344a4f5e49451f647a322eb45b08bd07bf062b5 100644 --- a/applications/solvers/compressible/sonicDyMFoam/createFields.H +++ b/applications/solvers/compressible/sonicDyMFoam/createFields.H @@ -7,7 +7,7 @@ basicPsiThermo& thermo = pThermo(); volScalarField& p = thermo.p(); - volScalarField& e = thermo.h(); + volScalarField& e = thermo.e(); const volScalarField& psi = thermo.psi(); volScalarField rho diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C index a124288dc5b64961f7dd48742525216ac3a2e39c..ea10d9129fae5ad178d0f0bb2ade20bf95cfa7fe 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H index 8289d014b03da3f2519d34be134ab4bcaa6ab2b9..b94745d9df20114094e7b75fdff62d15042164eb 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/readmdEquilibrationDict.H @@ -14,5 +14,5 @@ IOdictionary mdEquilibrationDict scalar targetTemperature = readScalar ( - mdEquilibrationDict.lookup("equilibrationTargetTemperature") + mdEquilibrationDict.lookup("targetTemperature") ); diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C index 287065754e39c115a4c9b3a5a04e61faf631c332..9fafafe1c9e7f4a58a8d7e4c181505e688b96948 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options index a53061a93cc503d9368d9d3a900ac6ef801015ba..041d2e0605468bb86b7eee749a4be8de8076f910 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I../buoyantBoussinesqSimpleFoam \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H index e2a89d1441582292fcb5a33ec7e092eac455a5a5..ece4b8ffe5c70d80f68e7093baffe960d5e76433 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/TEqn.H @@ -2,7 +2,7 @@ volScalarField kappaEff ( "kappaEff", - turbulence->nu() + turbulence->nut()/Prt + turbulence->nu()/Pr + turbulence->nut()/Prt ); fvScalarMatrix TEqn @@ -15,4 +15,6 @@ TEqn.relax(); TEqn.solve(); + + rhok = 1.0 - beta*(T - TRef); } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H index 3b5b5be24923c1b410d47c34fd14da319e117026..35387f4ff40468426b6ebc31a6fb517553759fe4 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/UEqn.H @@ -1,23 +1,26 @@ // Solve the momentum equation - tmp<fvVectorMatrix> UEqn + fvVectorMatrix UEqn ( fvm::ddt(U) + fvm::div(phi, U) + turbulence->divDevReff(U) ); - UEqn().relax(); + UEqn.relax(); - solve - ( - UEqn() - == - -fvc::reconstruct + if (momentumPredictor) + { + solve ( + UEqn + == + fvc::reconstruct ( - fvc::snGrad(pd) - - betaghf*fvc::snGrad(T) - ) * mesh.magSf() - ) - ); + ( + fvc::interpolate(rhok)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) + ) + ); + } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C index 067ae6a992487e9e1c2d113e1e330b4aa306db30..a8ff18374220e04a17c01dcd59325f030ea38361 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/buoyantBoussinesqPisoFoam.C @@ -30,18 +30,18 @@ Description Uses the Boussinesq approximation: \f[ - rho_{eff} = 1 - beta(T - T_{ref}) + rho_{k} = 1 - beta(T - T_{ref}) \f] where: - \f$ rho_{eff} \f$ = the effective (driving) density + \f$ rho_{k} \f$ = the effective (driving) kinematic density beta = thermal expansion coefficient [1/K] T = temperature [K] \f$ T_{ref} \f$ = reference temperature [K] Valid when: \f[ - rho_{eff} << 1 + rho_{k} << 1 \f] \*---------------------------------------------------------------------------*/ @@ -78,20 +78,17 @@ int main(int argc, char *argv[]) #include "setDeltaT.H" #include "UEqn.H" + #include "TEqn.H" // --- PISO loop for (int corr=0; corr<nCorr; corr++) { - #include "TEqn.H" - #include "pdEqn.H" + #include "pEqn.H" } turbulence->correct(); - if (runTime.write()) - { - #include "writeAdditionalFields.H" - } + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H index 5f3f13626db0a860d7058e76ce5a90f397558c95..dde0e38b339348ac1693d4bfdf3da9889610a354 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/createFields.H @@ -14,13 +14,12 @@ mesh ); - // kinematic pd - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -53,15 +52,25 @@ incompressible::RASModel::New(U, phi, laminarTransport) ); - Info<< "Calculating field beta*(g.h)\n" << endl; - surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf())); - - label pdRefCell = 0; - scalar pdRefValue = 0.0; + label pRefCell = 0; + scalar pRefValue = 0.0; setRefCell ( - pd, - mesh.solutionDict().subDict("SIMPLE"), - pdRefCell, - pdRefValue + p, + mesh.solutionDict().subDict("PISO"), + pRefCell, + pRefValue + ); + + + // Kinematic density for buoyancy force + volScalarField rhok + ( + IOobject + ( + "rhok", + runTime.timeName(), + mesh + ), + 1.0 - beta*(T - TRef) ); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H similarity index 55% rename from applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H rename to applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H index 25e2a9817fbe680f3b52b91b5a7fc187d52a3643..ff0c26f05893f6e625e7a8a5193c2f6a08882bc5 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pdEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/pEqn.H @@ -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)); - U = rUA*UEqn().H(); - UEqn.clear(); + U = rUA*UEqn.H(); surfaceScalarField phiU ( @@ -11,31 +10,31 @@ + 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++) { - fvScalarMatrix pdEqn + fvScalarMatrix pEqn ( - fvm::laplacian(rUAf, pd) == fvc::div(phi) + fvm::laplacian(rUAf, p) == fvc::div(phi) ); if (corr == nCorr-1 && nonOrth == nNonOrthCorr) { - pdEqn.solve(mesh.solver(pd.name() + "Final")); + pEqn.solve(mesh.solver(p.name() + "Final")); } else { - pdEqn.solve(mesh.solver(pd.name())); + pEqn.solve(mesh.solver(p.name())); } 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(); #include "continuityErrs.H" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H deleted file mode 100644 index 585128dfdeb7d5e5212f9412d9b415c05c15b752..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/readTransportProperties.H +++ /dev/null @@ -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")); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H deleted file mode 100644 index 20f7c6ae1dcff80630dc2ca21253b1e824ea5d77..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPisoFoam/writeAdditionalFields.H +++ /dev/null @@ -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(); -} diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H index d00f0877eaf592058b956d3c9f78979d91d6dbc1..7452a0495adf2207ffb0f66e9e4484e1e7c9bad2 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/TEqn.H @@ -2,7 +2,7 @@ volScalarField kappaEff ( "kappaEff", - turbulence->nu() + turbulence->nut()/Prt + turbulence->nu()/Pr + turbulence->nut()/Prt ); fvScalarMatrix TEqn @@ -16,4 +16,6 @@ eqnResidual = TEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); + + rhok = 1.0 - beta*(T - TRef); } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H index cf5c4a197893afff99ffec01847b2ce9bbd57b3e..a813a2d8b7aab17f8a45dfc9295e9ee6f161a683 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/UEqn.H @@ -13,12 +13,12 @@ ( UEqn() == - -fvc::reconstruct + fvc::reconstruct ( ( - fvc::snGrad(pd) - - betaghf*fvc::snGrad(T) - ) * mesh.magSf() + fvc::interpolate(rhok)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) ) ).initialResidual(); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C index 58947fe295498057e57fb51c557a5782b8f2ef9e..63b938fa3625c2a15475b5ab5eb2157ce4cd9416 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C @@ -72,21 +72,18 @@ int main(int argc, char *argv[]) #include "readSIMPLEControls.H" #include "initConvergenceCheck.H" - pd.storePrevIter(); + p.storePrevIter(); // Pressure-velocity SIMPLE corrector { #include "UEqn.H" #include "TEqn.H" - #include "pdEqn.H" + #include "pEqn.H" } turbulence->correct(); - if (runTime.write()) - { - #include "writeAdditionalFields.H" - } + runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H index 5f3f13626db0a860d7058e76ce5a90f397558c95..0e668e9d987c132605e1aa28daee9e9aa0bf9a94 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/createFields.H @@ -14,13 +14,12 @@ mesh ); - // kinematic pd - Info<< "Reading field pd\n" << endl; - volScalarField pd + Info<< "Reading field p\n" << endl; + volScalarField p ( IOobject ( - "pd", + "p", runTime.timeName(), mesh, IOobject::MUST_READ, @@ -56,12 +55,25 @@ Info<< "Calculating field beta*(g.h)\n" << endl; surfaceScalarField betaghf("betagh", beta*(g & mesh.Cf())); - label pdRefCell = 0; - scalar pdRefValue = 0.0; + label pRefCell = 0; + scalar pRefValue = 0.0; setRefCell ( - pd, + p, mesh.solutionDict().subDict("SIMPLE"), - pdRefCell, - pdRefValue + pRefCell, + pRefValue + ); + + + // Kinematic density for buoyancy force + volScalarField rhok + ( + IOobject + ( + "rhok", + runTime.timeName(), + mesh + ), + 1.0 - beta*(T - TRef) ); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H similarity index 64% rename from applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H rename to applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H index e782d26c8dc5ad4374d1b5a76ab7dfd72f6b9601..e1d42d738e8deff2eda578436baca131809f352f 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pdEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/pEqn.H @@ -6,41 +6,42 @@ UEqn.clear(); phi = fvc::interpolate(U) & mesh.Sf(); - adjustPhi(phi, U, pd); - surfaceScalarField buoyancyPhi = -betaghf*fvc::snGrad(T)*rUAf*mesh.magSf(); - phi -= buoyancyPhi; + adjustPhi(phi, U, p); + surfaceScalarField buoyancyPhi = + rUAf*fvc::interpolate(rhok)*(g & mesh.Sf()); + phi += buoyancyPhi; 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 if (nonOrth == 0) { - eqnResidual = pdEqn.solve().initialResidual(); + eqnResidual = pEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); } else { - pdEqn.solve(); + pEqn.solve(); } if (nonOrth == nNonOrthCorr) { // Calculate the conservative fluxes - phi -= pdEqn.flux(); + phi -= pEqn.flux(); // Explicitly relax pressure for momentum corrector - pd.relax(); + p.relax(); // Correct the momentum source with the pressure gradient flux // calculated from the relaxed pressure - U -= rUA*fvc::reconstruct((buoyancyPhi + pdEqn.flux())/rUAf); + U += rUA*fvc::reconstruct((buoyancyPhi - pEqn.flux())/rUAf); U.correctBoundaryConditions(); } } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H index 585128dfdeb7d5e5212f9412d9b415c05c15b752..82d101d8c1b18d88c41af9ffd0f7e4d10fa89cd2 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/readTransportProperties.H @@ -1,13 +1,13 @@ singlePhaseTransportModel laminarTransport(U, phi); - // thermal expansion coefficient [1/K] + // Thermal expansion coefficient [1/K] dimensionedScalar beta(laminarTransport.lookup("beta")); - // reference temperature [K] + // Reference temperature [K] dimensionedScalar TRef(laminarTransport.lookup("TRef")); - // reference kinematic pressure [m2/s2] - dimensionedScalar pRef(laminarTransport.lookup("pRef")); + // Laminar Prandtl number + dimensionedScalar Pr(laminarTransport.lookup("Pr")); - // turbulent Prandtl number + // Turbulent Prandtl number dimensionedScalar Prt(laminarTransport.lookup("Prt")); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H deleted file mode 100644 index 20f7c6ae1dcff80630dc2ca21253b1e824ea5d77..0000000000000000000000000000000000000000 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/writeAdditionalFields.H +++ /dev/null @@ -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(); -} diff --git a/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H b/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H index b5c84e435e3b2a95ad2cb8b67e215559d49758a0..b8ac5595e47cec77aa257c54a1710f91b08f20f7 100644 --- a/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H +++ b/applications/solvers/heatTransfer/buoyantPisoFoam/createFields.H @@ -65,4 +65,3 @@ dimensionedScalar initialMass = fvc::domainIntegrate(rho); dimensionedScalar totalVolume = sum(mesh.V()); - diff --git a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C index 0862d20bb2ce9fe649be9b286df8b149ae3e024f..c869eff89956a1b4e581fcdf6e1adf4643ecbfe4 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C +++ b/applications/solvers/heatTransfer/buoyantSimpleRadiationFoam/buoyantSimpleRadiationFoam.C @@ -41,16 +41,15 @@ Description 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; @@ -58,17 +57,17 @@ int main(int argc, char *argv[]) { Info<< "Time = " << runTime.timeName() << nl << endl; -# include "readSIMPLEControls.H" -# include "initConvergenceCheck.H" + #include "readSIMPLEControls.H" + #include "initConvergenceCheck.H" p.storePrevIter(); rho.storePrevIter(); // Pressure-velocity SIMPLE corrector { -# include "UEqn.H" -# include "hEqn.H" -# include "pEqn.H" + #include "UEqn.H" + #include "hEqn.H" + #include "pEqn.H" } turbulence->correct(); @@ -79,7 +78,7 @@ int main(int argc, char *argv[]) << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl; -# include "convergenceCheck.H" + #include "convergenceCheck.H" } Info<< "End\n" << endl; diff --git a/applications/solvers/incompressible/channelFoam/readTransportProperties.H b/applications/solvers/incompressible/channelFoam/readTransportProperties.H index c99d0ae4b5b97f4ed18765efe9a69103ba08e2c3..87c93c9195880f243c7ac035020345c283fd2450 100644 --- a/applications/solvers/incompressible/channelFoam/readTransportProperties.H +++ b/applications/solvers/incompressible/channelFoam/readTransportProperties.H @@ -7,7 +7,8 @@ runTime.constant(), mesh, IOobject::MUST_READ, - IOobject::NO_WRITE + IOobject::NO_WRITE, + false ) ); diff --git a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H index 3347db180bbe769eefeb5a41762550409e5b16e2..aeb3137adfe091daaabbda9490016527a066afe9 100644 --- a/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H +++ b/applications/utilities/mesh/generation/blockMesh/mergePatchPairs.H @@ -1,7 +1,7 @@ - Info<< "Creating merge patch pairs" << nl << endl; - if (mergePatchPairs.size()) { + Info<< "Creating merge patch pairs" << nl << endl; + // Create and add point and face zones and mesh modifiers List<pointZone*> pz(mergePatchPairs.size()); List<faceZone*> fz(3*mergePatchPairs.size()); diff --git a/applications/utilities/mesh/manipulation/cellSet/cellSetDict b/applications/utilities/mesh/manipulation/cellSet/cellSetDict index 95465d8f5421d2316b2a74f0404ea79e10700010..fd11ab871d9b66a0bb4b3c89feb0d7d8015b40c4 100644 --- a/applications/utilities/mesh/manipulation/cellSet/cellSetDict +++ b/applications/utilities/mesh/manipulation/cellSet/cellSetDict @@ -26,12 +26,31 @@ action new; topoSetSources ( + // Select by explicitly providing cell labels + labelToCell + { + value (12 13 56); // labels of cells + } + // Copy elements from cellSet cellToCell { set c1; } + // Cells in cell zone + zoneToCell + { + name ".*Zone"; // Name of cellZone, regular expressions allowed + } + + // Cells on master or slave side of faceZone + faceZoneToCell + { + name ".*Zone"; // Name of faceZone, regular expressions allowed + option master; // master/slave + } + // Select based on faceSet faceToCell { @@ -51,12 +70,6 @@ topoSetSources //option all; // cell with all points in pointSet } - // Select by explicitly providing cell labels - labelToCell - { - value (12 13 56); // labels of cells - } - // Select based on cellShape shapeToCell { @@ -87,7 +100,6 @@ topoSetSources radius 5.0; } - // Cells with centre within sphere sphereToCell { @@ -95,20 +107,6 @@ topoSetSources radius 5.0; } - // Cells in cell zone - zoneToCell - { - name ".*Zone"; // Name of cellZone, regular expressions allowed - } - - // values of field within certain range - fieldToCell - { - fieldName U; // Note: uses mag(U) since volVectorField - min 0.1; - max 0.5; - } - // Cells with cellCentre nearest to coordinates nearestToCell { @@ -129,6 +127,22 @@ topoSetSources // and near surf curvature // (set to -100 if not used) } + + // values of field within certain range + fieldToCell + { + fieldName U; // Note: uses mag(U) since volVectorField + min 0.1; + max 0.5; + } + + // Mesh region (non-face connected part of (subset of)mesh) + regionToCell + { + set c0; // name of cellSet giving mesh subset + insidePoint (1 2 3); // point inside region to select + } + ); diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C index 14f57048365684cd02cdb66cb879dcd868c37cb2..9ce34cda1c73f4638439af2c837f24b1a89eb23e 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C +++ b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.C @@ -7,6 +7,31 @@ #include "pointSet.H" #include "IOmanip.H" +bool Foam::checkSync(const wordList& names) +{ + List<wordList> allNames(Pstream::nProcs()); + allNames[Pstream::myProcNo()] = names; + Pstream::gatherList(allNames); + + bool hasError = false; + + for (label procI = 1; procI < allNames.size(); procI++) + { + if (allNames[procI] != allNames[0]) + { + hasError = true; + + Info<< " ***Inconsistent zones across processors, " + "processor 0 has zones:" << allNames[0] + << ", processor " << procI << " has zones:" + << allNames[procI] + << endl; + } + } + return hasError; +} + + Foam::label Foam::checkTopology ( const polyMesh& mesh, @@ -24,6 +49,31 @@ Foam::label Foam::checkTopology // Check if the boundary processor patches are correct mesh.boundaryMesh().checkParallelSync(true); + // Check names of zones are equal + if (checkSync(mesh.cellZones().names())) + { + noFailedChecks++; + } + if (checkSync(mesh.faceZones().names())) + { + noFailedChecks++; + } + if (checkSync(mesh.pointZones().names())) + { + noFailedChecks++; + } + + // Check contents of faceZones consistent + { + forAll(mesh.faceZones(), zoneI) + { + if (mesh.faceZones()[zoneI].checkParallelSync(true)) + { + noFailedChecks++; + } + } + } + { pointSet points(mesh, "unusedPoints", mesh.nPoints()/100); if (mesh.checkPoints(true, &points)) diff --git a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H index 787aa4318d21cbe49eb162932f74f94ff5444757..4790765d16e408c18d9ada199da97235e4c82975 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H +++ b/applications/utilities/mesh/manipulation/checkMesh/checkTopology.H @@ -1,8 +1,11 @@ #include "label.H" +#include "wordList.H" namespace Foam { class polyMesh; + bool checkSync(const wordList& names); + label checkTopology(const polyMesh&, const bool, const bool); } diff --git a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C index 9a2c9396afba0a645483f86eec3d65239372cb43..269656594c5c6524c6508c7c602967ac419173df 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C +++ b/applications/utilities/mesh/manipulation/checkMesh/printMeshStats.C @@ -69,13 +69,13 @@ void Foam::printMeshStats(const polyMesh& mesh, const bool allTopology) << " cells: " << returnReduce(mesh.cells().size(), sumOp<label>()) << nl << " boundary patches: " - << returnReduce(mesh.boundaryMesh().size(), sumOp<label>()) << nl + << mesh.boundaryMesh().size() << nl << " point zones: " - << returnReduce(mesh.pointZones().size(), sumOp<label>()) << nl + << mesh.pointZones().size() << nl << " face zones: " - << returnReduce(mesh.faceZones().size(), sumOp<label>()) << nl + << mesh.faceZones().size() << nl << " cell zones: " - << returnReduce(mesh.cellZones().size(), sumOp<label>()) << nl + << mesh.cellZones().size() << nl << endl; diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C index 1fb8cc64efe26da5a52ac4f31de7a293d6d7274f..88af3a1f2915628a05fe5b70306c4b3daa770fae 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C +++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C @@ -43,16 +43,89 @@ Description #include "ReadFields.H" #include "volFields.H" #include "surfaceFields.H" +#include "ZoneIDs.H" using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +void modifyOrAddFace +( + polyTopoChange& meshMod, + const face& f, + const label faceI, + const label own, + const bool flipFaceFlux, + const label newPatchI, + const label zoneID, + const bool zoneFlip, + + PackedBoolList& modifiedFace +) +{ + if (!modifiedFace[faceI]) + { + // First usage of face. Modify. + meshMod.setAction + ( + polyModifyFace + ( + f, // modified face + faceI, // label of face + own, // owner + -1, // neighbour + flipFaceFlux, // face flip + newPatchI, // patch for face + false, // remove from zone + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + modifiedFace[faceI] = 1; + } + else + { + // Second or more usage of face. Add. + meshMod.setAction + ( + polyAddFace + ( + f, // modified face + own, // owner + -1, // neighbour + -1, // master point + -1, // master edge + faceI, // master face + flipFaceFlux, // face flip + newPatchI, // patch for face + zoneID, // zone for face + zoneFlip // face flip in zone + ) + ); + } +} + + +label findPatchID(const polyMesh& mesh, const word& name) +{ + label patchI = mesh.boundaryMesh().findPatchID(name); + + if (patchI == -1) + { + FatalErrorIn("findPatchID(const polyMesh&, const word&)") + << "Cannot find patch " << name << endl + << "Valid patches are " << mesh.boundaryMesh().names() + << exit(FatalError); + } + return patchI; +} + + // Main program: int main(int argc, char *argv[]) { - argList::validArgs.append("set"); + argList::validArgs.append("faceZone"); argList::validArgs.append("patch"); argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)"); argList::validOptions.insert("overwrite", ""); @@ -67,30 +140,28 @@ int main(int argc, char *argv[]) const faceZoneMesh& faceZones = mesh.faceZones(); // Faces to baffle - word setName(args.additionalArgs()[0]); - Info<< "Reading faceSet from " << setName << nl << endl; - faceSet facesToSplit(mesh, setName); - // Make sure set is synchronised across couples - facesToSplit.sync(mesh); - Info<< "Read " << returnReduce(facesToSplit.size(), sumOp<label>()) - << " faces from " << setName << nl << endl; + faceZoneID zoneID(args.additionalArgs()[0], faceZones); + + Info<< "Converting faces on zone " << zoneID.name() + << " into baffles." << nl << endl; + + const faceZone& fZone = faceZones[zoneID.index()]; + + Info<< "Found " << returnReduce(fZone.size(), sumOp<label>()) + << " faces on zone " << zoneID.name() << nl << endl; + // Make sure patches and zoneFaces are synchronised across couples + patches.checkParallelSync(true); + fZone.checkParallelSync(true); // Patches to put baffles into DynamicList<label> newPatches(1); word patchName(args.additionalArgs()[1]); - newPatches.append(patches.findPatchID(patchName)); - Pout<< "Using patch " << patchName + newPatches.append(findPatchID(mesh, patchName)); + Info<< "Using patch " << patchName << " at index " << newPatches[0] << endl; - if (newPatches[0] == -1) - { - FatalErrorIn(args.executable()) - << "Cannot find patch " << patchName << endl - << "Valid patches are " << patches.names() << exit(FatalError); - } - // Additional patches if (args.optionFound("additionalPatches")) @@ -103,19 +174,9 @@ int main(int argc, char *argv[]) newPatches.reserve(patchNames.size() + 1); forAll(patchNames, i) { - label patchI = patches.findPatchID(patchNames[i]); + newPatches.append(findPatchID(mesh, patchNames[i])); Info<< "Using additional patch " << patchNames[i] - << " at index " << patchI << endl; - - if (patchI == -1) - { - FatalErrorIn(args.executable()) - << "Cannot find patch " << patchNames[i] << endl - << "Valid patches are " << patches.names() - << exit(FatalError); - } - - newPatches.append(patchI); + << " at index " << newPatches[newPatches.size()-1] << endl; } } @@ -166,111 +227,112 @@ int main(int argc, char *argv[]) polyTopoChange meshMod(mesh); - // Do the actual changes - // Note order in which faces are modified/added is so they end up correctly - // for cyclic patches (original faces first and then reversed faces) - // since otherwise it will have trouble matching baffles. + // Do the actual changes. Note: + // - loop in incrementing face order (not necessary if faceZone ordered). + // Preserves any existing ordering on patch faces. + // - two passes, do non-flip faces first and flip faces second. This + // guarantees that when e.g. creating a cyclic all faces from one + // side come first and faces from the other side next. - label nBaffled = 0; + PackedBoolList modifiedFace(mesh.nFaces()); forAll(newPatches, i) { label newPatchI = newPatches[i]; + // Pass 1. Do selected side of zone + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++) { - if (facesToSplit.found(faceI)) - { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) - { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; - } + label zoneFaceI = fZone.whichFace(faceI); - if (i == 0) + if (zoneFaceI != -1) + { + if (!fZone.flipMap()[zoneFaceI]) { - // First usage of face. Modify. - meshMod.setAction + // Use owner side of face + modifyOrAddFace ( - polyModifyFace - ( - f, // modified face - faceI, // label of face - mesh.faceOwner()[faceI], // owner - -1, // neighbour - false, // face flip - newPatchI, // patch for face - false, // remove from zone - zoneID, // zone for face - zoneFlip // face flip in zone - ) + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI],// owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + false, // face flip in zone + modifiedFace // modify or add status ); } else { - // Second or more usage of face. Add. - meshMod.setAction + // Use neighbour side of face + modifyOrAddFace ( - polyAddFace - ( - f, // modified face - mesh.faceOwner()[faceI], // owner - -1, // neighbour - -1, // master point - -1, // master edge - faceI, // master face - false, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) + meshMod, + mesh.faces()[faceI].reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI],// owner + true, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + true, // face flip in zone + modifiedFace // modify or add status ); } - - nBaffled++; } } - // Add the reversed face. + + // Pass 2. Do other side of zone + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++) { - if (facesToSplit.found(faceI)) + label zoneFaceI = fZone.whichFace(faceI); + + if (zoneFaceI != -1) { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) + if (!fZone.flipMap()[zoneFaceI]) { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; + // Use neighbour side of face + modifyOrAddFace + ( + meshMod, + mesh.faces()[faceI].reverseFace(), // modified face + faceI, // label of face + mesh.faceNeighbour()[faceI], // owner + true, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + true, // face flip in zone + modifiedFace // modify or add + ); } - label nei = mesh.faceNeighbour()[faceI]; - - meshMod.setAction - ( - polyAddFace + else + { + // Use owner side of face + modifyOrAddFace ( - f.reverseFace(), // modified face - nei, // owner - -1, // neighbour - -1, // masterPointID - -1, // masterEdgeID - faceI, // masterFaceID, - true, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - - nBaffled++; + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI],// owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + false, // face flip in zone + modifiedFace // modify or add status + ); + } } } + // Modify any boundary faces + // ~~~~~~~~~~~~~~~~~~~~~~~~~ + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; @@ -286,58 +348,22 @@ int main(int argc, char *argv[]) { label faceI = pp.start()+i; - if (facesToSplit.found(faceI)) + label zoneFaceI = fZone.whichFace(faceI); + + if (zoneFaceI != -1) { - const face& f = mesh.faces()[faceI]; - label zoneID = faceZones.whichZone(faceI); - bool zoneFlip = false; - if (zoneID >= 0) - { - const faceZone& fZone = faceZones[zoneID]; - zoneFlip = fZone.flipMap()[fZone.whichFace(faceI)]; - } - - if (i == 0) - { - // First usage of face. Modify. - meshMod.setAction - ( - polyModifyFace - ( - f, // modified face - faceI, // label of face - mesh.faceOwner()[faceI],// owner - -1, // neighbour - false, // face flip - newPatchI, // patch for face - false, // remove from zone - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - } - else - { - // Second or more usage of face. Add. - meshMod.setAction - ( - polyAddFace - ( - f, // modified face - mesh.faceOwner()[faceI],// owner - -1, // neighbour - -1, // master point - -1, // master edge - faceI, // master face - false, // face flip - newPatchI, // patch for face - zoneID, // zone for face - zoneFlip // face flip in zone - ) - ); - } - - nBaffled++; + modifyOrAddFace + ( + meshMod, + mesh.faces()[faceI], // modified face + faceI, // label of face + mesh.faceOwner()[faceI], // owner + false, // face flip + newPatchI, // patch for face + zoneID.index(), // zone for face + fZone.flipMap()[zoneFaceI], // face flip in zone + modifiedFace // modify or add status + ); } } } @@ -345,7 +371,7 @@ int main(int argc, char *argv[]) } - Info<< "Converted " << returnReduce(nBaffled, sumOp<label>()) + Info<< "Converted " << returnReduce(modifiedFace.count(), sumOp<label>()) << " faces into boundary faces on patch " << patchName << nl << endl; if (!overwrite) diff --git a/applications/utilities/mesh/manipulation/pointSet/pointSetDict b/applications/utilities/mesh/manipulation/pointSet/pointSetDict index 1c704a1868fe88c46be3e5d7f53a7eb184eae708..895dcd7f0aec3d01e875c335962a85ae0c6211f7 100644 --- a/applications/utilities/mesh/manipulation/pointSet/pointSetDict +++ b/applications/utilities/mesh/manipulation/pointSet/pointSetDict @@ -51,18 +51,24 @@ topoSetSources value (12 13 56); // labels of points } - // Points with coordinate within box - boxToPoint - { - box (0 0 0) (1 1 1); - } - // All points in pointzone zoneToPoint { name ".*Zone"; // name of pointZone, regular expressions allowed } + // Points nearest to coordinates + nearestToPoint + { + points ((0 0 0) (1 1 1)); + } + + // Points with coordinate within box + boxToPoint + { + box (0 0 0) (1 1 1); + } + // Select based on surface surfaceToPoint { diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C index d79d516806e040de45f70483eec4cdd195bacd04..42ad6110ea9bf258e29b23c075755bfa66e321a9 100644 --- a/applications/utilities/mesh/manipulation/setSet/setSet.C +++ b/applications/utilities/mesh/manipulation/setSet/setSet.C @@ -367,7 +367,7 @@ bool doCommand { r = IOobject::NO_READ; - backup(mesh, setName, setName + "_old"); + //backup(mesh, setName, setName + "_old"); currentSetPtr = topoSet::New(setType, mesh, setName, typSize); } @@ -399,11 +399,11 @@ bool doCommand << " Action:" << actionName << endl; - if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST)) - { - // currentSet has been read so can make copy. - backup(mesh, setName, currentSet, setName + "_old"); - } + //if ((r == IOobject::MUST_READ) && (action != topoSetSource::LIST)) + //{ + // // currentSet has been read so can make copy. + // backup(mesh, setName, currentSet, setName + "_old"); + //} switch (action) { @@ -558,7 +558,8 @@ void printMesh(const Time& runTime, const polyMesh& mesh) << " cells:" << mesh.nCells() << " faces:" << mesh.nFaces() << " points:" << mesh.nPoints() - << " patches:" << mesh.boundaryMesh().size() << nl; + << " patches:" << mesh.boundaryMesh().size() + << " bb:" << mesh.bounds() << nl; } diff --git a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C index dfd7262fd17ba65a287bd041289dbcc95475c7df..a369a195b8c8dcf1d22b6bb60656993fe04c5417 100644 --- a/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C +++ b/applications/utilities/mesh/manipulation/setsToZones/setsToZones.C @@ -28,8 +28,8 @@ Description There is one catch: for faceZones you also need to specify a flip condition which basically denotes the side of the face. In this app - it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) and - any face whose neighbour is in the cellSet gets a flip=true. + it reads a cellSet (xxxCells if 'xxx' is the name of the faceSet) which + is the masterCells of the zone. There are lots of situations in which this will go wrong but it is the best I can think of for now. @@ -87,7 +87,7 @@ int main(int argc, char *argv[]) polyMesh::meshSubDir/"sets" ); - Pout<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets" + Info<< "Searched : " << mesh.pointsInstance()/polyMesh::meshSubDir/"sets" << nl << "Found : " << objects.names() << nl << endl; @@ -95,7 +95,7 @@ int main(int argc, char *argv[]) IOobjectList pointObjects(objects.lookupClass(pointSet::typeName)); - Pout<< "pointSets:" << pointObjects.names() << endl; + //Pout<< "pointSets:" << pointObjects.names() << endl; for ( @@ -126,6 +126,7 @@ int main(int argc, char *argv[]) ) ); mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.pointZones().instance() = mesh.facesInstance(); } else { @@ -133,57 +134,17 @@ int main(int argc, char *argv[]) << " with that of set " << set.name() << "." << endl; mesh.pointZones()[zoneID] = pointLabels; mesh.pointZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.pointZones().instance() = mesh.facesInstance(); } } - IOobjectList cellObjects(objects.lookupClass(cellSet::typeName)); - - Pout<< "cellSets:" << cellObjects.names() << endl; - - for - ( - IOobjectList::const_iterator iter = cellObjects.begin(); - iter != cellObjects.end(); - ++iter - ) - { - // Not in memory. Load it. - cellSet set(*iter()); - SortableList<label> cellLabels(set.toc()); - - label zoneID = mesh.cellZones().findZoneID(set.name()); - if (zoneID == -1) - { - Info<< "Adding set " << set.name() << " as a cellZone." << endl; - label sz = mesh.cellZones().size(); - mesh.cellZones().setSize(sz+1); - mesh.cellZones().set - ( - sz, - new cellZone - ( - set.name(), //name - cellLabels, //addressing - sz, //index - mesh.cellZones() //pointZoneMesh - ) - ); - mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; - } - else - { - Info<< "Overwriting contents of existing cellZone " << zoneID - << " with that of set " << set.name() << "." << endl; - mesh.cellZones()[zoneID] = cellLabels; - mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; - } - } - IOobjectList faceObjects(objects.lookupClass(faceSet::typeName)); - Pout<< "faceSets:" << faceObjects.names() << endl; + HashSet<word> slaveCellSets; + + //Pout<< "faceSets:" << faceObjects.names() << endl; for ( @@ -201,14 +162,11 @@ int main(int argc, char *argv[]) if (!noFlipMap) { - word setName(set.name() + "Cells"); - - Pout<< "Trying to load cellSet " << setName - << " to find out the flipMap." << nl - << "If the neighbour side of the face is in the cellSet" - << " the flipMap becomes true," << nl - << "in all other cases it stays false." - << " If you do not care about the flipMap" + word setName(set.name() + "SlaveCells"); + + Info<< "Trying to load cellSet " << setName + << " to find out the slave side of the zone." << nl + << "If you do not care about the flipMap" << " (i.e. do not use the sideness)" << nl << "use the -noFlipMap command line option." << endl; @@ -216,6 +174,9 @@ int main(int argc, char *argv[]) // Load corresponding cells cellSet cells(mesh, setName); + // Store setName to exclude from cellZones further on + slaveCellSets.insert(setName); + forAll(faceLabels, i) { label faceI = faceLabels[i]; @@ -302,6 +263,7 @@ int main(int argc, char *argv[]) ) ); mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.faceZones().instance() = mesh.facesInstance(); } else { @@ -313,10 +275,63 @@ int main(int argc, char *argv[]) flipMap.shrink() ); mesh.faceZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.faceZones().instance() = mesh.facesInstance(); + } + } + + + + IOobjectList cellObjects(objects.lookupClass(cellSet::typeName)); + + //Pout<< "cellSets:" << cellObjects.names() << endl; + + for + ( + IOobjectList::const_iterator iter = cellObjects.begin(); + iter != cellObjects.end(); + ++iter + ) + { + if (!slaveCellSets.found(iter.key())) + { + // Not in memory. Load it. + cellSet set(*iter()); + SortableList<label> cellLabels(set.toc()); + + label zoneID = mesh.cellZones().findZoneID(set.name()); + if (zoneID == -1) + { + Info<< "Adding set " << set.name() << " as a cellZone." << endl; + label sz = mesh.cellZones().size(); + mesh.cellZones().setSize(sz+1); + mesh.cellZones().set + ( + sz, + new cellZone + ( + set.name(), //name + cellLabels, //addressing + sz, //index + mesh.cellZones() //pointZoneMesh + ) + ); + mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.cellZones().instance() = mesh.facesInstance(); + } + else + { + Info<< "Overwriting contents of existing cellZone " << zoneID + << " with that of set " << set.name() << "." << endl; + mesh.cellZones()[zoneID] = cellLabels; + mesh.cellZones().writeOpt() = IOobject::AUTO_WRITE; + mesh.cellZones().instance() = mesh.facesInstance(); + } } } - Pout<< "Writing mesh." << endl; + + + Info<< "Writing mesh." << endl; if (!mesh.write()) { @@ -325,7 +340,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - Pout << nl << "End" << endl; + Info<< nl << "End" << endl; return 0; } diff --git a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C index 2f06531e335727955a2c8ac97d908da5d71c1937..ecd0221957f1a6836a9b98f838917a907e3d7149 100644 --- a/applications/utilities/preProcessing/mdInitialise/mdInitialise.C +++ b/applications/utilities/preProcessing/mdInitialise/mdInitialise.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files b/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files deleted file mode 100755 index 6501e68426960c755a310e7a12b7b53548ddeb98..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/files +++ /dev/null @@ -1,8 +0,0 @@ -latticeStructures = latticeStructures -velocityDistributions = velocityDistributions - -createMolecules.C -molConfig.C -genMolConfig.C - -EXE = $(FOAM_APPBIN)/molConfig diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options b/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options deleted file mode 100755 index aab9a2ca4f7e9119ebfa389b5b14b74911317f1a..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/Make/options +++ /dev/null @@ -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 diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H deleted file mode 100644 index 0c69f15c7cda7cff0fa4387196c1dbea09c096e1..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/correctVelocities.H +++ /dev/null @@ -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; diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C deleted file mode 100644 index dbb0f680ce2ee87e3e0846f9a4c8b50b3ca4c876..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createMolecules.C +++ /dev/null @@ -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; -} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H deleted file mode 100644 index b26486338caf7228188244aac4e989fb9380cb0d..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createPositions.H +++ /dev/null @@ -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); -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H deleted file mode 100644 index d014ffd146044db0be9307b511e793ee490f0464..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/createVelocities.H +++ /dev/null @@ -1,13 +0,0 @@ -vector velocity; - -vector momentumSum = vector::zero; - -if (velocityDistribution == "uniform") -{ -# include "uniform.H" -} - -if (velocityDistribution == "maxwellian") -{ -# include "maxwellian.H" -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C b/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C deleted file mode 100644 index 7df9ce562228a12973103ba1ea7ce7d95b7d47e3..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/genMolConfig.C +++ /dev/null @@ -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; -} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H deleted file mode 100644 index cd3cbdf100ba1c7fcafecca68e2c730ebfc2b97c..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/BCC.H +++ /dev/null @@ -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() - ); - } - } - } -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H deleted file mode 100644 index 313ebf96cb89bf2b1111b45fe1de462133fb5197..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/FCC.H +++ /dev/null @@ -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() - ); - } - } - } -} diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H deleted file mode 100644 index dd0ff7c00f67453884b5693ed32003566f90b1b0..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/latticeStructures/SC.H +++ /dev/null @@ -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); - } - } - } -} - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C b/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C deleted file mode 100644 index e81c24ca6a3cda74c841511a8519496ddcdf1638..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.C +++ /dev/null @@ -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() -{} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H deleted file mode 100644 index 24bc994d34fe8eaee58b7c77a71613d1bf8bc004..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/origin.H +++ /dev/null @@ -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; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H deleted file mode 100644 index 72705c761e2650f4ec4f7faa72078235e1f288df..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/readZoneSubDict.H +++ /dev/null @@ -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; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H deleted file mode 100644 index 6ae01c83f11039a01d4307816c08951f1ad33d1c..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/startingPoint.H +++ /dev/null @@ -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; - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H deleted file mode 100644 index 01c3ff87168fc1a4057b4512472f58afec0bb5e0..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/maxwellian.H +++ /dev/null @@ -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); -} - - diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H b/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H deleted file mode 100644 index 9c178af262aabb88a239f9711b1c334cdd39e4e1..0000000000000000000000000000000000000000 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/velocityDistributions/uniform.H +++ /dev/null @@ -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); -} diff --git a/src/OpenFOAM/containers/Lists/List/List.C b/src/OpenFOAM/containers/Lists/List/List.C index 3fa3dcc8748bb8a3fbb8e775a4510baa705ab189..08422fd9ba23333451a1123d5ebf7217b4f9bfd6 100644 --- a/src/OpenFOAM/containers/Lists/List/List.C +++ b/src/OpenFOAM/containers/Lists/List/List.C @@ -35,8 +35,6 @@ License #include "BiIndirectList.H" #include "contiguous.H" -#include <algorithm> - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * // @@ -442,34 +440,6 @@ void Foam::List<T>::transfer(SortableList<T>& a) } -template<class T> -void Foam::sort(List<T>& a) -{ - std::sort(a.begin(), a.end()); -} - - -template<class T, class Cmp> -void Foam::sort(List<T>& a, const Cmp& cmp) -{ - std::sort(a.begin(), a.end(), cmp); -} - - -template<class T> -void Foam::stableSort(List<T>& a) -{ - std::stable_sort(a.begin(), a.end()); -} - - -template<class T, class Cmp> -void Foam::stableSort(List<T>& a, const Cmp& cmp) -{ - std::stable_sort(a.begin(), a.end(), cmp); -} - - // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // Assignment to UList operator. Takes linear time. diff --git a/src/OpenFOAM/containers/Lists/List/List.H b/src/OpenFOAM/containers/Lists/List/List.H index a6bf29686a56ff15d07e61a26c8ee2145d351efb..b89f6c95a9f15c2bfe07eddfb3aa537a30c1d9b1 100644 --- a/src/OpenFOAM/containers/Lists/List/List.H +++ b/src/OpenFOAM/containers/Lists/List/List.H @@ -248,18 +248,6 @@ public: template<class T> List<T> readList(Istream&); -template<class T> -void sort(List<T>&); - -template<class T, class Cmp> -void sort(List<T>&, const Cmp&); - -template<class T> -void stableSort(List<T>&); - -template<class T, class Cmp> -void stableSort(List<T>&, const Cmp&); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/containers/Lists/UList/UList.C b/src/OpenFOAM/containers/Lists/UList/UList.C index 255a91ecfecc83484da0f0f6873795e82dbf586d..42d00bc41e7ede72f47b9e4dcf9490e0891c2f33 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.C +++ b/src/OpenFOAM/containers/Lists/UList/UList.C @@ -30,6 +30,8 @@ License #include "ListLoopM.H" #include "contiguous.H" +#include <algorithm> + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class T> @@ -116,6 +118,34 @@ Foam::label Foam::UList<T>::byteSize() const } +template<class T> +void Foam::sort(UList<T>& a) +{ + std::sort(a.begin(), a.end()); +} + + +template<class T, class Cmp> +void Foam::sort(UList<T>& a, const Cmp& cmp) +{ + std::sort(a.begin(), a.end(), cmp); +} + + +template<class T> +void Foam::stableSort(UList<T>& a) +{ + std::stable_sort(a.begin(), a.end()); +} + + +template<class T, class Cmp> +void Foam::stableSort(UList<T>& a, const Cmp& cmp) +{ + std::stable_sort(a.begin(), a.end(), cmp); +} + + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template<class T> diff --git a/src/OpenFOAM/containers/Lists/UList/UList.H b/src/OpenFOAM/containers/Lists/UList/UList.H index f7db8226ff74d5dc0efa82edc11533b372481c79..087f685ff6cf182cee3be9fe3a4c24370d3f25fa 100644 --- a/src/OpenFOAM/containers/Lists/UList/UList.H +++ b/src/OpenFOAM/containers/Lists/UList/UList.H @@ -320,6 +320,18 @@ public: ); }; +template<class T> +void sort(UList<T>&); + +template<class T, class Cmp> +void sort(UList<T>&, const Cmp&); + +template<class T> +void stableSort(UList<T>&); + +template<class T, class Cmp> +void stableSort(UList<T>&, const Cmp&); + // Reverse the first n elements of the list template<class T> inline void reverse(UList<T>&, const label n); diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H index 0ed207057a347a07612bb089c2575777aeaf88f8..e394f679d042dd0c425f6fa7a869ebafeb5f2a4a 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndex.H @@ -106,6 +106,15 @@ public: //- Global sum of localSizes inline label size() const; + //- Size of procI data + inline label localSize(const label procI) const; + + //- From local to global on procI + inline label toGlobal(const label procI, const label i) const; + + //- Is on processor procI + inline bool isLocal(const label procI, const label i) const; + //- From global to local on procI inline label toLocal(const label procI, const label i) const; @@ -115,9 +124,6 @@ public: //- Start of procI data inline label offset(const label procI) const; - //- Size of procI data - inline label localSize(const label procI) const; - // IOstream Operators diff --git a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H index f9444fe54b0291f32f3d19b9476bf21dfbcf8618..d7c44107c665e29d0fd38900b2767e116b5e1b57 100644 --- a/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H +++ b/src/OpenFOAM/meshes/polyMesh/globalMeshData/globalIndexI.H @@ -63,27 +63,39 @@ inline Foam::label Foam::globalIndex::size() const } +inline Foam::label Foam::globalIndex::toGlobal +( + const label procI, + const label i +) const +{ + return(procI == 0 ? i : i + offsets_[procI-1]); +} + + inline Foam::label Foam::globalIndex::toGlobal(const label i) const { - return - ( - Pstream::myProcNo() == 0 - ? i - : i + offsets_[Pstream::myProcNo()-1] - ); + return toGlobal(Pstream::myProcNo(), i); } + //- Is on local processor -inline bool Foam::globalIndex::isLocal(const label i) const +inline bool Foam::globalIndex::isLocal(const label procI, const label i) const { return - (i < offsets_[Pstream::myProcNo()]) - && (i >= (Pstream::myProcNo() == 0 ? 0 : offsets_[Pstream::myProcNo()-1])); + (i < offsets_[procI]) + && (i >= (procI == 0 ? 0 : offsets_[procI-1])); +} + + +inline bool Foam::globalIndex::isLocal(const label i) const +{ + return isLocal(Pstream::myProcNo(), i); } inline Foam::label Foam::globalIndex::toLocal(const label procI, const label i) - const +const { label localI = (procI == 0 ? i : i - offsets_[procI-1]); diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index 690fb1083b4a4fce2f27c84df711fe8e5d33ea10..de1d9cc9f98c4fe60502606c3842c1057e7c8c9c 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -32,7 +32,6 @@ Description SourceFiles coupledPolyPatch.C - coupledPolyPatchMorph.C \*---------------------------------------------------------------------------*/ diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C index 5b688c64000f37ec36d79c6016e5d0abc0ae9a4d..d4cc0a284360f45bab1dd8ff9f995dfce256e606 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.C @@ -34,6 +34,7 @@ Description #include "primitiveMesh.H" #include "demandDrivenData.H" #include "mapPolyMesh.H" +#include "syncTools.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -530,6 +531,87 @@ bool Foam::faceZone::checkDefinition(const bool report) const } +bool Foam::faceZone::checkParallelSync(const bool report) const +{ + const polyMesh& mesh = zoneMesh().mesh(); + const polyBoundaryMesh& bm = mesh.boundaryMesh(); + + bool boundaryError = false; + + + // Check that zone faces are synced + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + { + boolList neiZoneFace(mesh.nFaces()-mesh.nInternalFaces(), false); + boolList neiZoneFlip(mesh.nFaces()-mesh.nInternalFaces(), false); + forAll(*this, i) + { + label faceI = operator[](i); + + if (!mesh.isInternalFace(faceI)) + { + neiZoneFace[faceI-mesh.nInternalFaces()] = true; + neiZoneFlip[faceI-mesh.nInternalFaces()] = flipMap()[i]; + } + } + boolList myZoneFace(neiZoneFace); + syncTools::swapBoundaryFaceList(mesh, neiZoneFace, false); + boolList myZoneFlip(neiZoneFlip); + syncTools::swapBoundaryFaceList(mesh, neiZoneFlip, false); + + forAll(*this, i) + { + label faceI = operator[](i); + + label patchI = bm.whichPatch(faceI); + + if (patchI != -1 && bm[patchI].coupled()) + { + label bFaceI = faceI-mesh.nInternalFaces(); + + // Check face in zone on both sides + if (myZoneFace[bFaceI] != neiZoneFace[bFaceI]) + { + boundaryError = true; + + if (report) + { + Pout<< " ***Problem with faceZone " << index() + << " named " << name() + << ". Face " << faceI + << " on coupled patch " + << bm[patchI].name() + << " is not consistent with its coupled neighbour." + << endl; + } + } + + // Flip state should be opposite. + if (myZoneFlip[bFaceI] == neiZoneFlip[bFaceI]) + { + boundaryError = true; + + if (report) + { + Pout<< " ***Problem with faceZone " << index() + << " named " << name() + << ". Face " << faceI + << " on coupled patch " + << bm[patchI].name() + << " does not have consistent flipMap" + << " across coupled faces." + << endl; + } + } + } + } + } + + return returnReduce(boundaryError, orOp<bool>()); +} + + void Foam::faceZone::movePoints(const pointField& p) { if (patchPtr_) diff --git a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H index f96c1dc189fb884bbe8e1d9ba34136dbb8e30003..16c7e82b09c0ad272d99d1f9d60ecd552afcf3f9 100644 --- a/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H +++ b/src/OpenFOAM/meshes/polyMesh/zones/faceZone/faceZone.H @@ -302,6 +302,10 @@ public: //- Check zone definition. Return true if in error. bool checkDefinition(const bool report = false) const; + //- Check whether all procs have faces synchronised. Return + // true if in error. + bool checkParallelSync(const bool report = false) const; + //- Correct patch after moving points virtual void movePoints(const pointField&); diff --git a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H index 33b3cab15e67775129d8997818a299add2d687f9..e43d4b9d2948219c3c4f11d2b1eb653200609992 100644 --- a/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H +++ b/src/OpenFOAM/meshes/primitiveShapes/triangle/triangleI.H @@ -607,6 +607,18 @@ inline bool triangle<Point, PointRef>::classify // system E0, E1 // + //Pout<< "alpha:" << alpha << endl; + //Pout<< "beta:" << beta << endl; + //Pout<< "hit:" << hit << endl; + //Pout<< "tol:" << tol << endl; + + if (hit) + { + // alpha,beta might get negative due to precision errors + alpha = max(0.0, min(1.0, alpha)); + beta = max(0.0, min(1.0, beta)); + } + nearType = NONE; nearLabel = -1; diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index baa2e5d463b10845b076713ce6112b99634dd4e1..0839e621cb1d273cb254280b2db067fe8e0459d2 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -110,7 +110,7 @@ Foam::label Foam::meshRefinement::createBaffle -1, // masterPointID -1, // masterEdgeID faceI, // masterFaceID, - false, // face flip + true, // face flip neiPatch, // patch for face zoneID, // zone for face zoneFlip // face flip in zone @@ -1017,7 +1017,7 @@ void Foam::meshRefinement::findCellZoneGeometric if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) { - // Give face the zone of the owner + // Give face the zone of max cell zone namedSurfaceIndex[faceI] = findIndex ( surfaceToCellZone, @@ -1059,7 +1059,7 @@ void Foam::meshRefinement::findCellZoneGeometric if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) { - // Give face the zone of the owner + // Give face the max cell zone namedSurfaceIndex[faceI] = findIndex ( surfaceToCellZone, @@ -2211,16 +2211,14 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify { label faceI = testFaces[i]; - label own = mesh_.faceOwner()[faceI]; - if (mesh_.isInternalFace(faceI)) { - start[i] = cellCentres[own]; - end[i] = cellCentres[mesh_.faceNeighbour()[faceI]]; + start[i] = cellCentres[faceOwner[faceI]]; + end[i] = cellCentres[faceNeighbour[faceI]]; } else { - start[i] = cellCentres[own]; + start[i] = cellCentres[faceOwner[faceI]]; end[i] = neiCc[faceI-mesh_.nInternalFaces()]; } } @@ -2357,6 +2355,20 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify if (surfI != -1) { + // Orient face zone to have slave cells in max cell zone. + label ownZone = cellToZone[faceOwner[faceI]]; + label neiZone = cellToZone[faceNeighbour[faceI]]; + + bool flip; + if (ownZone == max(ownZone, neiZone)) + { + flip = false; + } + else + { + flip = true; + } + meshMod.setAction ( polyModifyFace @@ -2369,12 +2381,31 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify -1, // patch for face false, // remove from zone surfaceToFaceZone[surfI], // zone for face - false // face flip in zone + flip // face flip in zone ) ); } } + // Get coupled neighbour cellZone. Set to -1 on non-coupled patches. + labelList neiCellZone(mesh_.nFaces()-mesh_.nInternalFaces(), -1); + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled()) + { + forAll(pp, i) + { + label faceI = pp.start()+i; + neiCellZone[faceI-mesh_.nInternalFaces()] = + cellToZone[mesh_.faceOwner()[faceI]]; + } + } + } + syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false); + + // Set owner as no-flip forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; @@ -2387,6 +2418,19 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify if (surfI != -1) { + label ownZone = cellToZone[faceOwner[faceI]]; + label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()]; + + bool flip; + if (ownZone == max(ownZone, neiZone)) + { + flip = false; + } + else + { + flip = true; + } + meshMod.setAction ( polyModifyFace @@ -2399,7 +2443,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify patchI, // patch for face false, // remove from zone surfaceToFaceZone[surfI], // zone for face - false // face flip in zone + flip // face flip in zone ) ); } diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H index cecd70d390de58cb2199b1291f170470b675f6cc..8a2eff1eb91fa3597e4e332fd7926ae520153acb 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/localPointRegion.H @@ -159,7 +159,7 @@ public: // return nRegions_; //} - //- Per point that is to duplicated to the local index + //- Per point that is to be duplicated the local index const Map<label>& meshPointMap() const { return meshPointMap_; diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C index 5e7a0b010bec6621e7340df8853e3f516f9add28..27f81f3081f193ac4816f19b848de54c2fc69cc2 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.C @@ -58,23 +58,6 @@ const Foam::point Foam::polyTopoChange::greatPoint // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Renumber -void Foam::polyTopoChange::renumber -( - const labelList& map, - DynamicList<label>& elems -) -{ - forAll(elems, elemI) - { - if (elems[elemI] >= 0) - { - elems[elemI] = map[elems[elemI]]; - } - } -} - - // Renumber with special handling for merged items (marked with <-1) void Foam::polyTopoChange::renumberReverseMap ( @@ -208,6 +191,20 @@ void Foam::polyTopoChange::countMap } +Foam::labelHashSet Foam::polyTopoChange::getSetIndices(const PackedBoolList& lst) +{ + labelHashSet values(lst.count()); + forAll(lst, i) + { + if (lst[i]) + { + values.insert(i); + } + } + return values; +} + + void Foam::polyTopoChange::writeMeshStats(const polyMesh& mesh, Ostream& os) { const polyBoundaryMesh& patches = mesh.boundaryMesh(); @@ -782,9 +779,11 @@ void Foam::polyTopoChange::reorderCompactFaces renumberKey(oldToNew, faceFromPoint_); renumberKey(oldToNew, faceFromEdge_); - renumber(oldToNew, flipFaceFlux_); + inplaceReorder(oldToNew, flipFaceFlux_); + flipFaceFlux_.setCapacity(newSize); renumberKey(oldToNew, faceZone_); - renumberKey(oldToNew, faceZoneFlip_); + inplaceReorder(oldToNew, faceZoneFlip_); + faceZoneFlip_.setCapacity(newSize); } @@ -1097,6 +1096,18 @@ void Foam::polyTopoChange::compact { faces_[faceI] = faces_[faceI].reverseFace(); Swap(faceOwner_[faceI], faceNeighbour_[faceI]); + flipFaceFlux_[faceI] = + ( + flipFaceFlux_[faceI] + ? 0 + : 1 + ); + faceZoneFlip_[faceI] = + ( + faceZoneFlip_[faceI] + ? 0 + : 1 + ); } } } @@ -2302,9 +2313,9 @@ void Foam::polyTopoChange::addMesh faceMap_.setCapacity(faceMap_.size() + nAllFaces); faceFromPoint_.resize(faceFromPoint_.size() + nAllFaces/100); faceFromEdge_.resize(faceFromEdge_.size() + nAllFaces/100); - flipFaceFlux_.resize(flipFaceFlux_.size() + nAllFaces/100); + flipFaceFlux_.setCapacity(faces_.size() + nAllFaces); faceZone_.resize(faceZone_.size() + nAllFaces/100); - faceZoneFlip_.resize(faceZoneFlip_.size() + nAllFaces/100); + faceZoneFlip_.setCapacity(faces_.size() + nAllFaces); // Precalc offset zones @@ -2716,16 +2727,13 @@ Foam::label Foam::polyTopoChange::addFace } reverseFaceMap_.append(faceI); - if (flipFaceFlux) - { - flipFaceFlux_.insert(faceI); - } + flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0); if (zoneID >= 0) { faceZone_.insert(faceI, zoneID); - faceZoneFlip_.insert(faceI, zoneFlip); } + faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0); return faceI; } @@ -2754,14 +2762,7 @@ void Foam::polyTopoChange::modifyFace faceNeighbour_[faceI] = nei; region_[faceI] = patchID; - if (flipFaceFlux) - { - flipFaceFlux_.insert(faceI); - } - else - { - flipFaceFlux_.erase(faceI); - } + flipFaceFlux_[faceI] = (flipFaceFlux ? 1 : 0); Map<label>::iterator faceFnd = faceZone_.find(faceI); @@ -2770,19 +2771,17 @@ void Foam::polyTopoChange::modifyFace if (zoneID >= 0) { faceFnd() = zoneID; - faceZoneFlip_.find(faceI)() = zoneFlip; } else { faceZone_.erase(faceFnd); - faceZoneFlip_.erase(faceI); } } else if (zoneID >= 0) { faceZone_.insert(faceI, zoneID); - faceZoneFlip_.insert(faceI, zoneFlip); } + faceZoneFlip_[faceI] = (zoneFlip ? 1 : 0); } @@ -2823,9 +2822,9 @@ void Foam::polyTopoChange::removeFace(const label faceI, const label mergeFaceI) } faceFromEdge_.erase(faceI); faceFromPoint_.erase(faceI); - flipFaceFlux_.erase(faceI); + flipFaceFlux_[faceI] = 0; faceZone_.erase(faceI); - faceZoneFlip_.erase(faceI); + faceZoneFlip_[faceI] = 0; } @@ -3119,6 +3118,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh labelListList faceZonePointMap(mesh.faceZones().size()); calcFaceZonePointMap(mesh, oldFaceZoneMeshPointMaps, faceZonePointMap); + labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_)); return autoPtr<mapPolyMesh> ( @@ -3147,7 +3147,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::changeMesh reverseFaceMap_, reverseCellMap_, - flipFaceFlux_, + flipFaceFluxSet, patchPointMap, @@ -3410,6 +3410,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh writeMeshStats(mesh, Pout); } + labelHashSet flipFaceFluxSet(getSetIndices(flipFaceFlux_)); + return autoPtr<mapPolyMesh> ( new mapPolyMesh @@ -3437,7 +3439,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChange::makeMesh reverseFaceMap_, reverseCellMap_, - flipFaceFlux_, + flipFaceFluxSet, patchPointMap, diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H index 9d0dce468c6cb288b2659587a5a5100931195fb8..77801e21f0dc33b703585f15ef3ffbd65a5c70ad 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/polyTopoChange.H @@ -171,13 +171,13 @@ class polyTopoChange Map<label> faceFromEdge_; //- In mapping whether to reverse the flux. - labelHashSet flipFaceFlux_; + PackedBoolList flipFaceFlux_; //- Zone of face Map<label> faceZone_; //- Orientation of face in zone - Map<bool> faceZoneFlip_; + PackedBoolList faceZoneFlip_; //- Active faces label nActiveFaces_; @@ -216,8 +216,7 @@ class polyTopoChange template<class T> static void renumberKey(const labelList& map, Map<T>&); - //- Renumber elements of list according to map - static void renumber(const labelList&, DynamicList<label>&); + //- Renumber elements of container according to map static void renumber(const labelList&, labelHashSet&); //- Special handling of reverse maps which have <-1 in them static void renumberReverseMap(const labelList&, DynamicList<label>&); @@ -225,6 +224,9 @@ class polyTopoChange //- Renumber & compact elements of list according to map static void renumberCompact(const labelList&, labelList&); + //- Get all set elements as a labelHashSet + static labelHashSet getSetIndices(const PackedBoolList&); + //- Count number of added and removed quantities from maps. static void countMap ( diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 313110bd43ad9541a65a0d4199803aa3420141c3..37b59c523a3e541665964c469a5fbe75bee38012 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -109,7 +109,6 @@ $(derivedFvPatchFields)/directMappedFixedValue/directMappedFixedValueFvPatchFiel $(derivedFvPatchFields)/directMappedVelocityFluxFixedValue/directMappedVelocityFluxFixedValueFvPatchField.C $(derivedFvPatchFields)/fan/fanFvPatchFields.C $(derivedFvPatchFields)/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C -$(derivedFvPatchFields)/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C $(derivedFvPatchFields)/fixedFluxPressure/fixedFluxPressureFvPatchScalarField.C $(derivedFvPatchFields)/fixedInternalValueFvPatchField/fixedInternalValueFvPatchFields.C $(derivedFvPatchFields)/fixedNormalSlip/fixedNormalSlipFvPatchFields.C @@ -148,6 +147,7 @@ $(derivedFvPatchFields)/turbulentInlet/turbulentInletFvPatchFields.C $(derivedFvPatchFields)/turbulentIntensityKineticEnergyInlet/turbulentIntensityKineticEnergyInletFvPatchScalarField.C $(derivedFvPatchFields)/uniformFixedValue/uniformFixedValueFvPatchFields.C $(derivedFvPatchFields)/waveTransmissive/waveTransmissiveFvPatchFields.C +$(derivedFvPatchFields)/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C fvsPatchFields = fields/fvsPatchFields $(fvsPatchFields)/fvsPatchField/fvsPatchFields.C diff --git a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C index 370b13747d204dad917ba3da9b4bdc6af2176252..3d92d45ce7de3210f3c4d79b0f391cbefaced773 100644 --- a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C +++ b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C @@ -92,6 +92,7 @@ void Foam::setRefCell dict ) << "Unable to set reference cell for field " << field.name() << nl << " Reference point " << refPointName + << " " << refPointi << " found on " << sumHasRef << " domains (should be one)" << nl << exit(FatalIOError); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C deleted file mode 100644 index 9a75eed1688a05b8c3f308220f2033a7bb6f05d8..0000000000000000000000000000000000000000 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C +++ /dev/null @@ -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 - -// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C index b6f48ff6ada8e214e41f83c848bafabdb32de46e..279918b47af95cdb9d91b7344ff5844af91888bd 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.C @@ -43,56 +43,61 @@ fixedFluxBuoyantPressureFvPatchScalarField const DimensionedField<scalar, volMesh>& iF ) : - fixedGradientFvPatchScalarField(p, iF) + fixedGradientFvPatchScalarField(p, iF), + rhoName_("rho") {} fixedFluxBuoyantPressureFvPatchScalarField:: fixedFluxBuoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper + const dictionary& dict ) : - fixedGradientFvPatchScalarField(ptf, p, iF, mapper) -{} + fixedGradientFvPatchScalarField(p, iF), + rhoName_(dict.lookupOrDefault<word>("rho", "rho")) +{ + fvPatchField<scalar>::operator=(patchInternalField()); + gradient() = 0.0; +} fixedFluxBuoyantPressureFvPatchScalarField:: fixedFluxBuoyantPressureFvPatchScalarField ( + const fixedFluxBuoyantPressureFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const dictionary& + const fvPatchFieldMapper& mapper ) : - fixedGradientFvPatchScalarField(p, iF) -{ - fvPatchField<scalar>::operator=(patchInternalField()); - gradient() = 0.0; -} + fixedGradientFvPatchScalarField(ptf, p, iF, mapper), + rhoName_(ptf.rhoName_) +{} fixedFluxBuoyantPressureFvPatchScalarField:: fixedFluxBuoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf + const fixedFluxBuoyantPressureFvPatchScalarField& ptf ) : - fixedGradientFvPatchScalarField(wbppsf) + fixedGradientFvPatchScalarField(ptf), + rhoName_(ptf.rhoName_) {} fixedFluxBuoyantPressureFvPatchScalarField:: fixedFluxBuoyantPressureFvPatchScalarField ( - const fixedFluxBuoyantPressureFvPatchScalarField& wbppsf, + const fixedFluxBuoyantPressureFvPatchScalarField& ptf, 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")); 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 // and set the gradient appropriately. @@ -132,6 +137,7 @@ void fixedFluxBuoyantPressureFvPatchScalarField::updateCoeffs() void fixedFluxBuoyantPressureFvPatchScalarField::write(Ostream& os) const { fixedGradientFvPatchScalarField::write(os); + os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl; writeEntry("value", os); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H index 8e433cb8f167f0304ec840bb270c4521c9230e5b..ec5dc7dd990d69170621c253ca5b73b5d9e91b74 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBuoyantPressure/fixedFluxBuoyantPressureFvPatchScalarField.H @@ -55,6 +55,11 @@ class fixedFluxBuoyantPressureFvPatchScalarField : public fixedGradientFvPatchScalarField { + // Private data + + //- Name of the density field used to calculate the buoyancy force + word rhoName_; + public: diff --git a/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C index 76267d4fa6a86f2083f6720b2eb58fe255610d4d..56ee8a0753d38e9eef05c766677ca1d4eccfa64d 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/totalPressure/totalPressureFvPatchScalarField.C @@ -30,7 +30,6 @@ License #include "volFields.H" #include "surfaceFields.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C new file mode 100644 index 0000000000000000000000000000000000000000..dfda8caf521d7e6f3733d3e4bf640fbfd58ee22f --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.C @@ -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 + ); +} + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H similarity index 53% rename from src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H rename to src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H index 094f8805606650a1f2b087d1404dcad78fd1c680..8b129fe3ab3ac5e9bc834f38f9124ffd53742454 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/fixedFluxBoussinesqBuoyantPressure/fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/uniformDensityHydrostaticPressure/uniformDensityHydrostaticPressureFvPatchScalarField.H @@ -23,23 +23,24 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + Foam::uniformDensityHydrostaticPressureFvPatchScalarField Description - Boundary condition on pressure for use with buoyant solvers employing the - Boussinesq approximation to balance the flux generated by the temperature - gradient. + Hydrostatic pressure boundary condition calculated as + + pRefValue + rho*g.(x - pRefPoint) + + where rho is provided and assumed uniform. SourceFiles - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField.C + uniformDensityHydrostaticPressureFvPatchScalarField.C \*---------------------------------------------------------------------------*/ -#ifndef fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H -#define fixedFluxBoussinesqBuoyantPressureFvPatchScalarFields_H +#ifndef uniformDensityHydrostaticPressureFvPatchScalarField_H +#define uniformDensityHydrostaticPressureFvPatchScalarField_H -#include "fvPatchFields.H" -#include "fixedGradientFvPatchFields.H" +#include "fixedValueFvPatchFields.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: //- Runtime type information - TypeName("fixedFluxBoussinesqBuoyantPressure"); + TypeName("uniformDensityHydrostaticPressure"); // Constructors //- Construct from patch and internal field - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>& ); //- Construct from patch, internal field and dictionary - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>&, @@ -78,20 +91,19 @@ public: ); //- Construct by mapping given - // fixedFluxBoussinesqBuoyantPressureFvPatchScalarField onto a new - // patch - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + // uniformDensityHydrostaticPressureFvPatchScalarField onto a new patch + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&, + const uniformDensityHydrostaticPressureFvPatchScalarField&, const fvPatch&, const DimensionedField<scalar, volMesh>&, const fvPatchFieldMapper& ); //- Construct as copy - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField& + const uniformDensityHydrostaticPressureFvPatchScalarField& ); //- Construct and return a clone @@ -99,14 +111,14 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField(*this) + new uniformDensityHydrostaticPressureFvPatchScalarField(*this) ); } //- Construct as copy setting internal field reference - fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + uniformDensityHydrostaticPressureFvPatchScalarField ( - const fixedFluxBoussinesqBuoyantPressureFvPatchScalarField&, + const uniformDensityHydrostaticPressureFvPatchScalarField&, const DimensionedField<scalar, volMesh>& ); @@ -118,7 +130,7 @@ public: { return tmp<fvPatchScalarField> ( - new fixedFluxBoussinesqBuoyantPressureFvPatchScalarField + new uniformDensityHydrostaticPressureFvPatchScalarField ( *this, iF @@ -129,8 +141,52 @@ public: // Member functions - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); + // Access + + //- 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 virtual void write(Ostream&) const; diff --git a/src/fvMotionSolver/Make/files b/src/fvMotionSolver/Make/files index 41f31c0ecc79dd3972e667e08041002a0e9099ae..f229ae322ef04b4bf61dd4bb0eb336fed3764e48 100644 --- a/src/fvMotionSolver/Make/files +++ b/src/fvMotionSolver/Make/files @@ -30,5 +30,6 @@ pointPatchFields/derived/angularOscillatingVelocity/angularOscillatingVelocityPo pointPatchFields/derived/oscillatingDisplacement/oscillatingDisplacementPointPatchVectorField.C pointPatchFields/derived/angularOscillatingDisplacement/angularOscillatingDisplacementPointPatchVectorField.C pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C +pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C LIB = $(FOAM_LIBBIN)/libfvMotionSolvers diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C new file mode 100644 index 0000000000000000000000000000000000000000..bbafb189faa97eba4faea0aa5e69ad1d163e70fd --- /dev/null +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.C @@ -0,0 +1,514 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "surfaceDisplacementPointPatchVectorField.H" +#include "addToRunTimeSelectionTable.H" +#include "Time.H" +#include "transformField.H" +#include "fvMesh.H" +#include "displacementLaplacianFvMotionSolver.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* +NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3>:: +names[] = +{ + "nearest", + "pointNormal", + "fixedNormal" +}; + +const NamedEnum<surfaceDisplacementPointPatchVectorField::projectMode, 3> + surfaceDisplacementPointPatchVectorField::projectModeNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void surfaceDisplacementPointPatchVectorField::calcProjection +( + vectorField& displacement +) const +{ + const polyMesh& mesh = patch().boundaryMesh().mesh()(); + const pointField& localPoints = patch().localPoints(); + const labelList& meshPoints = patch().meshPoints(); + + //const scalar deltaT = mesh.time().deltaT().value(); + + // Construct large enough vector in direction of projectDir so + // we're guaranteed to hit something. + + //- Per point projection vector: + const scalar projectLen = mag(mesh.bounds().max()-mesh.bounds().min()); + + // For case of fixed projection vector: + vector projectVec; + if (projectMode_ == FIXEDNORMAL) + { + vector n = projectDir_/mag(projectDir_); + projectVec = projectLen*n; + } + + + // Get fixed points (bit of a hack) + const pointZone* zonePtr = NULL; + + if (frozenPointsZone_.size() > 0) + { + const pointZoneMesh& pZones = mesh.pointZones(); + + zonePtr = &pZones[pZones.findZoneID(frozenPointsZone_)]; + + Pout<< "surfaceDisplacementPointPatchVectorField : Fixing all " + << zonePtr->size() << " points in pointZone " << zonePtr->name() + << endl; + } + + // Get the starting locations from the motionSolver + const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver> + ( + "dynamicMeshDict" + ).points0(); + + + pointField start(meshPoints.size()); + forAll(start, i) + { + start[i] = points0[meshPoints[i]] + displacement[i]; + } + + label nNotProjected = 0; + + if (projectMode_ == NEAREST) + { + List<pointIndexHit> nearest; + labelList hitSurfaces; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(projectLen)), + hitSurfaces, + nearest + ); + + forAll(nearest, i) + { + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + { + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; + } + else if (nearest[i].hit()) + { + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; + } + else + { + nNotProjected++; + + if (debug) + { + Pout<< " point:" << meshPoints[i] + << " coord:" << localPoints[i] + << " did not find any surface within " << projectLen + << endl; + } + } + } + } + else + { + // Do tests on all points. Combine later on. + + // 1. Check if already on surface + List<pointIndexHit> nearest; + { + labelList nearestSurface; + surfaces().findNearest + ( + start, + scalarField(start.size(), sqr(SMALL)), + nearestSurface, + nearest + ); + } + + // 2. intersection. (combined later on with information from nearest + // above) + vectorField projectVecs(start.size(), projectVec); + + if (projectMode_ == POINTNORMAL) + { + projectVecs = projectLen*patch().pointNormals(); + } + + // Knock out any wedge component + scalarField offset(start.size(), 0.0); + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + forAll(offset, i) + { + offset[i] = start[i][wedgePlane_]; + start[i][wedgePlane_] = 0; + projectVecs[i][wedgePlane_] = 0; + } + } + + List<pointIndexHit> rightHit; + { + labelList rightSurf; + surfaces().findAnyIntersection + ( + start, + start+projectVecs, + rightSurf, + rightHit + ); + } + + List<pointIndexHit> leftHit; + { + labelList leftSurf; + surfaces().findAnyIntersection + ( + start, + start-projectVecs, + leftSurf, + leftHit + ); + } + + // 3. Choose either -fixed, nearest, right, left. + forAll(displacement, i) + { + if (zonePtr && (zonePtr->whichPoint(meshPoints[i]) >= 0)) + { + // Fixed point. Reset to point0 location. + displacement[i] = points0[meshPoints[i]] - localPoints[i]; + } + else if (nearest[i].hit()) + { + // Found nearest. + displacement[i] = + nearest[i].hitPoint() + - points0[meshPoints[i]]; + } + else + { + pointIndexHit interPt; + + if (rightHit[i].hit()) + { + if (leftHit[i].hit()) + { + if + ( + magSqr(rightHit[i].hitPoint()-start[i]) + < magSqr(leftHit[i].hitPoint()-start[i]) + ) + { + interPt = rightHit[i]; + } + else + { + interPt = leftHit[i]; + } + } + else + { + interPt = rightHit[i]; + } + } + else + { + if (leftHit[i].hit()) + { + interPt = leftHit[i]; + } + } + + + if (interPt.hit()) + { + if (wedgePlane_ >= 0 && wedgePlane_ <= vector::nComponents) + { + interPt.rawPoint()[wedgePlane_] += offset[i]; + } + displacement[i] = interPt.rawPoint()-points0[meshPoints[i]]; + } + else + { + nNotProjected++; + + if (debug) + { + Pout<< " point:" << meshPoints[i] + << " coord:" << localPoints[i] + << " did not find any intersection between" + << " ray from " << start[i]-projectVecs[i] + << " to " << start[i]+projectVecs[i] << endl; + } + } + } + } + } + + reduce(nNotProjected, sumOp<label>()); + + if (nNotProjected > 0) + { + Info<< "surfaceDisplacement :" + << " on patch " << patch().name() + << " did not project " << nNotProjected + << " out of " << returnReduce(localPoints.size(), sumOp<label>()) + << " points." << endl; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF +) +: + fixedValuePointPatchVectorField(p, iF), + velocity_(vector::zero), + projectMode_(NEAREST), + projectDir_(vector::zero), + wedgePlane_(-1) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const dictionary& dict +) +: + fixedValuePointPatchVectorField(p, iF, dict), + velocity_(dict.lookup("velocity")), + surfacesDict_(dict.subDict("geometry")), + projectMode_(projectModeNames_.read(dict.lookup("projectMode"))), + projectDir_(dict.lookup("projectDirection")), + wedgePlane_(readLabel(dict.lookup("wedgePlane"))), + frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null)) +{ + if (velocity_.x() < 0 || velocity_.y() < 0 || velocity_.z() < 0) + { + FatalErrorIn + ( + "surfaceDisplacementPointPatchVectorField::\n" + "surfaceDisplacementPointPatchVectorField\n" + "(\n" + " const pointPatch& p,\n" + " const DimensionedField<vector, pointMesh>& iF,\n" + " const dictionary& dict\n" + ")\n" + ) << "All components of velocity have to be positive : " + << velocity_ << nl + << "Set velocity components to a great value if no clipping" + << " necessary." << exit(FatalError); + } +} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf, + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const pointPatchFieldMapper& mapper +) +: + fixedValuePointPatchVectorField(ppf, p, iF, mapper), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf +) +: + fixedValuePointPatchVectorField(ppf), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +surfaceDisplacementPointPatchVectorField:: +surfaceDisplacementPointPatchVectorField +( + const surfaceDisplacementPointPatchVectorField& ppf, + const DimensionedField<vector, pointMesh>& iF +) +: + fixedValuePointPatchVectorField(ppf, iF), + velocity_(ppf.velocity_), + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const searchableSurfaces& +surfaceDisplacementPointPatchVectorField::surfaces() const +{ + if (surfacesPtr_.empty()) + { + surfacesPtr_.reset + ( + new searchableSurfaces + ( + IOobject + ( + "abc", // dummy name + db().time().constant(), // directory + "triSurface", // instance + db().time(), // registry + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + surfacesDict_ + ) + ); + } + return surfacesPtr_(); +} + + +void surfaceDisplacementPointPatchVectorField::updateCoeffs() +{ + if (this->updated()) + { + return; + } + + const polyMesh& mesh = patch().boundaryMesh().mesh()(); + + vectorField currentDisplacement = this->patchInternalField(); + + // Calculate intersections with surface w.r.t points0. + vectorField displacement(currentDisplacement); + calcProjection(displacement); + + // offset wrt current displacement + vectorField offset = displacement-currentDisplacement; + + // Clip offset to maximum displacement possible: velocity*timestep + + const scalar deltaT = mesh.time().deltaT().value(); + const vector clipVelocity = velocity_*deltaT; + + forAll(displacement, i) + { + vector& d = offset[i]; + + for (direction cmpt = 0; cmpt < vector::nComponents; cmpt++) + { + if (d[cmpt] < 0) + { + d[cmpt] = max(d[cmpt], -clipVelocity[cmpt]); + } + else + { + d[cmpt] = min(d[cmpt], clipVelocity[cmpt]); + } + } + } + + this->operator==(currentDisplacement+offset); + + fixedValuePointPatchVectorField::updateCoeffs(); +} + + +void surfaceDisplacementPointPatchVectorField::write(Ostream& os) const +{ + fixedValuePointPatchVectorField::write(os); + os.writeKeyword("velocity") << velocity_ + << token::END_STATEMENT << nl; + os.writeKeyword("geometry") << surfacesDict_ + << token::END_STATEMENT << nl; + os.writeKeyword("projectMode") << projectModeNames_[projectMode_] + << token::END_STATEMENT << nl; + os.writeKeyword("projectDirection") << projectDir_ + << token::END_STATEMENT << nl; + os.writeKeyword("wedgePlane") << wedgePlane_ + << token::END_STATEMENT << nl; + if (frozenPointsZone_ != word::null) + { + os.writeKeyword("frozenPointsZone") << frozenPointsZone_ + << token::END_STATEMENT << nl; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +makePointPatchTypeField +( + fixedValuePointPatchVectorField, + surfaceDisplacementPointPatchVectorField +); + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H new file mode 100644 index 0000000000000000000000000000000000000000..7b3ecd7c2ff4437b825b1b17238ce0ba2cc6c10f --- /dev/null +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVectorField.H @@ -0,0 +1,223 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + surfaceDisplacementPointPatchVectorField + +Description + Displacement fixed by projection onto triSurface. + Use in a displacement fvMotionSolver + as a bc on the pointDisplacement field. + + Calculates the projection onto the surface according + to the projectMode + - NEAREST : nearest + - POINTNORMAL : intersection with point normal + - FIXEDNORMAL : intersection with fixed vector + + This displacement is then clipped with the specified velocity * deltaT. + + Optionally (intersection only) removes a component ("wedgePlane") to + stay in 2D. + + Needs: + - geometry : dictionary with searchableSurfaces. (usually + triSurfaceMeshes in constant/triSurface) + - projectMode : see above + - projectDirection : if projectMode = fixedNormal + - wedgePlane : -1 or component to knock out of intersection normal + - frozenPointsZone : empty or name of pointZone containing points + that do not move + +SourceFiles + surfaceDisplacementPointPatchVectorField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef surfaceDisplacementPointPatchVectorField_H +#define surfaceDisplacementPointPatchVectorField_H + +#include "pointPatchFields.H" +#include "fixedValuePointPatchFields.H" +#include "searchableSurfaces.H" +#include "Switch.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class surfaceDisplacementPointPatchVectorField Declaration +\*---------------------------------------------------------------------------*/ + +class surfaceDisplacementPointPatchVectorField +: + public fixedValuePointPatchVectorField +{ + +public: + + // Public data types + + enum projectMode + { + NEAREST, + POINTNORMAL, + FIXEDNORMAL + }; + +private: + + // Private data + + //- project mode names + static const NamedEnum<projectMode, 3> projectModeNames_; + + //- Maximum velocity + const vector velocity_; + + //- names of surfaces + const dictionary surfacesDict_; + + //- How to project/project onto surface + const projectMode projectMode_; + + //- direction to project + const vector projectDir_; + + //- plane for 2D wedge case or -1. + const label wedgePlane_; + + //- pointZone with frozen points + const word frozenPointsZone_; + + //- Demand driven: surface to project + mutable autoPtr<searchableSurfaces> surfacesPtr_; + + + // Private Member Functions + + //- Calculate displacement (w.r.t. points0()) to project onto surface + void calcProjection(vectorField& displacement) const; + + + //- Disallow default bitwise assignment + void operator=(const surfaceDisplacementPointPatchVectorField&); + +public: + + //- Runtime type information + TypeName("surfaceDisplacement"); + + + // Constructors + + //- Construct from patch and internal field + surfaceDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct from patch, internal field and dictionary + surfaceDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const dictionary& + ); + + //- Construct by mapping given patchField<vector> onto a new patch + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField&, + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const pointPatchFieldMapper& + ); + + //- Construct as copy + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField& + ); + + //- Construct and return a clone + virtual autoPtr<pointPatchVectorField> clone() const + { + return autoPtr<pointPatchVectorField> + ( + new surfaceDisplacementPointPatchVectorField + ( + *this + ) + ); + } + + //- Construct as copy setting internal field reference + surfaceDisplacementPointPatchVectorField + ( + const surfaceDisplacementPointPatchVectorField&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual autoPtr<pointPatchVectorField> clone + ( + const DimensionedField<vector, pointMesh>& iF + ) const + { + return autoPtr<pointPatchVectorField> + ( + new surfaceDisplacementPointPatchVectorField + ( + *this, + iF + ) + ); + } + + // Member Functions + + //- Surface to follow. Demand loads surfaceNames. + const searchableSurfaces& surfaces() const; + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C index 8c310481d7c5ae20dfda44ff7e402437cf2f4b7a..8f37cd91abadbe0bc26a3f7a49985a961902721c 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.C @@ -40,7 +40,7 @@ namespace Foam template<> const char* -NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3>:: +NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3>:: names[] = { "nearest", @@ -48,8 +48,8 @@ names[] = "fixedNormal" }; -const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::followMode, 3> - surfaceSlipDisplacementPointPatchVectorField::followModeNames_; +const NamedEnum<surfaceSlipDisplacementPointPatchVectorField::projectMode, 3> + surfaceSlipDisplacementPointPatchVectorField::projectModeNames_; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -95,12 +95,10 @@ void surfaceSlipDisplacementPointPatchVectorField::calcProjection } // Get the starting locations from the motionSolver - const displacementFvMotionSolver& motionSolver = - mesh.lookupObject<displacementFvMotionSolver> - ( - "dynamicMeshDict" - ); - const pointField& points0 = motionSolver.points0(); + const pointField& points0 = mesh.lookupObject<displacementFvMotionSolver> + ( + "dynamicMeshDict" + ).points0(); pointField start(meshPoints.size()); @@ -326,7 +324,7 @@ surfaceSlipDisplacementPointPatchVectorField : pointPatchVectorField(p, iF, dict), surfacesDict_(dict.subDict("geometry")), - projectMode_(followModeNames_.read(dict.lookup("followMode"))), + projectMode_(projectModeNames_.read(dict.lookup("projectMode"))), projectDir_(dict.lookup("projectDirection")), wedgePlane_(readLabel(dict.lookup("wedgePlane"))), frozenPointsZone_(dict.lookupOrDefault("frozenPointsZone", word::null)) @@ -343,11 +341,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(p, iF), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -358,11 +356,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -374,11 +372,11 @@ surfaceSlipDisplacementPointPatchVectorField ) : pointPatchVectorField(ppf, iF), - surfacesDict_(ppf.surfacesDict()), - projectMode_(ppf.projectMode()), - projectDir_(ppf.projectDir()), - wedgePlane_(ppf.wedgePlane()), - frozenPointsZone_(ppf.frozenPointsZone()) + surfacesDict_(ppf.surfacesDict_), + projectMode_(ppf.projectMode_), + projectDir_(ppf.projectDir_), + wedgePlane_(ppf.wedgePlane_), + frozenPointsZone_(ppf.frozenPointsZone_) {} @@ -435,7 +433,7 @@ void surfaceSlipDisplacementPointPatchVectorField::write(Ostream& os) const pointPatchVectorField::write(os); os.writeKeyword("geometry") << surfacesDict_ << token::END_STATEMENT << nl; - os.writeKeyword("followMode") << followModeNames_[projectMode_] + os.writeKeyword("projectMode") << projectModeNames_[projectMode_] << token::END_STATEMENT << nl; os.writeKeyword("projectDirection") << projectDir_ << token::END_STATEMENT << nl; diff --git a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H index 9edb42ac0d8764334c014267bbdbb327bb808596..2b2b89819fd98faeefb5ad658c75813273fa59e2 100644 --- a/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H +++ b/src/fvMotionSolver/pointPatchFields/derived/surfaceSlipDisplacement/surfaceSlipDisplacementPointPatchVectorField.H @@ -26,8 +26,10 @@ Class Foam::surfaceSlipDisplacementPointPatchVectorField Description - Displacement follows a triSurface. Use in a displacement fvMotionSolver. - Following is either + Displacement follows a triSurface. Use in a displacement fvMotionSolver + as a bc on the pointDisplacement field. + Following is done by calculating the projection onto the surface according + to the projectMode - NEAREST : nearest - POINTNORMAL : intersection with point normal - FIXEDNORMAL : intersection with fixed vector @@ -36,9 +38,10 @@ Description stay in 2D. Needs: - - projectSurfaces : names of triSurfaceMeshes (in constant/triSurface) - - followMode : see above - - projectDirection : if followMode = fixedNormal + - geometry : dictionary with searchableSurfaces. (usually + triSurfaceMeshes in constant/triSurface) + - projectMode : see above + - projectDirection : if projectMode = fixedNormal - wedgePlane : -1 or component to knock out of intersection normal - frozenPointsZone : empty or name of pointZone containing points that do not move @@ -72,7 +75,7 @@ public: // Public data types - enum followMode + enum projectMode { NEAREST, POINTNORMAL, @@ -83,14 +86,14 @@ private: // Private data - //- follow mode names - static const NamedEnum<followMode, 3> followModeNames_; + //- project mode names + static const NamedEnum<projectMode, 3> projectModeNames_; //- names of surfaces const dictionary surfacesDict_; - //- How to follow/project onto surface - const followMode projectMode_; + //- How to project/project onto surface + const projectMode projectMode_; //- direction to project const vector projectDir_; @@ -101,13 +104,13 @@ private: //- pointZone with frozen points const word frozenPointsZone_; - //- Demand driven: surface to follow + //- Demand driven: surface to project mutable autoPtr<searchableSurfaces> surfacesPtr_; // Private Member Functions - //- Calculate displacement to project onto surface + //- Calculate displacement (w.r.t. points0()) to project onto surface void calcProjection(vectorField& displacement) const; //- Disallow default bitwise assignment @@ -189,40 +192,9 @@ public: // Member Functions - //- Surfaces to follow - const dictionary& surfacesDict() const - { - return surfacesDict_; - } - //- Surface to follow. Demand loads surfaceNames. const searchableSurfaces& surfaces() const; - //- Mode of projection/following - followMode projectMode() const - { - return projectMode_; - } - - //- Direction to project back onto surface - const vector& projectDir() const - { - return projectDir_; - } - - //- Normal of wedgeplane (0, 1, 2) or -1. Note: should be obtained - // from twoDPointCorrector. - label wedgePlane() const - { - return wedgePlane_; - } - - //- Zone containing frozen points - const word& frozenPointsZone() const - { - return frozenPointsZone_; - } - //- Update the patch field virtual void evaluate ( diff --git a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H index 4b422bdd3176e4ac3320ec6e32a8f9956e3fe699..0dc8f02ea7d73f24da679049d2a3172e442e2c0d 100644 --- a/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H +++ b/src/lagrangian/dsmc/submodels/BinaryCollisionModel/BinaryCollisionModel/BinaryCollisionModel.H @@ -152,26 +152,26 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#define makeBinaryCollisionModel(CloudType) \ +#define makeBinaryCollisionModel(CloudType) \ \ defineNamedTemplateTypeNameAndDebug \ ( \ - BinaryCollisionModel<CloudType>, \ + BinaryCollisionModel<CloudType>, \ 0 \ ); \ \ defineTemplateRunTimeSelectionTable \ ( \ - BinaryCollisionModel<CloudType>, \ + BinaryCollisionModel<CloudType>, \ dictionary \ ); -#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \ +#define makeBinaryCollisionModelType(SS, CloudType, ParcelType) \ \ defineNamedTemplateTypeNameAndDebug(SS<CloudType<ParcelType> >, 0); \ \ - BinaryCollisionModel<CloudType<ParcelType> >:: \ + BinaryCollisionModel<CloudType<ParcelType> >:: \ adddictionaryConstructorToTable<SS<CloudType<ParcelType> > > \ add##SS##CloudType##ParcelType##ConstructorToTable_; diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C index 18d46cb90a7fc2b5ee9a1f67422df61d9e7e1c41..de7d31fcb5291c99895422b2b75fe76be6439db7 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -126,6 +126,7 @@ void Foam::bufferedAccumulator<Type>::setSizes } } + template<class Type> Foam::label Foam::bufferedAccumulator<Type>::addToBuffers ( @@ -184,11 +185,10 @@ Foam::Field<Type> Foam::bufferedAccumulator<Type>::averaged() const WarningIn ( "bufferedAccumulator<Type>::averagedbufferedAccumulator() const" - ) - << "Averaged correlation function requested but averagesTaken = " - << averagesTaken_ - << ". Returning empty field." - << endl; + ) << "Averaged correlation function requested but averagesTaken = " + << averagesTaken_ + << ". Returning empty field." + << endl; return Field<Type>(bufferLength(), pTraits<Type>::zero); } @@ -218,8 +218,7 @@ void Foam::bufferedAccumulator<Type>::operator= FatalErrorIn ( "bufferedAccumulator<Type>::operator=(const bufferedAccumulator&)" - ) - << "Attempted assignment to self" + ) << "Attempted assignment to self" << abort(FatalError); } diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H index 53b8f9371dd64468a985ff1d25f0fa3bb8d93159..ed8afa2115883a602a094c2fe13aa07345a7ea72 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulator.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H index 96531509c8e0d2ea371b09409cdbe4866890a0ca..28bcde97a990a81bddd15374513182f1773eea60 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C index 8e5d7c9d729d0f2d6c1a273143c80cceb3083333..ec1956a345dba0d1454ebec2a1e73da58e92a2db 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/bufferedAccumulator/bufferedAccumulatorIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,9 +34,9 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const bufferedAccumulator<Type>& bA) { - os<< bA.averagesTaken_ - << static_cast<const List< Field<Type> >&>(bA) - << bA.bufferOffsets(); + os << bA.averagesTaken_ + << static_cast<const List< Field<Type> >&>(bA) + << bA.bufferOffsets(); // Check state of Ostream os.check diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C index eca654aa2dd4302c0e25ffdae2ffd40e3416f7df..cce0d86a22c0d6f9000d2f3b6f2d9a35e48b10bc 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -138,7 +138,7 @@ void Foam::correlationFunction<Type>::calculateCorrelationFunction FatalErrorIn("correlationFunction<Type>::calculateCorrelationFunction") << "Trying to supply a Field of length" << currentValues.size() - <<" to calculate the correlation function. " + << " to calculate the correlation function. " << "Expecting a Field of length " << measurandFieldSize() << nl << abort(FatalError); @@ -205,7 +205,7 @@ Foam::scalar Foam::correlationFunction<Type>::integral() const scalar cFIntegral = 0.0; - for(label v = 0; v < averageCF.size() - 1; v++) + for (label v = 0; v < averageCF.size() - 1; v++) { cFIntegral += 0.5 diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H index 2b8753676c5a67253808bdcad17c2d291e5ffe0a..fe2071aff372af8f680c640fd4559afb74dcba3b 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -155,7 +155,10 @@ public: // IOstream Operators friend Ostream& operator<< <Type> - (Ostream&, const correlationFunction<Type>&); + ( + Ostream&, + const correlationFunction<Type>& + ); }; diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H index d07d54eca0ac442309a989a15941c76bb48a836b..adbf70505994612da152d42fd4b95ae273507c2b 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C index 7dcbcc1eda11ad23905087e6f196b29fd45d016a..aa62cdcaf6e0797077492306873cf8db4aea0679 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/correlationFunction/correlationFunctionIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,10 +34,10 @@ bool Foam::correlationFunction<Type>::writeAveraged(Ostream& os) const forAll(averageCF, v) { - os<< v*sampleInterval() - << token::SPACE - << averageCF[v] - << nl; + os << v*sampleInterval() + << token::SPACE + << averageCF[v] + << nl; } return os.good(); @@ -51,12 +51,12 @@ Foam::Ostream& Foam::operator<< const correlationFunction<Type>& cF ) { - os<< cF.duration() - << nl << cF.sampleInterval() - << nl << cF.averagingInterval() - << nl << cF.sampleSteps() - << nl << cF.tZeroBuffers() - << nl << static_cast<const bufferedAccumulator<scalar>&>(cF); + os << cF.duration() + << nl << cF.sampleInterval() + << nl << cF.averagingInterval() + << nl << cF.sampleSteps() + << nl << cF.tZeroBuffers() + << nl << static_cast<const bufferedAccumulator<scalar>&>(cF); // Check state of Ostream os.check diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C index a4a08b08fa6efd78597d0be45985c227f4d094ad..439ed64bdf06229f8b13fd6424a9336f14f43187 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -75,7 +75,7 @@ label distribution::totalEntries() const << "sumOfEntries = " << sumOfEntries << ". This is most likely to be because too many samples " << "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; sumOfEntries = -1; @@ -336,8 +336,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) *(oldDist[u].second() - oldDist[u-1].second()) + ( - oldDist[u-1].second() * oldDist[u].first() - - oldDist[u].second() * oldDist[u-1].first() + oldDist[u-1].second()*oldDist[u].first() + - oldDist[u].second()*oldDist[u-1].first() ) /binWidth_; } @@ -348,7 +348,7 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) { newDist[u].second() = (0.5 + scalar(newKey))*-oldDist[u].second() - + oldDist[u].second() * (oldDist[u].first() + binWidth_) + + oldDist[u].second()*(oldDist[u].first() + binWidth_) /binWidth_; } else @@ -358,8 +358,8 @@ List< Pair<scalar> > distribution::normalisedShifted(const scalar shiftValue) *(oldDist[u+1].second() - oldDist[u].second()) + ( - oldDist[u].second() * oldDist[u+1].first() - - oldDist[u+1].second() * oldDist[u].first() + oldDist[u].second()*oldDist[u+1].first() + - oldDist[u+1].second()*oldDist[u].first() ) /binWidth_; } @@ -395,7 +395,7 @@ List<Pair<scalar> > distribution::raw() { 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]); } diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H index 597d2eedb087aa8af9427a1cfa659e1f8820bf6e..da1ce973bc7d3fa9dceabbcf4dd2e5f2b39a1b87 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distribution.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,7 +30,6 @@ Description SourceFiles distributionI.H distribution.C - distributionIO.C \*---------------------------------------------------------------------------*/ @@ -46,7 +45,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class distribution Declaration + Class distribution Declaration \*---------------------------------------------------------------------------*/ class distribution diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H index 988d76de31c8e38ca0a41f91d94c331d052f0111..4bc3596a50957e656072444188f5c02267d37c12 100644 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H +++ b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C b/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C deleted file mode 100644 index 65743800e84b540ee59895c3c4458f8783fff082..0000000000000000000000000000000000000000 --- a/src/lagrangian/molecularDynamics/molecularMeasurements/distribution/distributionIO.C +++ /dev/null @@ -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 - - -// ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C index ba3a3d90669ec95b43e98e780b7f7bb0c1324f79..1556db83178b50ca625860d22292e4de7612069a 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -79,8 +79,12 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellJ) == -1 + findIndex + ( + directInteractionList[cellI], + cellJ + ) + == -1 ) { directInteractionList[cellI].append(cellJ); @@ -91,8 +95,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellJ], - cellI) == -1 + findIndex + ( + directInteractionList[cellJ], + cellI + ) + == + -1 ) { directInteractionList[cellJ].append(cellI); @@ -109,18 +118,16 @@ void Foam::directInteractionList::buildDirectInteractionList Info<< tab << "Point-Face, Edge-Edge direct interaction list build." << endl; - forAll (mesh.points(), p) + forAll(mesh.points(), p) { forAll(mesh.faces(), f) { - if(il_.testPointFaceDistance(p, f)) + if (il_.testPointFaceDistance(p, f)) { const labelList& pCells(mesh.pointCells()[p]); const label cellO(mesh.faceOwner()[f]); - const label cellN(mesh.faceNeighbour()[f]); - forAll(pCells, pC) { const label cellI(pCells[pC]); @@ -131,8 +138,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellO) == -1 + findIndex + ( + directInteractionList[cellI], + cellO + ) + == + -1 ) { directInteractionList[cellI].append(cellO); @@ -143,8 +155,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellO], - cellI) == -1 + findIndex + ( + directInteractionList[cellO], + cellI + ) + == + -1 ) { directInteractionList[cellO].append(cellI); @@ -156,12 +173,19 @@ void Foam::directInteractionList::buildDirectInteractionList // boundary faces will not have neighbour // information + const label cellN(mesh.faceNeighbour()[f]); + if (cellN > cellI) { if ( - findIndex(directInteractionList[cellI], - cellN) == -1 + findIndex + ( + directInteractionList[cellI], + cellN + ) + == + -1 ) { directInteractionList[cellI].append(cellN); @@ -172,8 +196,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellN], - cellI) == -1 + findIndex + ( + directInteractionList[cellN], + cellI + ) + == + -1 ) { directInteractionList[cellN].append(cellI); @@ -187,7 +216,7 @@ void Foam::directInteractionList::buildDirectInteractionList label edgeJIndex; - forAll (mesh.edges(), edgeIIndex) + forAll(mesh.edges(), edgeIIndex) { const edge& eI(mesh.edges()[edgeIIndex]); @@ -218,8 +247,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellI], - cellJ) == -1 + findIndex + ( + directInteractionList[cellI], + cellJ + ) + == + -1 ) { directInteractionList[cellI].append(cellJ); @@ -230,8 +264,13 @@ void Foam::directInteractionList::buildDirectInteractionList { if ( - findIndex(directInteractionList[cellJ], - cellI) == -1 + findIndex + ( + directInteractionList[cellJ], + cellI + ) + == + -1 ) { directInteractionList[cellJ].append(cellI); @@ -272,11 +311,11 @@ Foam::directInteractionList::directInteractionList labelListList(il.mesh().nCells()), il_(il) { - if((*this).size() > 1) + if ((*this).size() > 1) { buildDirectInteractionList(pointPointListBuild); } - else if((*this).size() == 1) + else if ((*this).size() == 1) { Info<< nl << "Single cell mesh, no direct interaction lists required." @@ -305,16 +344,4 @@ Foam::directInteractionList::~directInteractionList() {} -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * // - - -// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H index 3777b0b098e7552bf8d78724a4e205e0c098d4cd..8a85404ca04d3c962da39ff74237be3742090092 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -59,6 +59,7 @@ class directInteractionList const interactionLists& il_; + // Private Member Functions void buildDirectInteractionList @@ -72,6 +73,7 @@ class directInteractionList //- Disallow default bitwise assignment void operator=(const directInteractionList&); + public: // Constructors @@ -89,6 +91,7 @@ public: const interactionLists& il ); + // Destructor ~directInteractionList(); @@ -100,12 +103,6 @@ public: inline const interactionLists& il() const; - // Check - - // Edit - - // Write - // IOstream Operators diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H index 7c1ded995b372b0fb911ee6d75c22666c43bc657..34c1d65080664619ce92f4df416337ffee87c774 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/directInteractionList/directInteractionListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline const Foam::interactionLists& Foam::directInteractionList::il() const @@ -34,7 +32,4 @@ inline const Foam::interactionLists& Foam::directInteractionList::il() const } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C index 411d6dbfba2c3f8a0cbb30a6bbdbd72825a6ea3d..f1036eaa0e937bd2121f80187ef61199cd3d75e4 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -342,6 +342,7 @@ bool Foam::interactionLists::testPointFaceDistance ); } + bool Foam::interactionLists::testPointFaceDistance ( const vector& p, diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H index a8d28133eb7fd3d516878407a28843b79558db20..744b59b067a17867b1cd4906281183f9c30d6f6a 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionLists.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,7 +52,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class interactionLists Declaration + Class interactionLists Declaration \*---------------------------------------------------------------------------*/ class interactionLists @@ -71,6 +71,7 @@ class interactionLists List<receivingReferralList> cellReceivingReferralLists_; + // Private Member Functions //- Build referralLists which define how to send information @@ -83,6 +84,7 @@ class interactionLists //- Disallow default bitwise assignment void operator=(const interactionLists&); + public: // Static data members @@ -90,6 +92,7 @@ public: //- Tolerance for checking that faces on a patch segment static scalar transTol; + // Constructors //- Construct and create all information from the mesh @@ -103,6 +106,7 @@ public: //- Construct from file interactionLists(const polyMesh& mesh); + // Destructor ~interactionLists(); @@ -177,6 +181,7 @@ public: const labelList& segmentPoints ) const; + // Access inline const polyMesh& mesh() const; diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H index 6749e05be018287c98f4385ab4bd05a5bf195f00..7c5c4ec1227cb102a33473e80dacca1c265c76dd 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/interactionListsI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C index db0831eaee88874b252d43d33b984394d284d712..2f646fcba5f50ccc11ada22d43874e35f69674e4 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -143,7 +143,7 @@ bool operator== Foam::Istream& Foam::operator>>(Istream& is, receivingReferralList& rRL) { - is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL); + is >> rRL.sourceProc_ >> static_cast<labelListList&>(rRL); is.check ( @@ -160,7 +160,7 @@ Foam::Ostream& Foam::operator<< const receivingReferralList& rRL ) { - os << rRL.sourceProc() << token::SPACE + os << rRL.sourceProc() << token::SPACE << static_cast< const labelListList& >(rRL); os.check @@ -171,7 +171,5 @@ Foam::Ostream& Foam::operator<< return os; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H index b7ec5a26fac197a1a140a13feea420ad2c0e0065..91ebe8eb32c9ff2fa0781c6e29739d95bf0ffe54 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H index 48b11405b4d5013ffd9e8cdf9617dfe45aa5e405..084863b01a0ee09739adcff006d103eedae04306 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/receivingReferralListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::receivingReferralList::sourceProc() const @@ -46,7 +44,4 @@ inline bool operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C index bb0b3b1e529dba4a01554d02009c0673bd738cb4..6235ddabfad51cd0d2c79c59e691926ef1cdd6c0 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -145,7 +145,7 @@ Foam::Istream& Foam::operator>> 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"); @@ -159,7 +159,7 @@ Foam::Ostream& Foam::operator<< const sendingReferralList& rL ) { - os << rL.destinationProc() << token::SPACE + os << rL.destinationProc() << token::SPACE << static_cast< const labelList& >(rL); os.check("Ostream& operator<<(Ostream& f, const sendingReferralList& rL"); @@ -168,6 +168,4 @@ Foam::Ostream& Foam::operator<< } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H index 30afadebee5fb469aa4c62100a2bb04b7930450e..b7b9bf082cc971abc4c66e82687633a1684f22ad 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H index 51c569cfd20ca906ce2ecb12a4369eaf3c6bfac5..d34ffd3595413511dfaabdb643ae0991db287a64 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referralLists/sendingReferralListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::sendingReferralList::destinationProc() const @@ -46,6 +44,4 @@ inline bool operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C index 194caa11e2c5066838cf1fb3ba1033c493a3baec..225ad5902a01ca024526ef4e8b43326f90e4f677 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,7 +38,7 @@ void referredCell::setConstructionData const label sourceCell ) { - // * * * * * * * * * * * Points * * * * * * * * * * * + // Points const labelList& points = mesh.cellPoints()[sourceCell]; @@ -51,7 +51,8 @@ void referredCell::setConstructionData vertexPositions_ = referPositions(sourceCellVertices); - // * * * * * * * * * * * Edges * * * * * * * * * * * + + // Edges const labelList& edges = mesh.cellEdges()[sourceCell]; @@ -64,7 +65,8 @@ void referredCell::setConstructionData locallyMapEdgeList(points, sourceCellEdges); - // * * * * * * * * * * * Faces * * * * * * * * * * * + + // Faces labelList faces(mesh.cells()[sourceCell]); @@ -383,8 +385,8 @@ bool referredCell::duplicate(const referredCell& refCellDupl) const return ( sourceProc_ == refCellDupl.sourceProc() - && sourceCell_ == refCellDupl.sourceCell() - && mag(offset_ - refCellDupl.offset()) < interactionLists::transTol + && sourceCell_ == refCellDupl.sourceCell() + && mag(offset_ - refCellDupl.offset()) < interactionLists::transTol ); } @@ -394,8 +396,8 @@ bool referredCell::duplicate(const label procNo,const label nCells) const return ( sourceProc_ == procNo - && sourceCell_ < nCells - && mag(offset_) < interactionLists::transTol + && sourceCell_ < nCells + && mag(offset_) < interactionLists::transTol ); } @@ -405,7 +407,7 @@ bool referredCell::duplicate(const label procNo,const label nCells) const Istream& operator>>(Istream& is, referredCell& rC) { - is >> rC.sourceProc_ + is >> rC.sourceProc_ >> rC.sourceCell_ >> rC.vertexPositions_ >> rC.edges_ @@ -424,7 +426,7 @@ Istream& operator>>(Istream& is, referredCell& rC) Ostream& operator<<(Ostream& os, const referredCell& rC) { - os << rC.sourceProc() + os << rC.sourceProc() << token::SPACE << rC.sourceCell() << token::SPACE << rC.vertexPositions() << token::SPACE << rC.edges() diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H index 789c9e4d4143ceca47ccd82cf31c51ff33433623..666b4f9268297675083c85fb810e85723951d14f 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCell.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,7 +53,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class referredCell Declaration + Class referredCell Declaration \*---------------------------------------------------------------------------*/ class referredCell diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H index a7427c141da9f57cd6febff42d33b6acc4bce4ba..bd3954e83cd678b91428e7dabd33ecfa100f4b7d 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCell/referredCellI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C index fbc5c1740be6b14d7b1d8fd475f2c3a53d2011d6..2ba95daa18e09e821868d574cebe524b087c94cc 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -357,7 +357,7 @@ void Foam::referredCellList::buildReferredCellList label iterationNo = 0; - while(cellsReferredThisIteration) + while (cellsReferredThisIteration) { label refIntListStartSize = referredInteractionList.size(); @@ -499,7 +499,10 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1) + ) + == + -1 + ) { meshPointsOnThisSegment.append(facePoint); } @@ -610,18 +613,20 @@ void Foam::referredCellList::buildReferredCellList forAll(referredCellsFoundInRange,cFIR) { - referredCell& existingRefCell = referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredCell& existingRefCell = + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[0], - patch.faceCentres()[patch.size()/2], - patch.faceNormals()[0], - patch.faceNormals()[patch.size()/2] - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[0], + patch.faceCentres()[patch.size()/2], + patch.faceNormals()[0], + patch.faceNormals()[patch.size()/2] + ); // Test all existing referred and real cells to check // duplicates are not being made or cells aren't being @@ -705,7 +710,9 @@ void Foam::referredCellList::buildReferredCellList ( meshEdgesOnThisSegment, faceEdge - ) == -1 + ) + == + -1 ) { meshEdgesOnThisSegment.append(faceEdge); @@ -724,7 +731,10 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1) + ) + == + -1 + ) { meshPointsOnThisSegment.append(facePoint); } @@ -823,28 +833,30 @@ void Foam::referredCellList::buildReferredCellList referredInteractionList.shrink(); referredCellsFoundInRange = - il_.referredCellsInRangeOfSegment - ( - referredInteractionList, - meshFacesOnThisSegment, - meshEdgesOnThisSegment, - meshPointsOnThisSegment - ); + il_.referredCellsInRangeOfSegment + ( + referredInteractionList, + meshFacesOnThisSegment, + meshEdgesOnThisSegment, + meshPointsOnThisSegment + ); forAll(referredCellsFoundInRange,cFIR) { - referredCell& existingRefCell = referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredCell& existingRefCell = + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[patch.size()/2], - patch.faceCentres()[0], - patch.faceNormals()[patch.size()/2], - patch.faceNormals()[0] - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[patch.size()/2], + patch.faceCentres()[0], + patch.faceNormals()[patch.size()/2], + patch.faceNormals()[0] + ); // Test all existing referred and real cells to check // duplicates are not being made or cells aren't being @@ -901,15 +913,15 @@ void Foam::referredCellList::buildReferredCellList forAll(procPatches,pP) { const processorPolyPatch& patch = - refCast<const processorPolyPatch> - ( - mesh.boundaryMesh()[procPatches[pP]] - ); + refCast<const processorPolyPatch> + ( + mesh.boundaryMesh()[procPatches[pP]] + ); DynamicList<referredCell> referredCellsToTransfer; const vectorList& neighbFaceCentres = - allNeighbourFaceCentres[pP]; + allNeighbourFaceCentres[pP]; const vectorList& neighbFaceAreas = allNeighbourFaceAreas[pP]; @@ -971,7 +983,9 @@ void Foam::referredCellList::buildReferredCellList ( meshEdgesOnThisSegment, faceEdge - ) == -1 + ) + == + -1 ) { meshEdgesOnThisSegment.append(faceEdge); @@ -990,7 +1004,9 @@ void Foam::referredCellList::buildReferredCellList ( meshPointsOnThisSegment, facePoint - ) == -1 + ) + == + -1 ) { meshPointsOnThisSegment.append(facePoint); @@ -1032,7 +1048,7 @@ void Foam::referredCellList::buildReferredCellList forAll(realCellsFoundInRange,cFIR) { const label realCell = - realCellsFoundInRange[cFIR]; + realCellsFoundInRange[cFIR]; referredCell cellToRefer ( @@ -1074,19 +1090,20 @@ void Foam::referredCellList::buildReferredCellList forAll(referredCellsFoundInRange,cFIR) { referredCell& existingRefCell = - referredInteractionList - [ - referredCellsFoundInRange[cFIR] - ]; + referredInteractionList + [ + referredCellsFoundInRange[cFIR] + ]; - referredCell cellToReRefer = existingRefCell.reRefer - ( - patch.faceCentres()[faceT], - neighbFaceCentres[faceT], - patch.faceNormals()[faceT], - neighbFaceAreas[faceT] - /(mag(neighbFaceAreas[faceT]) + VSMALL) - ); + referredCell cellToReRefer = + existingRefCell.reRefer + ( + patch.faceCentres()[faceT], + neighbFaceCentres[faceT], + patch.faceNormals()[faceT], + neighbFaceAreas[faceT] + /(mag(neighbFaceAreas[faceT]) + VSMALL) + ); referredCellsToTransfer.append(cellToReRefer); } @@ -1409,6 +1426,7 @@ void Foam::referredCellList::buildReferredCellList } } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::referredCellList::referredCellList @@ -1557,7 +1575,4 @@ void Foam::referredCellList::referMolecules } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H index e323a9dcb661ae3af8add5b25d9ee764936e804d..c8a77cb27f320ad9a4c8f46921725363b4e1c569 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam class interactionLists; /*---------------------------------------------------------------------------*\ - Class referredCellList Declaration + Class referredCellList Declaration \*---------------------------------------------------------------------------*/ class referredCellList @@ -59,7 +59,8 @@ class referredCellList const interactionLists& il_; - // Private Member Functions + + // Private Member Functions void buildReferredCellList ( diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H index a81d6cf8e834faf72acb2f36d5859fec030d2b0f..588bf94eabb916d7a36caddc02f72cc99c1f6a21 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredCellList/referredCellListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C index 3db08989c320039f1df76b76456b4cd82898db03..c1e2e487695d4f1305809dde4c3a8412ed6ecac5 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -83,6 +83,4 @@ Foam::Ostream& Foam::operator<< } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H index 13fd0983d74d342b793c7b328b39cb27e8aaaf97..27c3c98ee39f45991318c192ba51c0ff34b01b7b 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMolecule.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,7 +45,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class referredMolecule Declaration + Class referredMolecule Declaration \*---------------------------------------------------------------------------*/ class referredMolecule diff --git a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H index 102bd5e30fb0db48a965283f9bb49cc41f636173..1db2f9a923f957a4c4e4a64b22c29bba34f22e69 100644 --- a/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H +++ b/src/lagrangian/molecularDynamics/molecule/interactionLists/referredMolecule/referredMoleculeI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,7 @@ Foam::referredMolecule::sitePositions() const return sitePositions_; } + // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // inline bool Foam::operator== @@ -71,6 +72,4 @@ inline bool Foam::operator!= } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H index db0c24bc95e00bc77c0de6f358e5434ecffbf0fa..9781c9d70f415b8c92d90d29d3b05ec015bcebcc 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/averageMDFields.H @@ -5,68 +5,68 @@ if (runTime.outputTime()) \*-----------------------------------------------------------------------*/ scalarField totalRhoN_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesRhoN, rN) { allSpeciesRhoN[rN].internalField() = allSpeciesN_RU[rN] /mesh.cellVolumes() /nAveragingSteps; - + totalRhoN_sum += allSpeciesRhoN[rN].internalField(); } - + totalRhoN.internalField() = totalRhoN_sum; - - + + /*-----------------------------------------------------------------------*\ Mass density \*-----------------------------------------------------------------------*/ - + scalarField totalRhoM_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesRhoM, rM) { allSpeciesRhoM[rM].internalField() = allSpeciesM_RU[rM] /mesh.cellVolumes() /nAveragingSteps; - + totalRhoM_sum += allSpeciesRhoM[rM].internalField(); } - + totalRhoM.internalField() = totalRhoM_sum; - + /*-----------------------------------------------------------------------*\ Bulk velocity \*-----------------------------------------------------------------------*/ - + vectorField totalMomentum_sum(mesh.nCells(), vector::zero); - + scalarField totalMass_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesVelocity, v) { // A check for 1/0 molecules is required. - + vectorField& singleSpeciesVelocity ( allSpeciesVelocity[v].internalField() ); - + forAll(singleSpeciesVelocity, sSV) { - if(allSpeciesN_RU[v][sSV]) + if (allSpeciesN_RU[v][sSV]) { - singleSpeciesVelocity[sSV] = + singleSpeciesVelocity[sSV] = allSpeciesVelocitySum_RU[v][sSV] /allSpeciesN_RU[v][sSV]; - + totalMomentum_sum[sSV] += allSpeciesM_RU[v][sSV] /allSpeciesN_RU[v][sSV] *allSpeciesVelocitySum_RU[v][sSV]; - + totalMass_sum[sSV] += allSpeciesM_RU[v][sSV]; } else @@ -75,10 +75,10 @@ if (runTime.outputTime()) } } } - + forAll(totalVelocity.internalField(), tV) { - if(totalMass_sum[tV] > VSMALL) + if (totalMass_sum[tV] > VSMALL) { totalVelocity.internalField()[tV] = totalMomentum_sum[tV] @@ -90,34 +90,33 @@ if (runTime.outputTime()) vector::zero; } } - + /*-----------------------------------------------------------------------*\ Kinetic temperature \*-----------------------------------------------------------------------*/ - + scalarField totalTemperatureVTerms_sum(mesh.nCells(), 0.0); - + scalarField totalN_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesTemperature, t) { // A check for 1/0 molecules is required. - + scalarField& singleSpeciesTemp ( allSpeciesTemperature[t].internalField() ); - + forAll(singleSpeciesTemp, sST) { - if(allSpeciesN_RU[t][sST]) + if (allSpeciesN_RU[t][sST]) { - singleSpeciesTemp[sST] = + singleSpeciesTemp[sST] = allSpeciesM_RU[t][sST] /allSpeciesN_RU[t][sST] /(3.0 * moleculeCloud::kb * allSpeciesN_RU[t][sST]) - * - ( + *( allSpeciesVelocityMagSquaredSum_RU[t][sST] - ( @@ -127,14 +126,13 @@ if (runTime.outputTime()) ) /allSpeciesN_RU[t][sST] ); - + totalTemperatureVTerms_sum[sST] += allSpeciesM_RU[t][sST] - /allSpeciesN_RU[t][sST] - * - ( + /allSpeciesN_RU[t][sST] + *( allSpeciesVelocityMagSquaredSum_RU[t][sST] - - + - ( allSpeciesVelocitySum_RU[t][sST] & @@ -142,7 +140,7 @@ if (runTime.outputTime()) ) /allSpeciesN_RU[t][sST] ); - + totalN_sum[sST] += allSpeciesN_RU[t][sST]; } else @@ -151,7 +149,7 @@ if (runTime.outputTime()) } } } - + forAll(totalTemperature.internalField(), tT) { if(totalN_sum[tT] > 0) @@ -165,41 +163,39 @@ if (runTime.outputTime()) totalTemperature.internalField()[tT] = 0.0; } } - + /*-----------------------------------------------------------------------*\ Mean kinetic energy \*-----------------------------------------------------------------------*/ - + scalarField totalKE_sum(mesh.nCells(), 0.0); - + forAll (allSpeciesMeanKE, mKE) { // A check for 1/0 molecules is required. - + scalarField& singleSpeciesMeanKE ( allSpeciesMeanKE[mKE].internalField() ); - + forAll(singleSpeciesMeanKE, sSMKE) { if(allSpeciesN_RU[mKE][sSMKE]) { - singleSpeciesMeanKE[sSMKE] = + singleSpeciesMeanKE[sSMKE] = allSpeciesM_RU[mKE][sSMKE] - /allSpeciesN_RU[mKE][sSMKE] - /(2.0 * allSpeciesN_RU[mKE][sSMKE]) - * - ( + /allSpeciesN_RU[mKE][sSMKE] + /(2.0*allSpeciesN_RU[mKE][sSMKE]) + *( allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] ); - + totalKE_sum[sSMKE] += allSpeciesM_RU[mKE][sSMKE] /allSpeciesN_RU[mKE][sSMKE] /2.0 - * - ( + *( allSpeciesVelocityMagSquaredSum_RU[mKE][sSMKE] ); } @@ -209,7 +205,7 @@ if (runTime.outputTime()) } } } - + forAll(totalMeanKE.internalField(), tMKE) { if(totalN_sum[tMKE] > 0) diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H index ce0113352e38b7ce230510a5786346efa706bb47..968cfa93cb80339db241aaf317418d678dbbcaa5 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateAutoCorrelationFunctions.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,18 +60,15 @@ if (mesh.time().timeIndex() % pacf.sampleSteps() == 0) { p.x() += mol().mass() * mol().U().y() * mol().U().z() - + - 0.5 * mol().rf().yz(); + + 0.5*mol().rf().yz(); p.y() += mol().mass() * mol().U().z() * mol().U().x() - + - 0.5 * mol().rf().zx(); + + 0.5*mol().rf().zx(); p.z() += mol().mass() * mol().U().x() * mol().U().y() - + - 0.5 * mol().rf().xy(); + + 0.5*mol().rf().xy(); } pacf.calculateCorrelationFunction(p); @@ -93,12 +90,10 @@ if (mesh.time().timeIndex() % hfacf.sampleSteps() == 0) { s += ( - 0.5 * mol().mass() * magSqr(mol().U()) - + - mol().potentialEnergy() - ) * mol().U() - + - 0.5 * ( mol().rf() & mol().U() ); + 0.5*mol().mass()*magSqr(mol().U()) + + mol().potentialEnergy() + )*mol().U() + + 0.5*(mol().rf() & mol().U()); } hfacf.calculateCorrelationFunction(s); diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H index 1ffbcc15b79d4b45fd462d6c799747370b7d137b..0ee094ff149a2d25a9b9ff89d8f31420557039b0 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/calculateTransportProperties.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ if (writeVacf) } } -Info << "Diffusion coefficient = " +Info<< "Diffusion coefficient = " << vacf.integral() << endl; if (writePacf) @@ -57,13 +57,13 @@ Info<< "Viscosity = " << pacf.integral()/averageTemperature/moleculeCloud::kb/meshVolume << endl; -if(writeHFacf) +if (writeHFacf) { OFstream hfacfFile ( runTime.path()/ + "hfacf" ); - + if (!hfacf.writeAveraged(hfacfFile)) { FatalErrorIn(args.executable()) @@ -73,7 +73,7 @@ if(writeHFacf) } } -Info << "Thermal conductivity = " +Info<< "Thermal conductivity = " << hfacf.integral() /averageTemperature /averageTemperature diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H b/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H index 6821055ae0036f84b57eaabda6ee2eff4d2842ca..ab2d593cc682aec604752381264053cc4edc3840 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/createAutoCorrelationFunctions.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/md.H b/src/lagrangian/molecularDynamics/molecule/mdTools/md.H index ae4ab08124268c2dbeb756c5c8fc932abc84b07e..9a079764ae823abdac17a56236003610c44863df 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/md.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/md.H @@ -1,11 +1,9 @@ #ifndef md_H #define md_H - -# include "potential.H" -# include "moleculeCloud.H" -# include "correlationFunction.H" -# include "distribution.H" -# include "reducedUnits.H" - + #include "potential.H" + #include "moleculeCloud.H" + #include "correlationFunction.H" + #include "distribution.H" + #include "reducedUnits.H" #endif diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H index 8688d63669bbda4a361b5d4b91d348b2bb2cdc21..fb5118bb5a484f0ce77bb3dd7a88b0e88aa2fd14 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/meanMomentumEnergyAndNMols.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,6 +52,8 @@ scalar singleStepTotalrDotf = 0.0; label singleStepNMols = molecules.size(); +label singleStepDOFs = 0; + { IDLList<molecule>::iterator mol(molecules.begin()); @@ -85,9 +87,11 @@ label singleStepNMols = molecules.size(); { label molId = mol().id(); - scalar molMass(molecules.constProps(molId).mass()); + const molecule::constantProperties cP(molecules.constProps(molId)); + + scalar molMass(cP.mass()); - const diagTensor& molMoI(molecules.constProps(molId).momentOfInertia()); + const diagTensor& molMoI(cP.momentOfInertia()); const vector& molV(mol().v()); @@ -112,6 +116,8 @@ label singleStepNMols = molecules.size(); singleStepTotalPE += mol().potentialEnergy(); singleStepTotalrDotf += tr(mol().rf()); + + singleStepDOFs += cP.degreesOfFreedom(); } } @@ -134,50 +140,53 @@ if (Pstream::parRun()) reduce(singleStepTotalrDotf, sumOp<scalar>()); reduce(singleStepNMols, sumOp<label>()); + + reduce(singleStepDOFs, sumOp<label>()); } if (singleStepNMols) { - Info<< "Number of mols in system = " + Info<< "Number of molecules in system = " << singleStepNMols << nl << "Overall number density = " << singleStepNMols/meshVolume << nl << "Overall mass density = " << singleStepTotalMass/meshVolume << nl - << "Average linear momentum per mol = " + << "Average linear momentum per molecule = " << singleStepTotalLinearMomentum/singleStepNMols << ' ' << mag(singleStepTotalLinearMomentum)/singleStepNMols << nl - << "Average angular momentum per mol = " + << "Average angular momentum per molecule = " << singleStepTotalAngularMomentum << ' ' << mag(singleStepTotalAngularMomentum)/singleStepNMols << nl << "Maximum |velocity| = " << singleStepMaxVelocityMag << nl - << "Average linear KE per mol = " + << "Average linear KE per molecule = " << singleStepTotalLinearKE/singleStepNMols << nl - << "Average angular KE per mol = " + << "Average angular KE per molecule = " << singleStepTotalAngularKE/singleStepNMols << nl - << "Average PE per mol = " + << "Average PE per molecule = " << singleStepTotalPE/singleStepNMols << nl - << "Average TE per mol = " + << "Average TE per molecule = " << ( singleStepTotalLinearKE - + singleStepTotalAngularKE - + singleStepTotalPE + + singleStepTotalAngularKE + + singleStepTotalPE ) /singleStepNMols << endl; -// Info << singleStepNMols << " " -// // << singleStepTotalMomentum/singleStepTotalMass << " " -// << singleStepMaxVelocityMag << " " -// << singleStepTotalKE/singleStepNMols << " " -// << singleStepTotalPE/singleStepNMols << " " -// << (singleStepTotalKE + singleStepTotalPE)/singleStepNMols << endl; + // Info << singleStepNMols << " " + // << singleStepTotalMomentum/singleStepTotalMass << " " + // << singleStepMaxVelocityMag << " " + // << singleStepTotalKE/singleStepNMols << " " + // << singleStepTotalPE/singleStepNMols << " " + // << (singleStepTotalKE + singleStepTotalPE) + // /singleStepNMols << endl; } else { - Info << "No molecules in system" << endl; + Info<< "No molecules in system" << endl; } diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H b/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H index ff274a33366d579e1a12ae49cf425bd7f9b34cc9..af0197b5fe4dc0fc2e75858e9f49ba86f3b0a273 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/resetMDFields.H @@ -3,24 +3,24 @@ if (runTime.outputTime()) allSpeciesN_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); allSpeciesM_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); allSpeciesVelocitySum_RU = List< vectorField > ( molecules.potential().nIds(), - vectorField (mesh.nCells(), vector::zero) + vectorField(mesh.nCells(), vector::zero) ); allSpeciesVelocityMagSquaredSum_RU = List< scalarField > ( molecules.potential().nIds(), - scalarField (mesh.nCells(), 0.0) + scalarField(mesh.nCells(), 0.0) ); } diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H index 4ba2bc1bc4d3188c4137b20d50626f963f0550bc..788763b163df63c6e173b91ce6905bd81384f758 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressure.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,17 +47,17 @@ accumulatedTotalrDotfSum += singleStepTotalrDotf; accumulatedNMols += singleStepNMols; +accumulatedDOFs += singleStepDOFs; + if (runTime.outputTime()) { - // calculate averages - if (accumulatedNMols) { Info << "calculating averages" << endl; averageTemperature = ( - 2.0/(6.0 * moleculeCloud::kb * accumulatedNMols) + 2.0/(moleculeCloud::kb * accumulatedDOFs) * ( accumulatedTotalLinearKE + accumulatedTotalAngularKE @@ -79,27 +79,20 @@ if (runTime.outputTime()) meshVolume ); - // output values - Info << "----------------------------------------" << nl << "Averaged properties" << nl << "Average |velocity| = " - << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass - << " m/s" << nl - << "Average temperature = " - << averageTemperature << " K" << nl - << "Average pressure = " - << averagePressure << " N/m^2" << nl + << mag(accumulatedTotalLinearMomentum)/accumulatedTotalMass << nl + << "Average temperature = " << averageTemperature << nl + << "Average pressure = " << averagePressure << nl << "----------------------------------------" << endl; } else { - Info << "Not averaging temperature and pressure: " + Info<< "Not averaging temperature and pressure: " << "no molecules in system" << endl; } - // reset counters - accumulatedTotalLinearMomentum = vector::zero; accumulatedTotalMass = 0.0; @@ -113,6 +106,9 @@ if (runTime.outputTime()) accumulatedTotalrDotfSum = 0.0; accumulatedNMols = 0; + + accumulatedDOFs = 0; } + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H index e5e236271f834659d2c1662427e95e66164408a3..9856c9d4da82a62412ce5a96c73bd8c7656456fc 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureAndPressureVariables.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,6 +44,8 @@ scalar accumulatedTotalrDotfSum = 0.0; label accumulatedNMols = 0; +label accumulatedDOFs = 0; + scalar averageTemperature = 0.0; scalar averagePressure = 0.0; diff --git a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H index 1d924db4b49ad84b14895c13d45152e0ee4c0134..b1ac5d4230e4de124495c8f45e53542380a961db 100644 --- a/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H +++ b/src/lagrangian/molecularDynamics/molecule/mdTools/temperatureEquilibration.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C index bc9c502ffb57f90181a70127c23c67563e4eb8f1..64c5c45ccf9bc54036aca97284dbe6d218a314f2 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C +++ b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H index 0ee16f461f00cc2b61c28b694aa290a877448175..ef2de145c464a7e5cefe15e652bcf34cd440c908 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/molecule.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -82,6 +82,8 @@ public: Field<vector> siteReferencePositions_; + List<scalar> siteMasses_; + List<scalar> siteCharges_; List<label> siteIds_; @@ -106,6 +108,7 @@ public: bool linearMoleculeTest() const; + public: inline constantProperties(); @@ -117,6 +120,8 @@ public: inline const Field<vector>& siteReferencePositions() const; + inline const List<scalar>& siteMasses() const; + inline const List<scalar>& siteCharges() const; inline const List<label>& siteIds() const; @@ -137,6 +142,8 @@ public: inline bool pointMolecule() const; + inline label degreesOfFreedom() const; + inline scalar mass() const; inline label nSites() const; @@ -208,6 +215,7 @@ private: List<vector> sitePositions_; + // Private Member Functions tensor rotationTensorX(scalar deltaT) const; @@ -216,6 +224,7 @@ private: tensor rotationTensorZ(scalar deltaT) const; + public: friend class Cloud<molecule>; diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H index eb80dd930fb7fa22ad6ed70d27cbd78930433340..447a04e4ea3e047f045ac56cf55af05aa2849cac 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H +++ b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,6 +29,7 @@ License inline Foam::molecule::constantProperties::constantProperties() : siteReferencePositions_(Field<vector>(0)), + siteMasses_(List<scalar>(0)), siteCharges_(List<scalar>(0)), siteIds_(List<label>(0)), pairPotentialSites_(List<bool>(false)), @@ -44,6 +45,7 @@ inline Foam::molecule::constantProperties::constantProperties ) : siteReferencePositions_(dict.lookup("siteReferencePositions")), + siteMasses_(dict.lookup("siteMasses")), siteCharges_(dict.lookup("siteCharges")), siteIds_(List<word>(dict.lookup("siteIds")).size(), -1), pairPotentialSites_(), @@ -59,9 +61,7 @@ inline Foam::molecule::constantProperties::constantProperties List<word>(dict.lookup("pairPotentialSiteIds")) ); - scalarList siteMasses(dict.lookup("siteMasses")); - - mass_ = sum(siteMasses); + mass_ = sum(siteMasses_); vector centreOfMass(vector::zero); @@ -70,7 +70,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -106,7 +106,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -119,10 +119,8 @@ inline Foam::molecule::constantProperties::constantProperties { const vector& p(siteReferencePositions_[i]); - momOfInertia += siteMasses[i]*diagTensor - ( - 0, p.x()*p.x(), p.x()*p.x() - ); + momOfInertia += + siteMasses_[i]*diagTensor(0, p.x()*p.x(), p.x()*p.x()); } momentOfInertia_ = diagTensor @@ -144,7 +142,7 @@ inline Foam::molecule::constantProperties::constantProperties { 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.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") << "An eigenvalue of the inertia tensor is zero, the molecule " - << dict.name() - << " is not a valid 6DOF shape." + << dict.name() << " is not a valid 6DOF shape." << nl << abort(FatalError); } @@ -172,7 +169,7 @@ inline Foam::molecule::constantProperties::constantProperties // global axes 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 @@ -187,7 +184,7 @@ inline Foam::molecule::constantProperties::constantProperties forAll(siteReferencePositions_, i) { - centreOfMass += siteReferencePositions_[i]*siteMasses[i]; + centreOfMass += siteReferencePositions_[i]*siteMasses_[i]; } centreOfMass /= mass_; @@ -203,7 +200,7 @@ inline Foam::molecule::constantProperties::constantProperties { 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.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>& Foam::molecule::constantProperties::siteCharges() const { @@ -372,7 +376,7 @@ inline bool Foam::molecule::constantProperties::pairPotentialSite { label s = findIndex(siteIds_, sId); - if(s == -1) + if (s == -1) { FatalErrorIn("moleculeI.H") << nl << sId << " site not found." @@ -396,10 +400,12 @@ inline bool Foam::molecule::constantProperties::electrostaticSite { label s = findIndex(siteIds_, sId); - if(s == -1) + if (s == -1) { - FatalErrorIn("moleculeI.H") << nl - << sId << " site not found." + FatalErrorIn + ( + "molecule::constantProperties::electrostaticSite(label)" + ) << sId << " site not found." << nl << abort(FatalError); } @@ -416,7 +422,7 @@ Foam::molecule::constantProperties::momentOfInertia() 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 { return mass_; @@ -592,6 +615,4 @@ inline Foam::label Foam::molecule::id() const } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C index c1e99d8a0bd06b79cf0dbdf36b4b1dde46485ea2..04ae825df59f5914dfc968ee84c58c13b387de62 100644 --- a/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C +++ b/src/lagrangian/molecularDynamics/molecule/molecule/moleculeIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -55,16 +55,16 @@ Foam::molecule::molecule { if (is.format() == IOstream::ASCII) { - is >> Q_; - is >> v_; - is >> a_; - is >> pi_; - is >> tau_; - is >> siteForces_; - is >> sitePositions_; - is >> specialPosition_; + is >> Q_; + is >> v_; + is >> a_; + is >> pi_; + is >> tau_; + is >> siteForces_; + is >> sitePositions_; + is >> specialPosition_; potentialEnergy_ = readScalar(is); - is >> rf_; + is >> rf_; special_ = readLabel(is); id_ = readLabel(is); } @@ -74,18 +74,18 @@ Foam::molecule::molecule ( reinterpret_cast<char*>(&Q_), sizeof(Q_) - + sizeof(v_) - + sizeof(a_) - + sizeof(pi_) - + sizeof(tau_) - + sizeof(specialPosition_) - + sizeof(potentialEnergy_) - + sizeof(rf_) - + sizeof(special_) - + sizeof(id_) + + sizeof(v_) + + sizeof(a_) + + sizeof(pi_) + + sizeof(tau_) + + sizeof(specialPosition_) + + sizeof(potentialEnergy_) + + sizeof(rf_) + + sizeof(special_) + + 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> 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; forAllConstIter(moleculeCloud, mC, iter) { @@ -182,6 +214,14 @@ void Foam::molecule::writeFields(const moleculeCloud& mC) specialPosition[i] = mol.specialPosition_; special[i] = mol.special_; 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++; } @@ -193,6 +233,18 @@ void Foam::molecule::writeFields(const moleculeCloud& mC) specialPosition.write(); special.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_), sizeof(mol.Q_) - + sizeof(mol.v_) - + sizeof(mol.a_) - + sizeof(mol.pi_) - + sizeof(mol.tau_) - + sizeof(mol.specialPosition_) - + sizeof(mol.potentialEnergy_) - + sizeof(mol.rf_) - + sizeof(mol.special_) - + sizeof(mol.id_) + + sizeof(mol.v_) + + sizeof(mol.a_) + + sizeof(mol.pi_) + + sizeof(mol.tau_) + + sizeof(mol.specialPosition_) + + sizeof(mol.potentialEnergy_) + + sizeof(mol.rf_) + + sizeof(mol.special_) + + sizeof(mol.id_) ); - os << mol.siteForces_ << mol.sitePositions_; + os << mol.siteForces_ << mol.sitePositions_; } // Check state of Ostream diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C index a0c45a73655871aaf5b819f6e0f854bb40310790..b747373e3a71e2682a01f0cb335262bc916ce8dc 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -928,7 +928,6 @@ void Foam::moleculeCloud::initialiseMolecules 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 * * * * * * * * * * * * * * // 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; + } + } +} + + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H index d6f961ca0ce573329508db010a106d1cd901f9af..6863227c12ceb43c81f07e51e7dea4b1bc2ee5e5 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,6 +44,7 @@ SourceFiles #include "interactionLists.H" #include "labelVector.H" #include "Random.H" +#include "fileName.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,7 +52,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class moleculeCloud Declaration + Class moleculeCloud Declaration \*---------------------------------------------------------------------------*/ class moleculeCloud @@ -75,6 +76,7 @@ private: Random rndGen_; + // Private Member Functions void buildConstProps(); @@ -131,6 +133,8 @@ private: const vector& bulkVelocity ); + label nSites() const; + inline vector equipartitionLinearVelocity ( scalar temperature, @@ -160,6 +164,7 @@ public: static scalar vacuumPermittivity; + // Constructors //- Construct given mesh and potential references @@ -177,8 +182,8 @@ public: const IOdictionary& mdInitialiseDict ); - // Member Functions + // Member Functions //- Evolve the molecules (move, calculate forces, control state etc) void evolve(); @@ -191,6 +196,7 @@ public: const scalar measuredTemperature ); + // Access inline const polyMesh& mesh() const; @@ -204,15 +210,18 @@ public: inline const List<molecule::constantProperties> constProps() const; inline const molecule::constantProperties& - constProps(label id) const; + constProps(label id) const; inline Random& rndGen(); + // Member Operators //- Write fields + void writeFields() const; - void writeFields() const; + //- Write molecule sites in XYZ format + void writeXYZ(const fileName& fName) const; }; diff --git a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H index 55813e665812c14d992c6883802ccdd35df27e74..94c9f49286bda8afbdbd62eef7ca2dd8cb19327e 100644 --- a/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H +++ b/src/lagrangian/molecularDynamics/molecule/moleculeCloud/moleculeCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,9 +32,9 @@ inline void Foam::moleculeCloud::evaluatePair 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(); @@ -67,7 +67,7 @@ inline void Foam::moleculeCloud::evaluatePair if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); @@ -75,8 +75,9 @@ inline void Foam::moleculeCloud::evaluatePair { scalar rsIsJMag = mag(rsIsJ); - vector fsIsJ = (rsIsJ/rsIsJMag) - *pairPot.force(idsI, idsJ, rsIsJMag); + vector fsIsJ = + (rsIsJ/rsIsJMag) + *pairPot.force(idsI, idsJ, rsIsJMag); molI->siteForces()[sI] += fsIsJ; @@ -91,9 +92,18 @@ inline void Foam::moleculeCloud::evaluatePair molJ->potentialEnergy() += 0.5*potentialEnergy; - molI->rf() += rsIsJ * fsIsJ; + vector rIJ = molI->position() - molJ->position(); + + tensor virialContribution = + (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq; + + molI->rf() += virialContribution; + + molJ->rf() += virialContribution; - molJ->rf() += rsIsJ * fsIsJ; + // molI->rf() += rsIsJ * fsIsJ; + + // molJ->rf() += rsIsJ * fsIsJ; } } @@ -104,7 +114,7 @@ inline void Foam::moleculeCloud::evaluatePair scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutMaxSqr(rsIsJMagSq)) + if(rsIsJMagSq <= electrostatic.rCutSqr()) { scalar rsIsJMag = mag(rsIsJ); @@ -112,38 +122,50 @@ inline void Foam::moleculeCloud::evaluatePair scalar chargeJ = constPropJ.siteCharges()[sJ]; - vector fsIsJ = (rsIsJ/rsIsJMag) - *chargeI*chargeJ*electrostatic.force(rsIsJMag); + vector fsIsJ = + (rsIsJ/rsIsJMag) + *chargeI*chargeJ*electrostatic.force(rsIsJMag); molI->siteForces()[sI] += fsIsJ; molJ->siteForces()[sJ] += -fsIsJ; - scalar potentialEnergy = chargeI*chargeJ - *electrostatic.energy(rsIsJMag); + scalar potentialEnergy = + chargeI*chargeJ + *electrostatic.energy(rsIsJMag); molI->potentialEnergy() += 0.5*potentialEnergy; molJ->potentialEnergy() += 0.5*potentialEnergy; - molI->rf() += rsIsJ * fsIsJ; + vector rIJ = molI->position() - molJ->position(); + + tensor virialContribution = + (rsIsJ*fsIsJ)*(rsIsJ & rIJ)/rsIsJMagSq; + + molI->rf() += virialContribution; + + molJ->rf() += virialContribution; - molJ->rf() += rsIsJ * fsIsJ; + // molI->rf() += rsIsJ * fsIsJ; + + // molJ->rf() += rsIsJ * fsIsJ; } } } } } + inline void Foam::moleculeCloud::evaluatePair ( molecule* molReal, 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(); @@ -176,16 +198,18 @@ inline void Foam::moleculeCloud::evaluatePair if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) + if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); - vector fsRealsRef = (rsRealsRef/rsRealsRefMag) - *pairPot.force(idsReal, idsRef, rsRealsRefMag); + vector fsRealsRef = + (rsRealsRef/rsRealsRefMag) + *pairPot.force(idsReal, idsRef, rsRealsRefMag); molReal->siteForces()[sReal] += fsRealsRef; @@ -196,7 +220,14 @@ inline void Foam::moleculeCloud::evaluatePair 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]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) + if (rsRealsRefMagSq <= electrostatic.rCutSqr()) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -216,18 +248,27 @@ inline void Foam::moleculeCloud::evaluatePair scalar chargeRef = constPropRef.siteCharges()[sRef]; - vector fsRealsRef = (rsRealsRef/rsRealsRefMag) - *chargeReal*chargeRef - *electrostatic.force(rsRealsRefMag); + vector fsRealsRef = + (rsRealsRef/rsRealsRefMag) + *chargeReal*chargeRef + *electrostatic.force(rsRealsRefMag); molReal->siteForces()[sReal] += fsRealsRef; - scalar potentialEnergy = chargeReal*chargeRef - *electrostatic.energy(rsRealsRefMag); + scalar potentialEnergy = + chargeReal*chargeRef + *electrostatic.energy(rsRealsRefMag); 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 ) 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(); @@ -276,11 +317,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (pairPotentialSitesI[sI] && pairPotentialSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) + if (pairPot.rCutSqr(idsI, idsJ, rsIsJMagSq)) { scalar rsIsJMag = mag(rsIsJ); @@ -291,7 +332,7 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsIsJMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsIsJMag << ". These may have been placed on top of each" @@ -325,11 +366,11 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (electrostaticSitesI[sI] && electrostaticSitesJ[sJ]) { vector rsIsJ = - molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; + molI->sitePositions()[sI] - molJ->sitePositions()[sJ]; scalar rsIsJMagSq = magSqr(rsIsJ); - if(pairPot.rCutMaxSqr(rsIsJMagSq)) + if (pairPot.rCutMaxSqr(rsIsJMagSq)) { scalar rsIsJMag = mag(rsIsJ); @@ -340,18 +381,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsIsJMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsIsJMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; return true; } + if (rsIsJMag < electrostatic.rMin()) + { + return true; + } + scalar chargeI = constPropI.siteCharges()[sI]; scalar chargeJ = constPropJ.siteCharges()[sJ]; @@ -379,9 +425,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit referredMolecule* molRef ) 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(); @@ -414,11 +460,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (pairPotentialSitesReal[sReal] && pairPotentialSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) + if (pairPot.rCutSqr(idsReal, idsRef, rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -429,12 +476,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsRealsRefMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsRealsRefMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; @@ -464,11 +511,12 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (electrostaticSitesReal[sReal] && electrostaticSitesRef[sRef]) { vector rsRealsRef = - molReal->sitePositions()[sReal] - molRef->sitePositions()[sRef]; + molReal->sitePositions()[sReal] + - molRef->sitePositions()[sRef]; scalar rsRealsRefMagSq = magSqr(rsRealsRef); - if(pairPot.rCutMaxSqr(rsRealsRefMagSq)) + if (pairPot.rCutMaxSqr(rsRealsRefMagSq)) { scalar rsRealsRefMag = mag(rsRealsRef); @@ -479,18 +527,23 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit if (rsRealsRefMag < SMALL) { WarningIn("moleculeCloud::removeHighEnergyOverlaps()") - << "Molecule site pair closer than " + << "Molecule site pair closer than " << SMALL << ": mag separation = " << rsRealsRefMag << ". These may have been placed on top of each" - << " other by a rounding error in molConfig in" - << " parallel or a block filled with molecules " + << " other by a rounding error in mdInitialise in" + << " parallel or a block filled with molecules" << " twice. Removing one of the molecules." << endl; return true; } + if (rsRealsRefMag < electrostatic.rMin()) + { + return true; + } + scalar chargeReal = constPropReal.siteCharges()[sReal]; scalar chargeRef = constPropRef.siteCharges()[sRef]; @@ -499,8 +552,9 @@ inline bool Foam::moleculeCloud::evaluatePotentialLimit ( mag ( - chargeReal*chargeRef - *electrostatic.energy(rsRealsRefMag) + chargeReal + *chargeRef + *electrostatic.energy(rsRealsRefMag) ) > pot_.potentialEnergyLimit() ) @@ -559,6 +613,7 @@ inline Foam::vector Foam::moleculeCloud::equipartitionAngularMomentum } } + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline const Foam::polyMesh& Foam::moleculeCloud::mesh() const diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C index e9b048507bd61d9e01d0ed0c7e3957fd5a5a0e49..6836c2bc277e3f13ee476df76d7aca0b250a5102 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H index 294aa7770e6de424c553ce159de0f514186835d2..acefe4b8151c571323d955d8d69b8485eebd9df3 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnits.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class reducedUnits Declaration + Class reducedUnits Declaration \*---------------------------------------------------------------------------*/ class reducedUnits diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H index 8f3ae51b16ac067f64e75f59906e982e29fe6d5f..72ff243776432aaa5b77cee3581b7553b602a972 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C index 175a2aa4899b2c04029a26e65ca2717830f634e7..03b4489ec5a34ac510a6170de116bc6a97e3202b 100644 --- a/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C +++ b/src/lagrangian/molecularDynamics/molecule/reducedUnits/reducedUnitsIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/Make/files b/src/lagrangian/molecularDynamics/potential/Make/files index 7b16b6e2b61938fcc029900b8db8322f0b933055..4afe4de3d950a1a9cc18af997d5324566b275fb2 100644 --- a/src/lagrangian/molecularDynamics/potential/Make/files +++ b/src/lagrangian/molecularDynamics/potential/Make/files @@ -15,6 +15,7 @@ $(pairPotential)/derived/maitlandSmith/maitlandSmith.C $(pairPotential)/derived/azizChen/azizChen.C $(pairPotential)/derived/exponentialRepulsion/exponentialRepulsion.C $(pairPotential)/derived/coulomb/coulomb.C +$(pairPotential)/derived/dampedCoulomb/dampedCoulomb.C $(pairPotential)/derived/noInteraction/noInteraction.C energyScalingFunction = energyScalingFunction @@ -43,4 +44,4 @@ electrostaticPotential = electrostaticPotential $(electrostaticPotential)/electrostaticPotential.C -LIB = $(FOAM_LIBBIN)/libpotential +LIB = $(FOAM_LIBBIN)/libpotential \ No newline at end of file diff --git a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C index 17fe776235acbd98aa65e2e11eed5c15e3e53156..1dff432741c4766ee3c86003af8a62f97fde9a4a 100644 --- a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C +++ b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,8 +27,6 @@ License #include "electrostaticPotential.H" #include "mathematicalConstants.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::electrostaticPotential::electrostaticPotential() diff --git a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H index 0bc0e0d4d04416b75f3d0f732db5b44684556c71..d2c4bb88b917388875cccdc52b0f3d5c06128f2e 100644 --- a/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H +++ b/src/lagrangian/molecularDynamics/potential/electrostaticPotential/electrostaticPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class electrostaticPotential Declaration + Class electrostaticPotential Declaration \*---------------------------------------------------------------------------*/ class electrostaticPotential diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C index c06f90ea27ea0ba7f4235a224680bdc982888986..df247d84dea90ba5f5d0b698436b7da1bfd55b44 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,8 +36,6 @@ namespace Foam defineTypeNameAndDebug(energyScalingFunction, 0); defineRunTimeSelectionTable(energyScalingFunction, dictionary); -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::energyScalingFunction::energyScalingFunction @@ -66,6 +64,7 @@ bool Foam::energyScalingFunction::read return true; } + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H index 4473fe2bb043b280524a92221d267de2b83bd358..8815151bcf0392705dc4e5309521460abfe44d54 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/energyScalingFunction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class energyScalingFunction Declaration + Class energyScalingFunction Declaration \*---------------------------------------------------------------------------*/ class energyScalingFunction @@ -144,8 +144,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #endif // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C index 92166f863215f4d9daaf373700d0aad2d2088607..ccbdb8c92e7d2fa386df5ca3578e46f8c9b0d6b6 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/basic/newEnergyScalingFunction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,8 +58,8 @@ autoPtr<energyScalingFunction> energyScalingFunction::New ( "energyScalingFunction::New()" ) << "Unknown energyScalingFunction type " - << energyScalingFunctionTypeName << endl << endl - << "Valid energyScalingFunctions are : " << endl + << energyScalingFunctionTypeName << nl << nl + << "Valid energyScalingFunctions are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C index 6ca0fff321cd6fce75773f319be56a91775191fe..defeb779a0620c7d75eb381111bf016c99cc96a5 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ scalar doubleSigmoid::sigmoidScale return 1.0 / (1.0 + exp( scale * (r - shift))); } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // doubleSigmoid::doubleSigmoid @@ -67,13 +68,17 @@ doubleSigmoid::doubleSigmoid ) : energyScalingFunction(name, energyScalingFunctionProperties, pairPot), - doubleSigmoidCoeffs_(energyScalingFunctionProperties.subDict(typeName + "Coeffs")), + doubleSigmoidCoeffs_ + ( + energyScalingFunctionProperties.subDict(typeName + "Coeffs") + ), shift1_(readScalar(doubleSigmoidCoeffs_.lookup("shift1"))), scale1_(readScalar(doubleSigmoidCoeffs_.lookup("scale1"))), shift2_(readScalar(doubleSigmoidCoeffs_.lookup("shift2"))), scale2_(readScalar(doubleSigmoidCoeffs_.lookup("scale2"))) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void doubleSigmoid::scaleEnergy(scalar& e, const scalar r) const @@ -81,17 +86,19 @@ void doubleSigmoid::scaleEnergy(scalar& e, const scalar r) const e *= sigmoidScale(r, shift1_, scale1_) * sigmoidScale(r, shift2_, scale2_); } + bool doubleSigmoid::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - doubleSigmoidCoeffs_ = energyScalingFunctionProperties.subDict(typeName + "Coeffs"); + doubleSigmoidCoeffs_ = + energyScalingFunctionProperties.subDict(typeName + "Coeffs"); doubleSigmoidCoeffs_.lookup("shift1") >> shift1_; doubleSigmoidCoeffs_.lookup("scale1") >> scale1_; doubleSigmoidCoeffs_.lookup("shift2") >> shift2_; doubleSigmoidCoeffs_.lookup("scale2") >> scale2_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H index 07c4dfbd49003d6306e850b11f8d027c490462f7..27e75fb1901a72c6450b7448f5eaac75910f5819 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/doubleSigmoid/doubleSigmoid.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace energyScalingFunctions { /*---------------------------------------------------------------------------*\ - Class doubleSigmoid Declaration + Class doubleSigmoid Declaration \*---------------------------------------------------------------------------*/ class doubleSigmoid @@ -62,6 +62,7 @@ class doubleSigmoid scalar shift2_; scalar scale2_; + // Private Member Functions scalar sigmoidScale @@ -98,7 +99,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C index ea4ec88ed43c657840b7d8ae7b80ae7f23d91202..412f7538876e19b72daa78e4e36176595d013802 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -60,15 +58,17 @@ noScaling::noScaling energyScalingFunction(name, energyScalingFunctionProperties, pairPot) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void noScaling::scaleEnergy(scalar& e, const scalar r) const {} + bool noScaling::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H index 192c862fb4330fff66ca6d78346dc6a5b9e115af..ea2ad62aef18327594f59483d3b95f39493d1ec1 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/noScaling/noScaling.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -80,7 +80,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C index 90eccc9b8021ff9b4b5399c28821d03a171abae5..d6866cfc8f9878cde632284ebe34349ac18a1c27 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,6 +59,7 @@ shifted::shifted e_at_rCut_(pairPot.unscaledEnergy(pairPot.rCut())) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void shifted::scaleEnergy(scalar& e, const scalar r) const @@ -68,10 +67,11 @@ void shifted::scaleEnergy(scalar& e, const scalar r) const e -= e_at_rCut_; } + bool shifted::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H index 6f95adbdb90f89b0d3a4c375ff1acca31e25543e..01b0b413f34e9abc72ed5d054492a79751513041 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shifted/shifted.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ class shifted scalar e_at_rCut_; + public: //- Runtime type information @@ -79,11 +80,12 @@ public: ~shifted() {} + // Member Functions void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C index dec8729fae9841bb18906bea8cf863669fbb2181..72041de3e05c77b8c4781e7675d06b2f5e8d6846 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -63,6 +61,7 @@ shiftedForce::shiftedForce de_dr_at_rCut_(pairPot.energyDerivative(rCut_, false)) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void shiftedForce::scaleEnergy(scalar& e, const scalar r) const @@ -70,10 +69,11 @@ void shiftedForce::scaleEnergy(scalar& e, const scalar r) const e -= ( e_at_rCut_ + de_dr_at_rCut_ * (r - rCut_) ); } + bool shiftedForce::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H index d67164c64e544a9930bbbbc1e6a149f89697a8b1..f6d97d002b633f28908820d6973697da22a85f30 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/shiftedForce/shiftedForce.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace energyScalingFunctions { /*---------------------------------------------------------------------------*\ - Class shiftedForce Declaration + Class shiftedForce Declaration \*---------------------------------------------------------------------------*/ class shiftedForce @@ -89,7 +89,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C index 43483221ae562c28d4e29ec69bc2cc2b6f18b389..c689608172acc735d5d4fbb408de72985ba9c07c 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,7 @@ addToRunTimeSelectionTable dictionary ); + // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // scalar sigmoid::sigmoidScale @@ -57,6 +58,7 @@ scalar sigmoid::sigmoidScale return 1.0 / (1.0 + exp( scale * (r - shift))); } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // sigmoid::sigmoid @@ -67,11 +69,15 @@ sigmoid::sigmoid ) : energyScalingFunction(name, energyScalingFunctionProperties, pairPot), - sigmoidCoeffs_(energyScalingFunctionProperties.subDict(typeName + "Coeffs")), + sigmoidCoeffs_ + ( + energyScalingFunctionProperties.subDict(typeName + "Coeffs") + ), shift_(readScalar(sigmoidCoeffs_.lookup("shift"))), scale_(readScalar(sigmoidCoeffs_.lookup("scale"))) {} + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // void sigmoid::scaleEnergy(scalar& e, const scalar r) const @@ -79,15 +85,17 @@ void sigmoid::scaleEnergy(scalar& e, const scalar r) const e *= sigmoidScale(r, shift_, scale_); } + bool sigmoid::read(const dictionary& energyScalingFunctionProperties) { energyScalingFunction::read(energyScalingFunctionProperties); - sigmoidCoeffs_ = energyScalingFunctionProperties.subDict(typeName + "Coeffs"); + sigmoidCoeffs_ = + energyScalingFunctionProperties.subDict(typeName + "Coeffs"); sigmoidCoeffs_.lookup("shift") >> shift_; sigmoidCoeffs_.lookup("scale") >> shift_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H index 42d0ac85b83b7bc3a4b99c6bb9be42ffb716e525..8a37ad86003f460c036fb51df247c61642a85617 100644 --- a/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H +++ b/src/lagrangian/molecularDynamics/potential/energyScalingFunction/derived/sigmoid/sigmoid.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -98,7 +98,7 @@ public: void scaleEnergy(scalar& e, const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& energyScalingFunctionProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C index b5251d733c89d6919807429be5c1d3b07e130541..2986a0e5394f73a6e2a6f63996668057536bb215 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/newPairPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,8 +54,8 @@ autoPtr<pairPotential> pairPotential::New ( "pairPotential::New()" ) << "Unknown pairPotential type " - << pairPotentialTypeName << endl << endl - << "Valid pairPotentials are : " << endl + << pairPotentialTypeName << nl << nl + << "Valid pairPotentials are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C index d4a807f352f91577f281dfa344ab8ba82cf3ccee..b3e609f4e77140c17b98e4ec7f2ae47dc129d555 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -93,7 +93,7 @@ void Foam::pairPotential::setLookupTables() } -Foam::scalar Foam::pairPotential::forceLookup(const scalar r) const +Foam::scalar Foam::pairPotential::force(const scalar r) const { scalar k_rIJ = (r - rMin_)/dr_; @@ -102,7 +102,7 @@ Foam::scalar Foam::pairPotential::forceLookup(const scalar r) const if (k < 0) { FatalErrorIn("pairPotential.C") << nl - << "r less than rMin" << nl + << "r less than rMin in pair potential " << name_ << nl << abort(FatalError); } @@ -130,7 +130,7 @@ Foam::pairPotential::forceTable() const } -Foam::scalar Foam::pairPotential::energyLookup(const scalar r) const +Foam::scalar Foam::pairPotential::energy(const scalar r) const { scalar k_rIJ = (r - rMin_)/dr_; @@ -139,7 +139,7 @@ Foam::scalar Foam::pairPotential::energyLookup(const scalar r) const if (k < 0) { FatalErrorIn("pairPotential.C") << nl - << "r less than rMin" << nl + << "r less than rMin in pair potential " << name_ << nl << abort(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H index 6d6701a106c013bea2241d08b6cc2174db8e64af..9be12ebd0c840a0ec84e5c75f25d036586eaa338 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,7 +54,7 @@ namespace Foam class energyScalingFunction; /*---------------------------------------------------------------------------*\ - Class pairPotential Declaration + Class pairPotential Declaration \*---------------------------------------------------------------------------*/ class pairPotential @@ -80,6 +80,7 @@ protected: bool writeTables_; + // Private Member Functions void scaleEnergy(scalar& e, const scalar r) const; @@ -94,7 +95,7 @@ protected: public: //- Runtime type information - TypeName("pairPotential"); + TypeName("pairPotential"); // Declare run-time constructor selection table @@ -150,9 +151,9 @@ public: inline scalar rCutSqr() const; - scalar energyLookup (const scalar r) const; + scalar energy (const scalar r) const; - scalar forceLookup (const scalar r) const; + scalar force (const scalar r) const; List<Pair<scalar> > energyTable() const; @@ -160,7 +161,7 @@ public: inline bool writeTables() const; - virtual scalar unscaledEnergy (const scalar r) const = 0; + virtual scalar unscaledEnergy(const scalar r) const = 0; scalar scaledEnergy(const scalar r) const; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H index f39140c38bb0c346e78a3c1cc0c352aa26c5a770..4c2ef76b8e5248cd886c95f32a7615d42e941c43 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C index 5c0893045a417fa84e61fb01ff18339d4f713406..a07f21beceb54a1924936adab91f8ffa99286a88 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/basic/pairPotentialIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,12 +38,12 @@ bool Foam::pairPotential::writeEnergyAndForceTables(Ostream& os) const forAll(eTab, e) { - os<< eTab[e].first() - << token::SPACE - << eTab[e].second() - << token::SPACE - << fTab[e].second() - << nl; + os << eTab[e].first() + << token::SPACE + << eTab[e].second() + << token::SPACE + << fTab[e].second() + << nl; } return os.good(); diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C index 0327f163d56a6fb38d681b627a73b52ad14e979a..2e44f617da378c4911fb5987bc458ae9e718fe31 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -71,6 +69,7 @@ azizChen::azizChen setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar azizChen::unscaledEnergy(const scalar r) const @@ -84,15 +83,16 @@ scalar azizChen::unscaledEnergy(const scalar r) const F = exp(-pow(((D_ / x) - 1.0),2)); } - return epsilon_ * - ( - A_ * Foam::pow(x, gamma_) * exp(-alpha_ * x) - - ( - (C6_/ Foam::pow(x, 6)) - + (C8_/ Foam::pow(x, 8)) - + (C10_/ Foam::pow(x, 10)) - ) - * F + return + epsilon_ + *( + A_ * Foam::pow(x, gamma_)*exp(-alpha_*x) + - ( + (C6_/ Foam::pow(x, 6)) + + (C8_/ Foam::pow(x, 8)) + + (C10_/ Foam::pow(x, 10)) + ) + *F ); } @@ -112,7 +112,7 @@ bool azizChen::read(const dictionary& azizChen) azizChenCoeffs_.lookup("C10") >> C10_; azizChenCoeffs_.lookup("D") >> D_; azizChenCoeffs_.lookup("gamma") >> gamma_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H index 43a1ee9dca61e3c2d3926982a78153790fb3195a..53f93481281922d2094172101628956067d0137d 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/azizChen/azizChen.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -85,6 +85,7 @@ class azizChen scalar D_; scalar gamma_; + public: //- Runtime type information @@ -111,7 +112,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C index 0476e378da3fcde4a8417d81baa367da813652cc..7dd02320322136e8f29a46ed1e0a7010c46615db 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,7 @@ License \*---------------------------------------------------------------------------*/ #include "coulomb.H" +#include "mathematicalConstants.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,7 +46,8 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +scalar coulomb::oneOverFourPiEps0 = + 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12); // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,11 +63,12 @@ coulomb::coulomb setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar coulomb::unscaledEnergy(const scalar r) const { - return 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12 * r); + return oneOverFourPiEps0/r; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H index 44e5e2cc5cfdeb1fe1290f9a8ccc57ac4d07fc85..f1e06712bb7b8ff3984a2ff62c41cacda0ce5c1e 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/coulomb/coulomb.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,7 +23,7 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::pairPotentials::coulomb + Foam::pairPotentials::electrostatic Description @@ -53,13 +53,16 @@ class coulomb : public pairPotential { - public: //- Runtime type information TypeName("coulomb"); + // Static data members + + static scalar oneOverFourPiEps0; + // Constructors //- Construct from components @@ -80,7 +83,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C new file mode 100644 index 0000000000000000000000000000000000000000..fd771e1854e3d44980b6dd86cfa1e746a4d40b78 --- /dev/null +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.C @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2008-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 "dampedCoulomb.H" +#include "mathematicalConstants.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace pairPotentials +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(dampedCoulomb, 0); + +addToRunTimeSelectionTable +( + pairPotential, + dampedCoulomb, + dictionary +); + +scalar dampedCoulomb::oneOverFourPiEps0 = + 1.0/(4.0 * mathematicalConstant::pi * 8.854187817e-12); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +dampedCoulomb::dampedCoulomb +( + const word& name, + const dictionary& pairPotentialProperties +) +: + pairPotential(name, pairPotentialProperties), + dampedCoulombCoeffs_ + ( + pairPotentialProperties.subDict(typeName + "Coeffs") + ), + alpha_(readScalar(dampedCoulombCoeffs_.lookup("alpha"))) +{ + setLookupTables(); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +scalar dampedCoulomb::unscaledEnergy(const scalar r) const +{ + return oneOverFourPiEps0*erfc(alpha_*r)/r; +} + + +bool dampedCoulomb::read(const dictionary& pairPotentialProperties) +{ + pairPotential::read(pairPotentialProperties); + + dampedCoulombCoeffs_ = + pairPotentialProperties.subDict(typeName + "Coeffs"); + + dampedCoulombCoeffs_.lookup("alpha") >> alpha_; + + return true; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace pairPotentials +} // End namespace Foam + +// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H similarity index 53% rename from applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H rename to src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H index 2cfd5bf57bcf750224f9d2c42f55633d36f4e4e9..377b531824e4d520ccf3621672e1ae537e9e7585 100644 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfigI.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/dampedCoulomb/dampedCoulomb.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,77 +22,87 @@ 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::pairPotentials::electrostatic + +Description + + +SourceFiles + dampedCoulomb.C + \*---------------------------------------------------------------------------*/ +#ifndef dampedCoulomb_H +#define dampedCoulomb_H + +#include "pairPotential.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +namespace pairPotentials +{ -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +/*---------------------------------------------------------------------------*\ + Class dampedCoulomb Declaration +\*---------------------------------------------------------------------------*/ -inline const List<word>& molConfig::molIdList() const +class dampedCoulomb +: + public pairPotential { - return idList_; -} + // Private data + dictionary dampedCoulombCoeffs_; -inline const labelField& molConfig::id() const -{ - return id_; -} + scalar alpha_; -inline const scalarField& molConfig::mass() const -{ - return mass_; -} +public: + //- Runtime type information + TypeName("dampedCoulomb"); -inline const vectorField& molConfig::positions() const -{ - return positions_; -} + // Static data members -inline const labelField& molConfig::cells() const -{ - return cells_; -} + static scalar oneOverFourPiEps0; -inline const vectorField& molConfig::U() const -{ - return U_; -} + // Constructors + //- Construct from components + dampedCoulomb + ( + const word& name, + const dictionary& pairPotentialProperties + ); -inline const vectorField& molConfig::A() const -{ - return A_; -} + // Destructor -inline const labelField& molConfig::tethered() const -{ - return tethered_; -} + ~dampedCoulomb() + {} -inline const vectorField& molConfig::tetherPositions() const -{ - return tetherPositions_; -} + // Member Functions + scalar unscaledEnergy(const scalar r) const; -inline label molConfig::nMol() const -{ - return nMol_; -} + //- Read dictionary + bool read(const dictionary& pairPotentialProperties); +}; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace pairPotentials } // End namespace Foam +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C index ccd54ec787dd8a14a6ca466ed38f95a077beaf45..ae34ef4cdbc30f5dc58c3927f7a2f2c1eeb583a1 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -57,13 +55,17 @@ exponentialRepulsion::exponentialRepulsion ) : pairPotential(name, exponentialRepulsion), - exponentialRepulsionCoeffs_(exponentialRepulsion.subDict(typeName + "Coeffs")), + exponentialRepulsionCoeffs_ + ( + exponentialRepulsion.subDict(typeName + "Coeffs") + ), rm_(readScalar(exponentialRepulsionCoeffs_.lookup("rm"))), epsilon_(readScalar(exponentialRepulsionCoeffs_.lookup("epsilon"))) { setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar exponentialRepulsion::unscaledEnergy(const scalar r) const @@ -76,7 +78,8 @@ bool exponentialRepulsion::read(const dictionary& exponentialRepulsion) { pairPotential::read(exponentialRepulsion); - exponentialRepulsionCoeffs_ = exponentialRepulsion.subDict(typeName + "Coeffs"); + exponentialRepulsionCoeffs_ = + exponentialRepulsion.subDict(typeName + "Coeffs"); exponentialRepulsionCoeffs_.lookup("rm") >> rm_; exponentialRepulsionCoeffs_.lookup("epsilon") >> epsilon_; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H index cef45b7a3ae9c512305da12fa2c2c2291bedc38b..8ce1ee4a0f914faae42488a1712b370c29a4c978 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/exponentialRepulsion/exponentialRepulsion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class exponentialRepulsion Declaration + Class exponentialRepulsion Declaration \*---------------------------------------------------------------------------*/ class exponentialRepulsion @@ -60,6 +60,7 @@ class exponentialRepulsion scalar rm_; scalar epsilon_; + public: //- Runtime type information @@ -86,7 +87,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C index 9c93f3a70e017ca9a285b9992370dd9052ef36c4..d5a1deb88e6e8c0426a8ffad5c6a2ebead09c4ac 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -64,6 +62,7 @@ lennardJones::lennardJones setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar lennardJones::unscaledEnergy(const scalar r) const diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H index f12027d1151eafa256ea8ced6130c17432cfa319..2ae3c036ae4bc893689d10de81741bfa6a22a22d 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/lennardJones/lennardJones.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class lennardJones Declaration + Class lennardJones Declaration \*---------------------------------------------------------------------------*/ class lennardJones @@ -60,6 +60,7 @@ class lennardJones scalar sigma_; scalar epsilon_; + public: //- Runtime type information @@ -86,7 +87,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C index a813495f2678ce51f2b2091a8d1858139827da90..7545573591bf22809f92db844cd65234b28a9809 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -66,6 +64,7 @@ maitlandSmith::maitlandSmith setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar maitlandSmith::unscaledEnergy(const scalar r) const @@ -90,7 +89,7 @@ bool maitlandSmith::read(const dictionary& maitlandSmith) maitlandSmithCoeffs_.lookup("gamma") >> gamma_; maitlandSmithCoeffs_.lookup("rm") >> rm_; maitlandSmithCoeffs_.lookup("epsilon") >> epsilon_; - + return true; } diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H index af4612644b5cd14bc3695a8b399da5d135bda24b..cdeb01211b58630e31f5d1044a94363a54ee28a8 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/maitlandSmith/maitlandSmith.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,7 +72,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class maitlandSmith Declaration + Class maitlandSmith Declaration \*---------------------------------------------------------------------------*/ class maitlandSmith @@ -88,6 +88,7 @@ class maitlandSmith scalar rm_; scalar epsilon_; + public: //- Runtime type information @@ -114,7 +115,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C index ca43080d7485662917c3fd3158d510bf12794a21..3326fd7fe1f41e5a723e0df06f75d91350cdf834 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -61,6 +59,7 @@ noInteraction::noInteraction setLookupTables(); } + // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // scalar noInteraction::unscaledEnergy(const scalar r) const diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H index d09564ef882ab3d5b4f849c13e770c6b425590c4..5d3fd5742dbf0fe3290b28968a923659c6e7839f 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/derived/noInteraction/noInteraction.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace pairPotentials { /*---------------------------------------------------------------------------*\ - Class noInteraction Declaration + Class noInteraction Declaration \*---------------------------------------------------------------------------*/ class noInteraction @@ -80,7 +80,7 @@ public: scalar unscaledEnergy(const scalar r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& pairPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C index ef856bc50527ad70f8a554a9ce3ded45a89fd322..2d77c4ce59505c320590182f5eae168637f48cc4 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,9 +60,9 @@ void Foam::pairPotentialList::readPairPotentialDict else { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " not found" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " not found" + << nl << abort(FatalError); } } else @@ -80,10 +80,10 @@ void Foam::pairPotentialList::readPairPotentialDict else { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " or " - << idB << "-" << idA << " not found" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " or " + << idB << "-" << idA << " not found" + << nl << abort(FatalError); } if @@ -93,10 +93,10 @@ void Foam::pairPotentialList::readPairPotentialDict ) { FatalErrorIn("pairPotentialList::buildPotentials") << nl - << "Pair pairPotential specification subDict " - << idA << "-" << idB << " and " - << idB << "-" << idA << " found multiple definition" - << nl << abort(FatalError); + << "Pair pairPotential specification subDict " + << idA << "-" << idB << " and " + << idB << "-" << idA << " found multiple definition" + << nl << abort(FatalError); } } @@ -136,9 +136,41 @@ void Foam::pairPotentialList::readPairPotentialDict } } + if (!pairPotentialDict.found("electrostatic")) + { + FatalErrorIn("pairPotentialList::buildPotentials") << nl + << "Pair pairPotential specification subDict electrostatic" + << nl << abort(FatalError); + } + + electrostaticPotential_ = pairPotential::New + ( + "electrostatic", + pairPotentialDict.subDict("electrostatic") + ); + + if (electrostaticPotential_->rCut() > rCutMax_) + { + rCutMax_ = electrostaticPotential_->rCut(); + } + + if (electrostaticPotential_->writeTables()) + { + OFstream ppTabFile(mesh.time().path()/"electrostatic"); + + if(!electrostaticPotential_->writeEnergyAndForceTables(ppTabFile)) + { + FatalErrorIn("pairPotentialList::readPairPotentialDict") + << "Failed writing to " + << ppTabFile.name() << nl + << abort(FatalError); + } + } + rCutMaxSqr_ = rCutMax_*rCutMax_; } + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::pairPotentialList::pairPotentialList() @@ -146,6 +178,7 @@ Foam::pairPotentialList::pairPotentialList() PtrList<pairPotential>() {} + Foam::pairPotentialList::pairPotentialList ( const List<word>& idList, @@ -188,13 +221,13 @@ const Foam::pairPotential& Foam::pairPotentialList::pairPotentialFunction const label b ) const { - return (*this)[pairPotentialIndex (a, b)]; + return (*this)[pairPotentialIndex(a, b)]; } bool Foam::pairPotentialList::rCutMaxSqr(const scalar rIJMagSqr) const { - if (rIJMagSqr <= rCutMaxSqr_) + if (rIJMagSqr < rCutMaxSqr_) { return true; } @@ -212,7 +245,7 @@ bool Foam::pairPotentialList::rCutSqr const scalar rIJMagSqr ) const { - if (rIJMagSqr <= rCutSqr (a, b)) + if (rIJMagSqr < rCutSqr(a, b)) { return true; } @@ -229,7 +262,7 @@ Foam::scalar Foam::pairPotentialList::rMin const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rMin(); + return (*this)[pairPotentialIndex(a, b)].rMin(); } @@ -239,7 +272,7 @@ Foam::scalar Foam::pairPotentialList::dr const label b ) const { - return (*this)[pairPotentialIndex (a, b)].dr(); + return (*this)[pairPotentialIndex(a, b)].dr(); } @@ -249,7 +282,7 @@ Foam::scalar Foam::pairPotentialList::rCutSqr const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rCutSqr(); + return (*this)[pairPotentialIndex(a, b)].rCutSqr(); } @@ -259,7 +292,7 @@ Foam::scalar Foam::pairPotentialList::rCut const label b ) const { - return (*this)[pairPotentialIndex (a, b)].rCut(); + return (*this)[pairPotentialIndex(a, b)].rCut(); } @@ -270,7 +303,7 @@ Foam::scalar Foam::pairPotentialList::force const scalar rIJMag ) const { - scalar f = (*this)[pairPotentialIndex (a, b)].forceLookup(rIJMag); + scalar f = (*this)[pairPotentialIndex(a, b)].force(rIJMag); return f; } @@ -283,11 +316,10 @@ Foam::scalar Foam::pairPotentialList::energy const scalar rIJMag ) const { - scalar e = (*this)[pairPotentialIndex (a, b)].energyLookup(rIJMag); + scalar e = (*this)[pairPotentialIndex(a, b)].energy(rIJMag); return e; } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H index a7e8190a01bfccd986ffa79817fd492f500e78c2..b4193a46ae49df57ed5cbcda74f8657e4cdcece4 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class pairPotentialList Declaration + Class pairPotentialList Declaration \*---------------------------------------------------------------------------*/ class pairPotentialList @@ -62,6 +62,9 @@ class pairPotentialList scalar rCutMaxSqr_; + autoPtr<pairPotential> electrostaticPotential_; + + // Private Member Functions inline label pairPotentialIndex @@ -83,6 +86,7 @@ class pairPotentialList //- Disallow default bitwise copy construct pairPotentialList(const pairPotentialList&); + public: // Constructors @@ -97,10 +101,12 @@ public: const polyMesh& mesh ); + // Destructor ~pairPotentialList(); + // Member Functions void buildPotentials @@ -110,6 +116,7 @@ public: const polyMesh& mesh ); + // Access inline scalar rCutMax() const; @@ -132,13 +139,13 @@ public: const scalar rIJMagSqr ) const; - scalar rMin (const label a, const label b) const; + scalar rMin(const label a, const label b) const; - scalar dr (const label a, const label b) const; + scalar dr(const label a, const label b) const; - scalar rCutSqr (const label a, const label b) const; + scalar rCutSqr(const label a, const label b) const; - scalar rCut (const label a, const label b) const; + scalar rCut(const label a, const label b) const; scalar force ( @@ -153,6 +160,8 @@ public: const label b, const scalar rIJMag ) const; + + inline const pairPotential& electrostatic() const; }; diff --git a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H index 413ffea05eb663c8bc7184801475fefee38d6dda..c14aa3695e189388a7be344c3ace053909b75249 100644 --- a/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H +++ b/src/lagrangian/molecularDynamics/potential/pairPotential/pairPotentialList/pairPotentialListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -56,6 +56,7 @@ inline Foam::label Foam::pairPotentialList::pairPotentialIndex return index; } + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::scalar Foam::pairPotentialList::rCutMax() const @@ -70,4 +71,10 @@ inline Foam::scalar Foam::pairPotentialList::rCutMaxSqr() const } +inline const Foam::pairPotential& Foam::pairPotentialList::electrostatic() const +{ + return electrostaticPotential_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/potential/potential.C b/src/lagrangian/molecularDynamics/potential/potential/potential.C index 16a7fca6cd8b56a16894df3363e8964d92e28f12..5532c2f105c0751eeb4bf966918e91fb12c09c10 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potential.C +++ b/src/lagrangian/molecularDynamics/potential/potential/potential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -365,8 +365,7 @@ void Foam::potential::potential::readMdInitialiseDict Foam::potential::potential(const polyMesh& mesh) : - mesh_(mesh), - electrostaticPotential_() + mesh_(mesh) { readPotentialDict(); } @@ -379,8 +378,7 @@ Foam::potential::potential IOdictionary& idListDict ) : - mesh_(mesh), - electrostaticPotential_() + mesh_(mesh) { readMdInitialiseDict(mdInitialiseDict, idListDict); } diff --git a/src/lagrangian/molecularDynamics/potential/potential/potential.H b/src/lagrangian/molecularDynamics/potential/potential/potential.H index 7accf239cd0f6fde38fca7dac2645b1f8206cfb5..32f9b2a1d29d98b82af3b4e760910f0548a057b2 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potential.H +++ b/src/lagrangian/molecularDynamics/potential/potential/potential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -49,7 +49,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class potential Declaration + Class potential Declaration \*---------------------------------------------------------------------------*/ class potential @@ -70,12 +70,11 @@ class potential pairPotentialList pairPotentials_; - electrostaticPotential electrostaticPotential_; - tetherPotentialList tetherPotentials_; vector gravity_; + // Private Member Functions void setSiteIdList(const IOdictionary& moleculePropertiesDict); @@ -110,6 +109,7 @@ public: IOdictionary& idListDict ); + // Destructor ~potential(); @@ -133,8 +133,6 @@ public: inline const pairPotentialList& pairPotentials() const; - inline const electrostaticPotential& electrostatic() const; - inline const tetherPotentialList& tetherPotentials() const; inline const vector& gravity() const; diff --git a/src/lagrangian/molecularDynamics/potential/potential/potentialI.H b/src/lagrangian/molecularDynamics/potential/potential/potentialI.H index eddd2b047ccdbb3d04e3997e20c47f304ccc8812..38ba634455761cc7416fe2123b48edc088304200 100644 --- a/src/lagrangian/molecularDynamics/potential/potential/potentialI.H +++ b/src/lagrangian/molecularDynamics/potential/potential/potentialI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,8 +24,6 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // inline Foam::label Foam::potential::nIds() const @@ -70,13 +68,6 @@ inline const Foam::pairPotentialList& Foam::potential::pairPotentials() const } -inline const Foam::electrostaticPotential& -Foam::potential::electrostatic() const -{ - return electrostaticPotential_; -} - - inline const Foam::tetherPotentialList& Foam::potential::tetherPotentials() const { diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C index 4caba50778c52157ff789479ec2e6f4c61acf14b..85c8a703596579aca1b3af84b2dcb84a24ef0773 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/newTetherPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,7 +39,11 @@ autoPtr<tetherPotential> tetherPotential::New const dictionary& tetherPotentialProperties ) { - word tetherPotentialTypeName(tetherPotentialProperties.lookup("tetherPotential")); + word + tetherPotentialTypeName + ( + tetherPotentialProperties.lookup("tetherPotential") + ); Info<< nl << "Selecting tether potential " << tetherPotentialTypeName << " for " @@ -54,8 +58,8 @@ autoPtr<tetherPotential> tetherPotential::New ( "tetherPotential::New()" ) << "Unknown tetherPotential type " - << tetherPotentialTypeName << endl << endl - << "Valid tetherPotentials are : " << endl + << tetherPotentialTypeName << nl << nl + << "Valid tetherPotentials are: " << nl << dictionaryConstructorTablePtr_->toc() << exit(FatalError); } diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C index 462be334561a6c1b3af9fd186d7f6b0c5c4e39b5..4c4708ba96a320c07cd81c7738ad0fa67477e9b7 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H index 19a9cddb77743a3d038ac9a51a457b21a9e12067..f65e5bb6b8593e9bfa28caec2dabd15c5ded5659 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/basic/tetherPotential.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class tetherPotential Declaration + Class tetherPotential Declaration \*---------------------------------------------------------------------------*/ class tetherPotential diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C index 453d5898ab85917cd511b02032dbd18f3f8f14bc..1edcc70a155fa5f1242623f97f6d4011226a7458 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H index 6508adaec902e78461435887b6f13081a6046210..4af51cfdff80706857f0a50322c78b5f73bf4b46 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/harmonicSpring/harmonicSpring.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class harmonicSpring Declaration + Class harmonicSpring Declaration \*---------------------------------------------------------------------------*/ class harmonicSpring @@ -88,7 +88,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C index 7e12f9ab74e93b82c2b5c9b25e28529c1c032fd9..8a3a081f6fc6bbdcf1e8cdb39df46f233dc97b2c 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H index 82b93b087b7fc542067afdb2d90aa4063f80bf5c..2bb98e39bd2063ccff4809f187f970de80baef46 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/pitchForkRing/pitchForkRing.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class pitchForkRing Declaration + Class pitchForkRing Declaration \*---------------------------------------------------------------------------*/ class pitchForkRing @@ -90,7 +90,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C index 45a48a4c623fbfa663b889ad142463c3d22d8c3f..5396013a173a973aa7302f5cc07e69889ff61b54 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,8 +45,6 @@ addToRunTimeSelectionTable dictionary ); -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -88,6 +86,7 @@ scalar restrainedHarmonicSpring::energy(const vector r) const } } + vector restrainedHarmonicSpring::force(const vector r) const { scalar magR = mag(r); @@ -102,7 +101,11 @@ vector restrainedHarmonicSpring::force(const vector r) const } } -bool restrainedHarmonicSpring::read(const dictionary& tetherPotentialProperties) + +bool restrainedHarmonicSpring::read +( + const dictionary& tetherPotentialProperties +) { tetherPotential::read(tetherPotentialProperties); diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H index 62b92618591cde2ab81918375ee98cf5d0638bd4..1711c4f5f3e5db5b35723de84bdc8aa082026f21 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/derived/restrainedHarmonicSpring/restrainedHarmonicSpring.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,7 +46,7 @@ namespace tetherPotentials { /*---------------------------------------------------------------------------*\ - Class restrainedHarmonicSpring Declaration + Class restrainedHarmonicSpring Declaration \*---------------------------------------------------------------------------*/ class restrainedHarmonicSpring @@ -90,7 +90,7 @@ public: vector force(const vector r) const; - //- Read transportProperties dictionary + //- Read dictionary bool read(const dictionary& tetherPotentialProperties); }; diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C index 79a1ce83d7a0922f4c4b5d7472d6ffa1fe555286..93498b8f711a2a8dc050e950e27eb51cc2ea1407 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -131,7 +131,7 @@ const Foam::tetherPotential& Foam::tetherPotentialList::tetherPotentialFunction const label a ) const { - return (*this)[tetherPotentialIndex (a)]; + return (*this)[tetherPotentialIndex(a)]; } @@ -141,7 +141,7 @@ Foam::vector Foam::tetherPotentialList::force const vector rIT ) const { - return (*this)[tetherPotentialIndex (a)].force(rIT); + return (*this)[tetherPotentialIndex(a)].force(rIT); } @@ -151,9 +151,8 @@ Foam::scalar Foam::tetherPotentialList::energy const vector rIT ) const { - return (*this)[tetherPotentialIndex (a)].energy(rIT); + return (*this)[tetherPotentialIndex(a)].energy(rIT); } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // ************************************************************************* // diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H index a48cc21edec46f805845e4fa84b7504660a39c37..8ca770f52351cd1de3f749428afb9be8474e8e6a 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialList.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -57,6 +57,7 @@ class tetherPotentialList List<label> idMap_; + // Private Member Functions inline label tetherPotentialIndex @@ -92,10 +93,12 @@ public: const List<word>& tetherSiteIdList ); + // Destructor ~tetherPotentialList(); + // Member Functions void buildPotentials diff --git a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H index 67b1e4dbe62a97c3b38a41863bcd5e9c77b1d4b8..73834281efd0b4f92749800b1526b35841f0d440 100644 --- a/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H +++ b/src/lagrangian/molecularDynamics/potential/tetherPotential/tetherPotentialList/tetherPotentialListI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index d5133cb33dad9e45beb50fa4785fdaee749b2d39..a61d00246e04323e182603105061d72d9150acd6 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -90,6 +90,7 @@ $(cellSources)/nbrToCell/nbrToCell.C $(cellSources)/zoneToCell/zoneToCell.C $(cellSources)/sphereToCell/sphereToCell.C $(cellSources)/cylinderToCell/cylinderToCell.C +$(cellSources)/faceZoneToCell/faceZoneToCell.C faceSources = sets/faceSources $(faceSources)/faceToFace/faceToFace.C diff --git a/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C new file mode 100644 index 0000000000000000000000000000000000000000..526620fe14746be56d0e433274be25edb0b5d8cd --- /dev/null +++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.C @@ -0,0 +1,185 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 "faceZoneToCell.H" +#include "polyMesh.H" + +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + +defineTypeNameAndDebug(faceZoneToCell, 0); + +addToRunTimeSelectionTable(topoSetSource, faceZoneToCell, word); + +addToRunTimeSelectionTable(topoSetSource, faceZoneToCell, istream); + +} + + +Foam::topoSetSource::addToUsageTable Foam::faceZoneToCell::usage_ +( + faceZoneToCell::typeName, + "\n Usage: faceZoneToCell zone master|slave\n\n" + " Select master or slave side of the faceZone." + " Note:accepts wildcards for zone.\n\n" +); + + +template<> +const char* Foam::NamedEnum<Foam::faceZoneToCell::faceAction, 2>::names[] = +{ + "master", + "slave" +}; + + +const Foam::NamedEnum<Foam::faceZoneToCell::faceAction, 2> + Foam::faceZoneToCell::faceActionNames_; + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::faceZoneToCell::combine(topoSet& set, const bool add) const +{ + bool hasMatched = false; + + forAll(mesh_.faceZones(), i) + { + const faceZone& zone = mesh_.faceZones()[i]; + + if (zoneName_.match(zone.name())) + { + const labelList& cellLabels = + ( + option_ == MASTER + ? zone.masterCells() + : zone.slaveCells() + ); + + Info<< " Found matching zone " << zone.name() + << " with " << cellLabels.size() << " cells on selected side." + << endl; + + hasMatched = true; + + forAll(cellLabels, i) + { + // Only do active cells + if (cellLabels[i] < mesh_.nCells()) + { + addOrDelete(set, cellLabels[i], add); + } + } + } + } + + if (!hasMatched) + { + WarningIn("faceZoneToCell::combine(topoSet&, const bool)") + << "Cannot find any faceZone named " << zoneName_ << endl + << "Valid names are " << mesh_.faceZones().names() << endl; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + const word& zoneName, + const faceAction option +) +: + topoSetSource(mesh), + zoneName_(zoneName), + option_(option) +{} + + +// Construct from dictionary +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + zoneName_(dict.lookup("name")), + option_(faceActionNames_.read(dict.lookup("option"))) +{} + + +// Construct from Istream +Foam::faceZoneToCell::faceZoneToCell +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + zoneName_(checkIs(is)), + option_(faceActionNames_.read(checkIs(is))) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::faceZoneToCell::~faceZoneToCell() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::faceZoneToCell::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding all " << faceActionNames_[option_] + << " cells of faceZone " << zoneName_ << " ..." << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing all " << faceActionNames_[option_] + << " cells of faceZone " << zoneName_ << " ..." << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H similarity index 53% rename from applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H rename to src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H index 3b0ba8fd504846ecb073c7083593eff38dec23c0..b09c58399fcca136725ec959690542ff25221318 100644 --- a/applications/utilities/preProcessing/mdInitialise/molConfig_old/molConfig.H +++ b/src/meshTools/sets/cellSources/faceZoneToCell/faceZoneToCell.H @@ -23,34 +23,21 @@ License Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class - Foam::molConfig + Foam::faceZoneToCell Description + A topoSetSource to select cells based on side of faceZone. SourceFiles - molConfigI.H - molConfig.C - molConfigIO.C + faceZoneToCell.C \*---------------------------------------------------------------------------*/ -#ifndef molConfig_H -#define molConfig_H +#ifndef faceZoneToCell_H +#define faceZoneToCell_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" +#include "topoSetSource.H" +#include "wordRe.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -58,77 +45,85 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class molConfig Declaration + Class faceZoneToCell Declaration \*---------------------------------------------------------------------------*/ -class molConfig +class faceZoneToCell +: + public topoSetSource { - // Private data - - const IOdictionary& molConfigDescription_; - - const polyMesh& mesh_; - - DynamicList<word> idList_; +public: + //- Enumeration defining the valid options + enum faceAction + { + MASTER, + SLAVE + }; - labelField id_; +private: - scalarField mass_; + // Private data - vectorField positions_; + static const NamedEnum<faceAction, 2> faceActionNames_; - labelField cells_; + //- Add usage string + static addToUsageTable usage_; - vectorField U_; + //- Name/regular expression of faceZone + wordRe zoneName_; - vectorField A_; + //- Option + faceAction option_; - labelField tethered_; - vectorField tetherPositions_; + // Private Member Functions - label nMol_; + void combine(topoSet& set, const bool add) const; public: + //- Runtime type information + TypeName("faceZoneToCell"); + // Constructors - //- Construct from IOdictionary and mesh - molConfig(IOdictionary&, const polyMesh&); + //- Construct from components + faceZoneToCell + ( + const polyMesh& mesh, + const word& zoneName, + const faceAction option + ); + + //- Construct from dictionary + faceZoneToCell + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + faceZoneToCell + ( + const polyMesh& mesh, + Istream& + ); // Destructor - ~molConfig(); + virtual ~faceZoneToCell(); // Member Functions - void createMolecules(); - - - // Access - - inline const List<word>& molIdList() const; + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) 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; }; @@ -138,10 +133,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -#include "molConfigI.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - #endif // ************************************************************************* // diff --git a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C index 0dcd1e0ffb8b733911aebf50cdaab88e67a0c0f9..14b6deb7f37771b062c29e8d635f7feae33448aa 100644 --- a/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C +++ b/src/meshTools/sets/cellSources/zoneToCell/zoneToCell.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToCell::usage_ ( zoneToCell::typeName, "\n Usage: zoneToCell zone\n\n" - " Select all cells in the cellZone\n\n" + " Select all cells in the cellZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/src/meshTools/sets/faceSources/patchToFace/patchToFace.C b/src/meshTools/sets/faceSources/patchToFace/patchToFace.C index 9bcf49690ffc285ae3db1568476ba31edc0e9353..000db639a96180f2e24ada7aa4f08b4a621685e4 100644 --- a/src/meshTools/sets/faceSources/patchToFace/patchToFace.C +++ b/src/meshTools/sets/faceSources/patchToFace/patchToFace.C @@ -49,7 +49,7 @@ Foam::topoSetSource::addToUsageTable Foam::patchToFace::usage_ ( patchToFace::typeName, "\n Usage: patchToFace patch\n\n" - " Select all faces in the patch\n\n" + " Select all faces in the patch. Note:accepts wildcards for patch.\n\n" ); diff --git a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C index 12cbab560d68ff36281aa34ca6bead1a4b8926f9..465632f2b1091fcdf774b99a0eb076ab16600d15 100644 --- a/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C +++ b/src/meshTools/sets/faceSources/zoneToFace/zoneToFace.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToFace::usage_ ( zoneToFace::typeName, "\n Usage: zoneToFace zone\n\n" - " Select all faces in the faceZone\n\n" + " Select all faces in the faceZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C index 4b5148c558c8d0915109d9e87591076d705db5fc..0558093afa54d58b53c6c6eed6435a7dba6f6798 100644 --- a/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C +++ b/src/meshTools/sets/pointSources/zoneToPoint/zoneToPoint.C @@ -47,7 +47,8 @@ Foam::topoSetSource::addToUsageTable Foam::zoneToPoint::usage_ ( zoneToPoint::typeName, "\n Usage: zoneToPoint zone\n\n" - " Select all points in the pointZone\n\n" + " Select all points in the pointZone." + " Note:accepts wildcards for zone.\n\n" ); diff --git a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines b/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines deleted file mode 100644 index c1ebafec0159993aab2b1525f952e5b28e714776..0000000000000000000000000000000000000000 --- a/tutorials/compressible/rhoCentralFoam/LadenburgJet60psi/system/machines +++ /dev/null @@ -1,8 +0,0 @@ -borg1 -borg2 -borg3 -borg4 -borg5 -borg6 -borg7 -borg8 diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict deleted file mode 100644 index ee03c904028a9b25f447b0cd74457e8a2439d6fb..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/blockMeshDict +++ /dev/null @@ -1,163 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object blockMeshDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -convertToMeters 0.25e-9; - -vertices -( - (0 0 0) //0 - (15 0 0) - (15 3 0) - (0 3 0) - (0 0 12) - (15 0 12) - (15 3 12) - (0 3 12) //7 - (22 0 0) - (22 3 0) - (22 0 12) - (22 3 12) //11 - (31 0 0) - (31 3 0) - (31 0 12) - (31 3 12) //15 - (20 9 0) - (17 9 0) - (20 9 12) - (17 9 12) //19 - (0 9 0) - (0 9 12) //21 - (31 9 0) - (31 9 12) //23 - (17 18 0) - (0 18 0) - (17 18 12) - (0 18 12) //27 - (31 18 0) - (20 18 0) - (31 18 12) - (20 18 12) //31 - (17 21 0) - (0 21 0) - (17 21 12) - (0 21 12) //35 - (31 21 0) - (20 21 0) - (31 21 12) - (20 21 12) //39 - (17 25 0) - (0 25 0) - (17 25 12) - (0 25 12) // 43 - (31 25 0) - (20 25 0) - (31 25 12) - (20 25 12) // 47 -); - -blocks -( - hex (0 1 2 3 4 5 6 7) bottomWall (15 3 6) simpleGrading (1 1 1) //1 - hex (1 8 9 2 5 10 11 6) bottomWall (3 3 6) simpleGrading (1 1 1) //2 - hex (2 9 16 17 6 11 18 19) bottomWall (3 6 6) simpleGrading (1 1 1) //3 - hex (8 12 13 9 10 14 15 11) bottomWall (9 3 6) simpleGrading (1 1 1) //4 - hex (3 2 17 20 7 6 19 21) liquid (15 6 6) simpleGrading (1 1 1) //5 - hex (20 17 24 25 21 19 26 27) liquid (15 9 6) simpleGrading (1 1 1) //6 - hex (25 24 32 33 27 26 34 35) liquid (15 3 6) simpleGrading (1 1 1) //6A - hex (17 16 29 24 19 18 31 26) liquid (3 9 6) simpleGrading (1 1 1) //7 - hex (16 22 28 29 18 23 30 31) liquid (9 9 6) simpleGrading (1 1 1) //8 - hex (29 28 36 37 31 30 38 39) liquid (9 3 6) simpleGrading (1 1 1) //8A - hex (9 13 22 16 11 15 23 18) liquid (9 6 6) simpleGrading (1 1 1) //9 - hex (33 32 40 41 35 34 42 43) topWall (15 3 6) simpleGrading (1 1 1) //10 - hex (32 37 45 40 34 39 47 42) topWall (3 3 6) simpleGrading (1 1 1) //11 - hex (24 29 37 32 26 31 39 34) topWall (3 3 6) simpleGrading (1 1 1) //12 - hex (37 36 44 45 39 38 46 47) topWall (9 3 6) simpleGrading (1 1 1) //13 -); - -patches -( - cyclic - periodicX - ( - (0 4 7 3) - (3 7 21 20) - (20 21 27 25) - (25 27 35 33) - (33 35 43 41) - (12 13 15 14) - (13 22 23 15) - (22 28 30 23) - (28 36 38 30) - (36 44 46 38) - ) - - cyclic - periodicZ - ( - (0 3 2 1) - (1 2 9 8) - (8 9 13 12) - (2 17 16 9) - (2 3 20 17) - (9 16 22 13) - (17 20 25 24) - (16 29 28 22) - (16 17 24 29) - (24 25 33 32) - (28 29 37 36) - (32 33 41 40) - (36 37 45 44) - (32 40 45 37) - (24 32 37 29) - (4 5 6 7) - (5 10 11 6) - (10 14 15 11) - (6 11 18 19) - (7 6 19 21) - (11 15 23 18) - (19 26 27 21) - (18 23 30 31) - (18 31 26 19) - (26 34 35 27) - (30 38 39 31) - (34 42 43 35) - (38 46 47 39) - (34 39 47 42) - (26 31 39 34) - ) - - wall - outerBoundaryBottom - ( - (0 1 5 4) - (1 8 10 5) - (8 12 14 10) - ) - - wall - outerBoundaryTop - ( - (40 41 43 42) - (44 45 47 46) - (40 42 47 45) - ) -); - -mergePatchPairs -( -); - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict deleted file mode 100644 index 6bd9f1538e2c0723d9505442bdf2453015012738..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/molConfigDict +++ /dev/null @@ -1,64 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -bottomWall -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure FCC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies molecule; - tethered yes; - orientationAngles ( 30 0 0 ); -} - -liquid -{ - massDensity 1100; - temperature 250; - velocityDistribution maxwellian; - bulkVelocity ( 245 0 0 ); - id Ne; - mass 3.350996347e-26; - latticeStructure SC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 45 0 0 ); -} - -topWall -{ - massDensity 1220; - temperature 200; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure BCC; - anchor ( 1.05e-09 3.18e-09 2.87e-09 ); - anchorSpecifies corner; - tethered yes; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict deleted file mode 100644 index 56a7bbee713bf0a24860dad6ad2e592c9e17f464..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/potentialDict +++ /dev/null @@ -1,104 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 2 ( Ne Ar ); - -pair -{ - Ar-Ar - { - pairPotential maitlandSmith; - rCut 1e-09; - rMin 1.5e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 7.5; - rm 3.756e-10; - epsilon 1.990108438e-21; - } - - energyScalingFunction doubleSigmoid; - doubleSigmoidCoeffs - { - shift1 9e-10; - scale1 -64771072; - shift2 9.7e-10; - scale2 -259084288; - } - - writeTables yes; - } - - Ar-Ne - { - pairPotential maitlandSmith; - rCut 9e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 4; - rm 3.48e-10; - epsilon 8.765026657e-22; - } - - energyScalingFunction shiftedForce; - writeTables yes; - } - - Ne-Ne - { - pairPotential maitlandSmith; - rCut 8e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 5; - rm 3.0739e-10; - epsilon 5.813260729e-22; - } - - energyScalingFunction shiftedForce; - writeTables yes; - } -} - -tether -{ - Ar - { - tetherPotential restrainedHarmonicSpring; - restrainedHarmonicSpringCoeffs - { - springConstant 0.1; - rR 1.2e-09; - } - } -} - -external -{ - gravity ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict deleted file mode 100644 index 937130f4ac3ba22f29b727686566f27b6adfa45a..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/molConfigDict +++ /dev/null @@ -1,64 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -sectionA -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - -sectionB -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ne; - mass 3.350917e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - -sectionC -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( -250 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict deleted file mode 100644 index 0386a6994e0d9708901895788978e11f2d5bf453..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/potentialDict +++ /dev/null @@ -1,86 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 1 ( Ar ); - -pair -{ - Ar-Ar - { - pairPotential maitlandSmith; - rCut 1e-09; - rMin 1.5e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 7.5; - rm 3.756e-10; - epsilon 1.990108438e-21; - } - - energyScalingFunction doubleSigmoid; - doubleSigmoidCoeffs - { - shift1 9e-10; - scale1 -64771072; - shift2 9.7e-10; - scale2 -259084288; - } - - writeTables no; - } - - Ar-Ne - { - pairPotential maitlandSmith; - rCut 9e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 4; - rm 3.48e-10; - epsilon 8.765026657e-22; - } - - energyScalingFunction shiftedForce; - writeTables no; - } - - Ne-Ne - { - pairPotential maitlandSmith; - rCut 8e-10; - rMin 1e-10; - dr 5e-14; - maitlandSmithCoeffs - { - m 13; - gamma 5; - rm 3.0739e-10; - epsilon 5.813260729e-22; - } - - energyScalingFunction shiftedForce; - writeTables no; - } -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean index 00dd874d7638805cf31b2c56b01b659e0792e1c4..d8245cb12bceacb3316f8f922262a9e911b9b155 100755 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allclean @@ -3,9 +3,20 @@ # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions -cd periodicCube - rm -rf 0 - rm -rf Ar-Ar - rm -rf constant/idList +cd periodicCubeArgon + rm -rf 0/* + rm -f Ar-Ar + rm -f electrostatic + rm -f constant/idList + rm -rf constant/polyMesh/sets + cleanCase +cd .. + +cd periodicCubeWater + rm -rf 0/* + rm -f O-O + rm -f electrostatic + rm -f constant/idList + rm -rf constant/polyMesh/sets cleanCase cd .. diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun index 0c590da09a8c91a0815034deba71b3d4d681e762..0d8c6de9d1b4ecf76f0d6b46642adac9dd514c8c 100755 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/Allrun @@ -5,9 +5,14 @@ application="mdEquilibrationFoam" -cd periodicCube +# cd periodicCubeArgon +# runApplication blockMesh +# runApplication mdInitialise +# runApplication $application +# cd .. + +cd periodicCubeWater runApplication blockMesh - runApplication molConfig + runApplication mdInitialise runApplication $application -cd .. - +cd .. \ No newline at end of file diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict deleted file mode 100644 index 6f48e375e8c3ba101230631096b6ecd6df24a156..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/molConfigDict +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object molConfigDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -liquid -{ - massDensity 1220; - temperature 300; - velocityDistribution maxwellian; - bulkVelocity ( 0 0 0 ); - id Ar; - mass 6.63352033e-26; - latticeStructure SC; - anchor ( 0 0 0 ); - anchorSpecifies molecule; - tethered no; - orientationAngles ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict deleted file mode 100644 index 1abf7b0e569b0a3b4dd0530d9c9f3ec332d43f6c..0000000000000000000000000000000000000000 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/potentialDict +++ /dev/null @@ -1,65 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - location "system"; - object potentialDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -removalOrder 1 ( Ar ); - -pair -{ - Ar-Ar - { - pairPotential azizChen; - rCut 1.2e-09; - rMin 1.5e-10; - dr 2e-14; - azizChenCoeffs - { - epsilon 1.97742255e-21; - rm 3.759e-10; - A 9502720; - alpha 16.345655; - C6 1.0914254; - C8 0.6002595; - C10 0.3700113; - D 1.4; - gamma 2; - } - - energyScalingFunction noScaling; - writeTables yes; - } -} - -tether -{ - Ar - { - tetherPotential restrainedHarmonicSpring; - restrainedHarmonicSpringCoeffs - { - springConstant 0.0277; - rR 1.2e-09; - } - } -} - -external -{ - gravity ( 0 0 0 ); -} - - -// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..567fce489ce0f0bd6805f2a72cb5001db238cbcd --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/moleculeProperties @@ -0,0 +1,36 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Ar +{ + siteIds (Ar); + pairPotentialSiteIds (Ar); + siteReferencePositions + ( + (0 0 0) + ); + siteMasses + ( + 6.63352033e-26 + ); + siteCharges + ( + 0 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..23a2ee9874ef09ad03276bbe470cc179802a227c --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 2.462491658e-9; + +vertices +( + (-1 -1 -1) + (1 -1 -1) + (1 1 -1) + (-1 1 -1) + (-1 -1 1) + (1 -1 1) + (1 1 1) + (-1 1 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) liquid (12 12 12) simpleGrading (1 1 1) +); + +patches +( + cyclic + periodicX + ( + (1 2 6 5) + (0 4 7 3) + ) + + cyclic + periodicY + ( + (2 3 7 6) + (0 1 5 4) + ) + + cyclic + periodicZ + ( + (0 3 2 1) + (4 5 6 7) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary similarity index 90% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary index b3548de91cf4646aa6692d8e02914c5ed4755ff7..850c9baa1ec078697b17ec724c99578c6047e10d 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict similarity index 92% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict index f1052a4864fad271f58b2d6f62e0f3898d42c81d..76f7ed8a7ee4afac7f47fb4c97b4a42a01147053 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/controlDict +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/controlDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,7 +10,6 @@ FoamFile version 2.0; format ascii; class dictionary; - location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,5 +44,4 @@ runTimeModifiable yes; adjustTimeStep no; - // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..958e14c73370e57528f6fd38a15607b7ba3c2bcd --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/decomposeParDict @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 2; + +method simple; + +simpleCoeffs +{ + n (2 1 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 3 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes similarity index 76% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSchemes +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSchemes @@ -17,43 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution similarity index 91% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution index 2dd296045bbd9676b0bf078bc53d2dc5e4958365..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdEquilibrationDict +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/fvSolution @@ -11,11 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdEquilibrationDict; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -equilibrationTargetTemperature 300; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict new file mode 100644 index 0000000000000000000000000000000000000000..e044b8378542974b38127b812d5a4e04aa9e2ac3 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdEquilibrationDict @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object mdEquilibrationDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +equilibrationTargetTemperature 300.0; + +// ************************************************************************* // \ No newline at end of file diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..cb562f34a6c148531c9a243458edb24af24b5de7 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/mdInitialiseDict @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +liquid +{ + massDensity 1220; + temperature 300; + bulkVelocity (0.0 0.0 0.0); + latticeIds (Ar); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..190428f399ffe941ecd05be8492411c4497c5b6c --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeArgon/system/potentialDict @@ -0,0 +1,121 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +n| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( Ar ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither is an error) + +pair +{ + Ar-Ar + { + pairPotential maitlandSmith; + rCut 1.0e-9; + rMin 0.15e-9; + dr 5e-14; + maitlandSmithCoeffs + { + m 13.0; + gamma 7.5; + rm 0.3756e-9; + epsilon 1.990108438e-21; + } + energyScalingFunction doubleSigmoid; + doubleSigmoidCoeffs + { + shift1 0.9e-9; + scale1 0.3e11; + shift2 0.97e-9; + scale2 1.2e11; + } + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1.0e-9; + rMin 0.1e-9; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..2486f3c146ba4495cb003f1912db45ff57b5aa55 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/moleculeProperties @@ -0,0 +1,72 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +water +{ + siteIds (H H O M); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +water2 +{ + siteIds (H2 H2 O M2); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..b78ecf45c974246d6545e6265c8e459946d467bf --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/blockMeshDict @@ -0,0 +1,73 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 2.10840e-9; + +vertices +( + (-1 -1 -1) + (1 -1 -1) + (1 1 -1) + (-1 1 -1) + (-1 -1 1) + (1 -1 1) + (1 1 1) + (-1 1 1) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) liquid (12 12 11) simpleGrading (1 1 1) +); + +patches +( + cyclic + periodicX + ( + (1 2 6 5) + (0 4 7 3) + ) + + cyclic + periodicY + ( + (2 3 7 6) + (0 1 5 4) + ) + + cyclic + periodicZ + ( + (0 3 2 1) + (4 5 6 7) + ) +) + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary similarity index 67% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary index e9d933420b7298f5aa2fef9909433f031b113f5a..27cc5e87df98bf4826a1a86391e91fbf982a59f1 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -15,33 +15,28 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -4 +3 ( periodicX { type cyclic; - nFaces 288; - startFace 10710; + nFaces 264; + startFace 4344; featureCos 0.9; } - periodicZ + periodicY { type cyclic; - nFaces 1296; - startFace 10998; + nFaces 264; + startFace 4608; featureCos 0.9; } - outerBoundaryBottom - { - type wall; - nFaces 162; - startFace 12294; - } - outerBoundaryTop + periodicZ { - type wall; - nFaces 162; - startFace 12456; + type cyclic; + nFaces 288; + startFace 4872; + featureCos 0.9; } ) diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict similarity index 86% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict index 46436871638186b4ead04e658ceeadd2579b9a5f..51a42ecc0e828d90fd725f5c361eae36c95f5f15 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/controlDict +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/controlDict @@ -2,7 +2,7 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -10,7 +10,6 @@ FoamFile version 2.0; format ascii; class dictionary; - location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -21,13 +20,13 @@ startTime 0; stopAt endTime; -endTime 3e-11; +endTime 5e-12; -deltaT 1e-14; +deltaT 1e-15; writeControl runTime; -writeInterval 1e-12; +writeInterval 2e-13; purgeWrite 0; @@ -45,5 +44,4 @@ runTimeModifiable yes; adjustTimeStep no; - // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..e0302aafcc9b69d045a7b00b3a4a108a44973291 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/decomposeParDict @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 4; + +method simple; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 3 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes similarity index 76% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSchemes +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSchemes @@ -17,43 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution rename to tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution index dfef948901fc9407d740d27c3f58e12fc09f78c8..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/mdSolution +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/fvSolution @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdSolution; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict new file mode 100644 index 0000000000000000000000000000000000000000..de8cb745e1f62f9f76556059a8d34a750d5b808f --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdEquilibrationDict @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object mdEquilibrationDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +targetTemperature 298; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..ff1444ead5acf93663635513847686618cb704e5 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/mdInitialiseDict @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +liquid +{ + massDensity 980; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + water2 + water + water2 + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + (0 0.5 0.5) + (0.5 0 0.5) + (0.5 0.5 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..25b268e74c7e3e102b49eeaa23186dc47031e338 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCubeWater/system/potentialDict @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( water ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If a pair are not present here it is assumed that they do not interact. + +// Electrostatic pair interactions are not listed here - they are handled +// separately. + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither will throw an error) + +pair +{ + O-O + { + pairPotential lennardJones; + rCut 1.0e-9; + rMin 0.1e-9; + dr 1e-13; + lennardJonesCoeffs + { + sigma 3.154e-10; + epsilon 1.07690722e-21; + } + energyScalingFunction noScaling; + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1e-9; + rMin 2e-11; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean similarity index 57% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean rename to tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean index 11f901ce8e07f87b4c4e41b1be30311c5ecd5589..7ff7776cb12c793a7bed32339e31b6ded3897549 100755 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allclean +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allclean @@ -3,14 +3,8 @@ # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions -cd constrictedChannel - rm -rf 0 - rm -rf Ar-Ar Ar-Ne Ne-Ne - rm -rf constant/idList - cleanCase -cd .. - cd nanoNozzle + rm -rf constant/polyMesh/sets rm -rf processor[0-9] cleanCase cd .. diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun similarity index 60% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun rename to tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun index 640ecd9bdc14899a37fe41bf908956b6623fa5f3..c756b2ca7e7a3d0ac97842edb011c9f6891abc98 100755 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/Allrun +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/Allrun @@ -3,13 +3,7 @@ # Source tutorial run functions . $WM_PROJECT_DIR/bin/tools/RunFunctions -application="gnemdFoam" - -cd constrictedChannel - runApplication blockMesh - runApplication molConfig - runApplication $application -cd .. +application="mdFoam" cd nanoNozzle runApplication blockMesh @@ -17,7 +11,7 @@ cd nanoNozzle runApplication decomposePar hostname > system/machines - runParallel molConfig 4 system/machines + runParallel mdInitialise 4 system/machines runParallel $application 4 system/machines runApplication reconstructPar diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties new file mode 100644 index 0000000000000000000000000000000000000000..faf53865886ddd2133a0f6ad01f43d111d94c951 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/moleculeProperties @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object moleculeProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +water +{ + siteIds (H H O M); + pairPotentialSiteIds (O); + siteReferencePositions + ( + (7.56950327263661e-11 5.85882276618295e-11 0) + (-7.56950327263661e-11 5.85882276618295e-11 0) + (0 0 0) + (0 1.5e-11 0) + ); + siteMasses + ( + 1.67353255e-27 + 1.67353255e-27 + 2.6560176e-26 + 0 + ); + siteCharges + ( + 8.3313177324e-20 + 8.3313177324e-20 + 0 + -1.66626354648e-19 + ); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict similarity index 65% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict index 024f66a3838c1a7bd2348707c3fca7e080686015..bfd56736e27cc02fb354b8ce9de41ef67748dd03 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/blockMeshDict +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/blockMeshDict @@ -14,9 +14,9 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -convertToMeters 3e-9; +convertToMeters 3.2e-9; -vertices +vertices ( (0 0 0) (3.5 0 0) @@ -44,47 +44,19 @@ vertices (16 2.5 3.5) ); -blocks +blocks ( - hex (0 1 2 3 4 5 6 7) sectionA (16 15 15) simpleGrading (1 1 1) - hex (1 8 9 2 5 10 11 6) sectionA (16 15 15) simpleGrading (0.4 1 1) - hex (8 12 13 9 10 14 15 11) sectionB (16 15 15) simpleGrading (1 1 1) - hex (12 16 17 13 14 18 19 15) sectionC (11 15 15) simpleGrading (2.8 1 1) - hex (16 20 21 17 18 22 23 19) sectionC (16 15 15) simpleGrading (1 1 1) + hex (0 1 2 3 4 5 6 7) sectionA (20 16 16) simpleGrading (1 1 1) + hex (1 8 9 2 5 10 11 6) sectionA (20 16 16) simpleGrading (1 1 1) + hex (8 12 13 9 10 14 15 11) sectionB (29 16 16) simpleGrading (1 1 1) + hex (12 16 17 13 14 18 19 15) sectionC (17 16 16) simpleGrading (1 1 1) + hex (16 20 21 17 18 22 23 19) sectionC (20 16 16) simpleGrading (1 1 1) ); -edges -( - simpleSpline 12 16 - ( - (10.375 0.875 0.4) - (10.75 0.75 0) - (11.125 0.625 -0.4) - ) - - simpleSpline 14 18 - ( - (10.375 0.875 2.6) - (10.75 0.75 3) - (11.125 0.625 3.4) - ) - - simpleSpline 15 19 - ( - (10.375 2.125 2.6) - (10.75 2.25 3) - (11.125 2.375 3.4) - ) - - simpleSpline 13 17 - ( - (10.375 2.125 0.4) - (10.75 2.25 0) - (11.125 2.375 -0.4) - ) -); +edges +(); -patches +patches ( patch sectionAEnd @@ -92,12 +64,12 @@ patches (0 4 7 3) ) - patch + wall sectionCEnd ( (20 21 23 22) ) - + wall front ( @@ -107,7 +79,7 @@ patches (12 16 18 14) (16 20 22 18) ) - + wall back ( @@ -117,7 +89,7 @@ patches (13 15 19 17) (17 19 23 21) ) - + wall top ( @@ -127,7 +99,7 @@ patches (14 18 19 15) (18 22 23 19) ) - + wall bottom ( @@ -139,7 +111,7 @@ patches ) ); -mergePatchPairs +mergePatchPairs ( ); diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary similarity index 66% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary index a58d17ed7f51a0b1d98167dadad04ec7b6a21c8b..8f1b5f6505e47c52d85bd170a7fae0d85f55ec1c 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/constant/polyMesh/boundary +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/constant/polyMesh/boundary @@ -1,8 +1,8 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile @@ -20,38 +20,38 @@ FoamFile sectionAEnd { type patch; - nFaces 225; - startFace 48150; + nFaces 256; + startFace 77760; } sectionCEnd { - type patch; - nFaces 225; - startFace 48375; + type wall; + nFaces 256; + startFace 78016; } front { type wall; - nFaces 1125; - startFace 48600; + nFaces 1696; + startFace 78272; } back { type wall; - nFaces 1125; - startFace 49725; + nFaces 1696; + startFace 79968; } top { type wall; - nFaces 1125; - startFace 50850; + nFaces 1696; + startFace 81664; } bottom { type wall; - nFaces 1125; - startFace 51975; + nFaces 1696; + startFace 83360; } ) diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..8a3ba006163857eb4fafe09388c1ae873b0f23bf --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/controlDict @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 1e-10; + +deltaT 1e-15; + +writeControl runTime; + +writeInterval 2e-13; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 12; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + +adjustTimeStep no; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..a3946a745f2169cea62449bd32b9365bd539cd69 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/decomposeParDict @@ -0,0 +1,66 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +numberOfSubdomains 4; + +method metis; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (1 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + processorWeights + ( + 1 + 1 + 1 + 1 + ); +} + +manualCoeffs +{ + dataFile ""; +} + +distributed no; + +roots +( +); + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes similarity index 76% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes index f923afcfacf038c5cd521b7e67b1c11b4d535866..42fda7921ca0a70a5b1f415666f49d4d07befb7b 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSchemes +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSchemes @@ -17,43 +17,37 @@ FoamFile ddtSchemes { - default Euler; + default none; } gradSchemes { - default Gauss linear; - grad(p) Gauss linear; + default none; } divSchemes { default none; - div(phi,U) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; } interpolationSchemes { - default linear; - interpolate(HbyA) linear; + default none; } snGradSchemes { - default corrected; + default none; } fluxRequired { default no; - p ; } diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution rename to tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution index dfef948901fc9407d740d27c3f58e12fc09f78c8..1e39435250fcc6c21b5ca292d31d085533ce9716 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/mdSolution +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/fvSolution @@ -11,13 +11,12 @@ FoamFile format ascii; class dictionary; location "system"; - object mdSolution; + object fvSolution; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; - +solvers +{ +} // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict new file mode 100644 index 0000000000000000000000000000000000000000..de8cb745e1f62f9f76556059a8d34a750d5b808f --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdEquilibrationDict @@ -0,0 +1,19 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object mdEquilibrationDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +targetTemperature 298; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict new file mode 100644 index 0000000000000000000000000000000000000000..ac85160f5cb2e1cbc774f42df6b87eb70ccd320d --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/mdInitialiseDict @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.3 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object molConfigDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Euler angles, expressed in degrees as phi, theta, psi, see +// http://mathworld.wolfram.com/EulerAngles.html + +sectionA +{ + massDensity 980; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +sectionB +{ + massDensity 980; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +sectionC +{ + massDensity 980; + temperature 298; + bulkVelocity (0.0 0.0 0.0); + latticeIds + ( + water + ); + tetherSiteIds (); + latticePositions + ( + (0 0 0) + ); + anchor (0 0 0); + orientationAngles (0 0 0); + latticeCellShape (1 1 1); +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict new file mode 100644 index 0000000000000000000000000000000000000000..25b268e74c7e3e102b49eeaa23186dc47031e338 --- /dev/null +++ b/tutorials/discreteMethods/molecularDynamics/mdFoam/nanoNozzle/system/potentialDict @@ -0,0 +1,118 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object potentials; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Subdictionaries specifying types of intermolecular potential. +// Sub-sub dictionaries specify the potentials themselves. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Removal order + +// This is the order in which to remove overlapping pairs if more than one +// type of molecule is present. The most valuable molecule type is at the +// right hand end, the molecule that will be removed 1st is 1st on the list. +// Not all types need to be present, a molecule that is not present is +// automatically less valuable than any on the list. For molecules of the +// same type there is no control over which is removed. + +removalOrder ( water ); + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Potential Energy Limit + +// Maximum permissible pair energy allowed at startup. Used to remove +// overlapping molecules created during preprocessing. + +potentialEnergyLimit 1e-18; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Pair potentials + +// If a pair are not present here it is assumed that they do not interact. + +// Electrostatic pair interactions are not listed here - they are handled +// separately. + +// If there are r different type of molecules, and a pair force is required +// between all combinations, then there are C = r(r+1)/2 combinations, +// i.e. for r = {1,2,3,4}, C = {1,3,6,10} (sum of triangular numbers). + +// Pair potentials are specified by the combinaition of their ids, +// for MOLA and MOLB, "MOLA-MOLB" OR "MOLB-MOLA" is acceptable +// (strictly OR, both or neither will throw an error) + +pair +{ + O-O + { + pairPotential lennardJones; + rCut 1.0e-9; + rMin 0.1e-9; + dr 1e-13; + lennardJonesCoeffs + { + sigma 3.154e-10; + epsilon 1.07690722e-21; + } + energyScalingFunction noScaling; + writeTables yes; + } + + electrostatic + { + pairPotential dampedCoulomb; + rCut 1e-9; + rMin 2e-11; + dr 2e-12; + dampedCoulombCoeffs + { + alpha 2e9; + } + energyScalingFunction shiftedForce; + writeTables yes; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// Tethering Potentials + +tether +{ + O + { + tetherPotential restrainedHarmonicSpring; + restrainedHarmonicSpringCoeffs + { + springConstant 0.277; + rR 1.2e-9; + } + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// External Forces + +// Bulk external forces (namely gravity) will be specified as forces rather +// than potentials to allow their direction to be controlled. + +external +{ + gravity (0 0 0); +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/T.org @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U similarity index 59% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U index 46670343363af32a79fcf7bd788316556b9de7d7..0b6b191dab023e6aa4c9701188dd93252aeb7aa9 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/fvSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/U @@ -2,45 +2,41 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; - class dictionary; - location "system"; - object fvSolution; + class volVectorField; + object U; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -solvers +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField { - p + floor { - solver PCG; - preconditioner DIC; - tolerance 1e-06; - relTol 0; + type fixedValue; + value uniform (0 0 0); } - U + ceiling { - solver PBiCG; - preconditioner DILU; - tolerance 1e-05; - relTol 0; + type fixedValue; + value uniform (0 0 0); } -} -PISO -{ - nCorrectors 2; - nNonOrthogonalCorrectors 0; - pRefCell 0; - pRefValue 0; + fixedWalls + { + type fixedValue; + value uniform (0 0 0); + } } - // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat similarity index 59% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat index 46670343363af32a79fcf7bd788316556b9de7d7..3bcb9c03b13cf7d96e3456eabea33e5f6d0ee8e1 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/system/fvSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/alphat @@ -2,44 +2,40 @@ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 1.5 | -| \\ / A nd | Web: www.OpenFOAM.org | +| \\ / A nd | Web: http://www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; - class dictionary; - location "system"; - object fvSolution; + class volScalarField; + location "0"; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -solvers +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField { - p + floor { - solver PCG; - preconditioner DIC; - tolerance 1e-06; - relTol 0; + type alphatWallFunction; + value uniform 0; } - - U + ceiling { - solver PBiCG; - preconditioner DILU; - tolerance 1e-05; - relTol 0; + type alphatWallFunction; + value uniform 0; + } + fixedWalls + { + type alphatWallFunction; + value uniform 0; } -} - -PISO -{ - nCorrectors 2; - nNonOrthogonalCorrectors 0; - pRefCell 0; - pRefValue 0; } diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..892d69375d9d5eab2aa804a87ee6661bbc1a9f06 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old new file mode 100644 index 0000000000000000000000000000000000000000..23851291dc60d3b0df3be887acfbeb0bb5067ef8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/epsilon.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k new file mode 100644 index 0000000000000000000000000000000000000000..38c2a542ef4c0c57799adb46dbd114f24947f474 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old new file mode 100644 index 0000000000000000000000000000000000000000..4ec7f08960c175a6d955e2c1d3cfb98453524647 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/k.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type compressible::kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut similarity index 58% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut index 2b1855ea4634bda4d66c8129ce2d08d57a2fb0c9..a81ad6b59fd8d4b8617763e08058fbb36b3b8aef 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/decomposeParDict +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/nut @@ -1,7 +1,7 @@ /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: 1.5 | +| \\ / O peration | Version: dev | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ @@ -9,42 +9,34 @@ FoamFile { version 2.0; format ascii; - class dictionary; - location "system"; - object decomposeParDict; + class volScalarField; + location "0"; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -numberOfSubdomains 4; +dimensions [0 2 -1 0 0 0 0]; -method metis; +internalField uniform 0; -simpleCoeffs +boundaryField { - n ( 4 1 1 ); - delta 0.001; + floor + { + type nutWallFunction; + value uniform 0; + } + ceiling + { + type nutWallFunction; + value uniform 0; + } + fixedWalls + { + type nutWallFunction; + value uniform 0; + } } -hierarchicalCoeffs -{ - n ( 1 1 1 ); - delta 0.001; - order xyz; -} - -metisCoeffs -{ - processorWeights ( 1 1 1 1 ); -} - -manualCoeffs -{ - dataFile ""; -} - -distributed no; - -roots ( ); - // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p new file mode 100644 index 0000000000000000000000000000000000000000..2014ca6e8c05c4140f60fa97f5d77545a31b68c8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/0/p @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + ceiling + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + fixedWalls + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..83fcec83ecad6243fdfd74b8afb16acd55518f36 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +cp 0/T.org 0/T diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..92490b5b5ea392da192d42ec102f629c87c73e60 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/Allrun @@ -0,0 +1,10 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="buoyantBoussinesqPisoFoam" + +compileApplication ../../buoyantPisoFoam/hotRoom/setHotRoom +runApplication blockMesh +runApplication setHotRoom +runApplication $application diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/environmentalProperties similarity index 86% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/environmentalProperties index dfef948901fc9407d740d27c3f58e12fc09f78c8..a866ff549fd799e63d2d6946a66cf3da14d092bd 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/nanoNozzle/system/mdSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/environmentalProperties @@ -10,14 +10,12 @@ FoamFile version 2.0; format ascii; class dictionary; - location "system"; - object mdSolution; + location "constant"; + object environmentalProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -integrationMethod verletLeapfrog; - -potentialEnergyLimit 5.256e-20; +g g [ 0 1 -2 0 0 0 0 ] ( 0 -9.81 0 ); // ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict similarity index 72% rename from tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict index 187c2c7784d60dda7a64455a321799191e21c95e..fa2bb5c4c6e834caba8be30e1825ea1a45c22c92 100644 --- a/tutorials/discreteMethods/molecularDynamics/mdEquilibrationFoam/periodicCube/constant/polyMesh/blockMeshDict +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/blockMeshDict @@ -14,48 +14,47 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -convertToMeters 2.462491658e-9; +convertToMeters 1; -vertices +vertices ( - (-1 -1 -1) - (1 -1 -1) - (1 1 -1) - (-1 1 -1) - (-1 -1 1) - (1 -1 1) - (1 1 1) - (-1 1 1) + (0 0 0) + (10 0 0) + (10 5 0) + (0 5 0) + (0 0 10) + (10 0 10) + (10 5 10) + (0 5 10) ); -blocks +blocks ( - hex (0 1 2 3 4 5 6 7) liquid (12 12 12) simpleGrading (1 1 1) + hex (0 1 2 3 4 5 6 7) (20 10 20) simpleGrading (1 1 1) ); -patches +edges ( - cyclic - periodicX +); + +patches +( + wall floor ( - (1 2 6 5) - (0 4 7 3) + (1 5 4 0) ) - - cyclic - periodicY + wall ceiling ( - (2 3 7 6) - (0 1 5 4) + (3 7 6 2) ) - - cyclic - periodicZ + wall fixedWalls ( + (0 4 7 3) + (2 6 5 1) (0 3 2 1) (4 5 6 7) ) -) +); mergePatchPairs ( diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..0d4d0e498dae524c835cc1addc9707eb5af47fb3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + floor + { + type wall; + nFaces 400; + startFace 11200; + } + ceiling + { + type wall; + nFaces 400; + startFace 11600; + } + fixedWalls + { + type wall; + nFaces 800; + startFace 12000; + } +) + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict similarity index 89% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict index c43b52a4489940816c201cd8c03c5ca1f7694a2e..26a1219ee04433266c5a0540f5ecf239fc0d0f93 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/controlDict +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/controlDict @@ -21,19 +21,19 @@ startTime 0; stopAt endTime; -endTime 8e-11; +endTime 1000; -deltaT 1e-14; +deltaT 1; -writeControl runTime; +writeControl timeStep; -writeInterval 2e-12; +writeInterval 100; purgeWrite 0; writeFormat ascii; -writePrecision 12; +writePrecision 6; writeCompression uncompressed; @@ -45,5 +45,6 @@ runTimeModifiable yes; adjustTimeStep no; +maxCo 0.5; // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..6be8f0129f6c5ae27dae2d20c5e0cd28fcf26f12 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSchemes @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution similarity index 61% rename from tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution rename to tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution index 46670343363af32a79fcf7bd788316556b9de7d7..7afa2f50aa9b1dc663a24bada8c0971be911c656 100644 --- a/tutorials/discreteMethods/molecularDynamics/gnemdFoam/constrictedChannel/system/fvSolution +++ b/tutorials/heatTransfer/buoyantBoussinesqPisoFoam/hotRoom/system/fvSolution @@ -21,7 +21,15 @@ solvers { solver PCG; preconditioner DIC; - tolerance 1e-06; + tolerance 1e-07; + relTol 0.1; + } + + pFinal + { + solver PCG; + preconditioner DIC; + tolerance 1e-07; relTol 0; } @@ -32,10 +40,43 @@ solvers tolerance 1e-05; relTol 0; } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + } } PISO { + momentumPredictor yes; nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org new file mode 100644 index 0000000000000000000000000000000000000000..a5a03f6a2e3944867bd11d1adb15e3f468569dc6 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/T.org @@ -0,0 +1,443 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 300; + +boundaryField +{ + floor + { + type fixedValue; + value nonuniform List<scalar> +400 +( +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +600 +600 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +300 +) +; + } + ceiling + { + type fixedValue; + value uniform 300; + } + fixedWalls + { + type zeroGradient; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U new file mode 100644 index 0000000000000000000000000000000000000000..0b6b191dab023e6aa4c9701188dd93252aeb7aa9 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/U @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + floor + { + type fixedValue; + value uniform (0 0 0); + } + + ceiling + { + type fixedValue; + value uniform (0 0 0); + } + + fixedWalls + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..3bcb9c03b13cf7d96e3456eabea33e5f6d0ee8e1 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/alphat @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type alphatWallFunction; + value uniform 0; + } + ceiling + { + type alphatWallFunction; + value uniform 0; + } + fixedWalls + { + type alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..892d69375d9d5eab2aa804a87ee6661bbc1a9f06 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old new file mode 100644 index 0000000000000000000000000000000000000000..23851291dc60d3b0df3be887acfbeb0bb5067ef8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/epsilon.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + floor + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + ceiling + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } + fixedWalls + { + type compressible::epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k new file mode 100644 index 0000000000000000000000000000000000000000..38c2a542ef4c0c57799adb46dbd114f24947f474 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old new file mode 100644 index 0000000000000000000000000000000000000000..4ec7f08960c175a6d955e2c1d3cfb98453524647 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/k.old @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + floor + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + ceiling + { + type compressible::kQRWallFunction; + value uniform 0.1; + } + fixedWalls + { + type compressible::kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..a81ad6b59fd8d4b8617763e08058fbb36b3b8aef --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/nut @@ -0,0 +1,42 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type nutWallFunction; + value uniform 0; + } + ceiling + { + type nutWallFunction; + value uniform 0; + } + fixedWalls + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p new file mode 100644 index 0000000000000000000000000000000000000000..2014ca6e8c05c4140f60fa97f5d77545a31b68c8 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/0/p @@ -0,0 +1,45 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + floor + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + ceiling + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + fixedWalls + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean new file mode 100755 index 0000000000000000000000000000000000000000..83fcec83ecad6243fdfd74b8afb16acd55518f36 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allclean @@ -0,0 +1,7 @@ +#!/bin/sh + +# Source tutorial clean functions +. $WM_PROJECT_DIR/bin/tools/CleanFunctions + +cleanCase +cp 0/T.org 0/T diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..628624c70292d70d593effaa1a4e9fc9e2281550 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/Allrun @@ -0,0 +1,10 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="buoyantBoussinesqSimpleFoam" + +compileApplication ../../buoyantPisoFoam/hotRoom/setHotRoom +runApplication blockMesh +runApplication setHotRoom +runApplication $application diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..a866ff549fd799e63d2d6946a66cf3da14d092bd --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/environmentalProperties @@ -0,0 +1,21 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [ 0 1 -2 0 0 0 0 ] ( 0 -9.81 0 ); + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..fa2bb5c4c6e834caba8be30e1825ea1a45c22c92 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/blockMeshDict @@ -0,0 +1,63 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + object blockMeshDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +convertToMeters 1; + +vertices +( + (0 0 0) + (10 0 0) + (10 5 0) + (0 5 0) + (0 0 10) + (10 0 10) + (10 5 10) + (0 5 10) +); + +blocks +( + hex (0 1 2 3 4 5 6 7) (20 10 20) simpleGrading (1 1 1) +); + +edges +( +); + +patches +( + wall floor + ( + (1 5 4 0) + ) + wall ceiling + ( + (3 7 6 2) + ) + wall fixedWalls + ( + (0 4 7 3) + (2 6 5 1) + (0 3 2 1) + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..0d4d0e498dae524c835cc1addc9707eb5af47fb3 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/polyMesh/boundary @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +3 +( + floor + { + type wall; + nFaces 400; + startFace 11200; + } + ceiling + { + type wall; + nFaces 400; + startFace 11600; + } + fixedWalls + { + type wall; + nFaces 800; + startFace 12000; + } +) + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..bfc52cf914e6d70563729bb9790dda8a20daaa70 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/controlDict @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object controlDict; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +startFrom latestTime; + +startTime 0; + +stopAt endTime; + +endTime 1000; + +deltaT 1; + +writeControl timeStep; + +writeInterval 100; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..b54bb8631600a594830b214816d8a858bcf83a02 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes @@ -0,0 +1,68 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSchemes; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default steadyState; +} + +gradSchemes +{ + default Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p ; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..429a10a7fdef11317fd88716d83302a85e16d099 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSolution @@ -0,0 +1,88 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "system"; + object fvSolution; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0.01; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } +} + +SIMPLE +{ + nNonOrthogonalCorrectors 0; + pRefCell 0; + pRefValue 0; +} + +relaxationFactors +{ + rho 1; + p 0.7; + U 0.2; + T 0.7; + k 0.7; + epsilon 0.7; + R 0.7; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict index cb2e7470f67597540554a58b19942872bab68d34..26a1219ee04433266c5a0540f5ecf239fc0d0f93 100644 --- a/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict +++ b/tutorials/heatTransfer/buoyantPisoFoam/hotRoom/system/controlDict @@ -21,9 +21,9 @@ startTime 0; stopAt endTime; -endTime 400; +endTime 1000; -deltaT 0.25; +deltaT 1; writeControl timeStep; diff --git a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun index 68d74e3f344237944e77206bc85e3c7df36d36e6..8378f1f44bd4f26fb3c1d54117242f35a5b0cf5b 100755 --- a/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun +++ b/tutorials/lagrangian/porousExplicitSourceReactingParcelFoam/filter/Allrun @@ -1,24 +1,23 @@ #!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +application="porousExplicitSourceReactingParcelFoam" + # create mesh -blockMesh >& log.blockMesh +runApplication blockMesh -# create sets - 1 +# create sets setSet -batch system/sets.setSet >& log.setSet1 +# convert sets to zones +setsToZones -noFlipMap >& log.setsToZones + # create the first cyclic - lhs of porous zone createBaffles cycLeft cycLeft -overwrite >& log.createBaffles1 -# create sets - 2 (ordering changed after createBaffles) -setSet -batch system/sets.setSet >& log.setSet2 - # create the second cyclic - rhs of porous zone createBaffles cycRight cycRight -overwrite >& log.createBaffles2 -# create sets - 3 (ordering changed after createBaffles) -setSet -batch system/sets.setSet >& log.setSet3 - -# convert sets to zones -setsToZones -noFlipMap >& log.setsToZones - - +runApplication $application diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement new file mode 100644 index 0000000000000000000000000000000000000000..5ffe633e920154cef1f96201e351f496c7a5d85b --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/0/pointDisplacement @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root "/home/hunt2/mattijs/OpenFOAM/mattijs-1.4/run/testLoop1.4/moveMesh"; + case "cone"; + instance "0"; + local ""; + + class pointVectorField; + object pointMotionU; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 0 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + maxZ + { + type fixedValue; + value uniform (0 0 0); + } + + minZ + { + type surfaceDisplacement; + value uniform (0 0 0); + + // Clip displacement to surface by max deltaT*velocity. + velocity (10 10 10); + + geometry + { + AcrossRiver.stl + { + type triSurfaceMesh; + } + }; + + // Find projection with surface: + // fixedNormal : intersections along prespecified direction + // pointNormal : intersections along current pointNormal of patch + // nearest : nearest point on surface + // Other + projectMode fixedNormal; + + // if fixedNormal : normal + projectDirection (0 0 1); + + //- -1 or component to knock out before doing projection + wedgePlane -1; + + //- Points that should remain fixed + //frozenPointsZone fixedPointsZone; + } + +// minZ +// { +// type surfaceSlipDisplacement; +// geometry +// { +// hellskull.stl +// { +// type triSurfaceMesh; +// } +// }; +// +// followMode fixedNormal; +// +// projectDirection (0 0 1); +// +// //- -1 or component to knock out before doing projection +// wedgePlane -1; +// +// //- Points that should remain fixed +// //frozenPointsZone fixedPointsZone; +// } + + maxX + { + type slip; + } + + minX + { + type slip; + } + + minY + { + type slip; + } + + maxY + { + type slip; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..65894a796caaf1962610c6b42de10f9558625237 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/dynamicMeshDict @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object motionProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dynamicFvMesh dynamicMotionSolverFvMesh; + +motionSolverLibs ("libfvMotionSolvers.so"); + +solver displacementSBRStress; //displacementLaplacian; //displacementSBRStress; +diffusivity quadratic quadratic inverseDistance 1(minZ); + +//solver velocityComponentLaplacian z; +//diffusivity uniform; +//diffusivity directional (1 200 0); +// diffusivity motionDirectional (1 1000 0); +// diffusivity file motionDiffusivity; +diffusivity quadratic inverseDistance 1(minZ); +// diffusivity exponential 2000 inverseDistance 1(movingWall); + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict new file mode 100644 index 0000000000000000000000000000000000000000..9f348cb6e7ca3be15559a5b0b8fc75040342c787 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/blockMeshDict @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.0 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object blockMeshDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +convertToMeters 1; + +vertices +( + ( 659531 4.7513e+06 1028) + ( 659531 4.7513e+06 2100) + ( 662381 4.7513e+06 2100) + ( 662381 4.7513e+06 1028) + ( 659531 4.75454e+06 1028) + ( 659531 4.75454e+06 2100) + ( 662381 4.75454e+06 2100) + ( 662381 4.75454e+06 1028) +); +blocks +( + hex (0 1 2 3 4 5 6 7) (20 60 60) simpleGrading (10.0 1 1) +); + + +edges +( +); + +patches +( + wall maxX + ( + (3 7 6 2) + ) + wall minZ + ( + (0 4 7 3) + ) + wall maxZ + ( + (2 6 5 1) + ) + wall minX + ( + (1 5 4 0) + ) + wall minY + ( + (0 3 2 1) + ) + wall maxY + ( + (4 5 6 7) + ) +); + +mergePatchPairs +( +); + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..9afeb87c10f1682e87741c684a769070dc28dddb --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/polyMesh/boundary @@ -0,0 +1,58 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class polyBoundaryMesh; + location "constant/polyMesh"; + object boundary; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +6 +( + maxX + { + type wall; + nFaces 1200; + startFace 210000; + } + minZ + { + type wall; + nFaces 3600; + startFace 211200; + } + maxZ + { + type wall; + nFaces 3600; + startFace 214800; + } + minX + { + type wall; + nFaces 1200; + startFace 218400; + } + minY + { + type wall; + nFaces 1200; + startFace 219600; + } + maxY + { + type wall; + nFaces 1200; + startFace 220800; + } +) + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..7aed29e935555a12f3b45025d985ca1888dea38a --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/transportProperties @@ -0,0 +1,28 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +nu nu [0 2 -1 0 0 0 0] 0.01; + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG new file mode 100644 index 0000000000000000000000000000000000000000..259c021d0b422dd5846c9d8c365afe4ca74682b9 Binary files /dev/null and b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/ACROSSCYN.JPG differ diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ new file mode 100644 index 0000000000000000000000000000000000000000..9a23da569b73ee8ecccc63d23ff7ace9a1939c84 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossCyn.XYZ @@ -0,0 +1,10573 @@ + 659501 4751301 955 + 659501 4751331 957 + 659501 4751361 960 + 659501 4751391 963 + 659501 4751421 968 + 659501 4751451 973 + 659501 4751481 977 + 659501 4751511 982 + 659501 4751541 987 + 659501 4751571 991 + 659501 4751601 992 + 659501 4751631 992 + 659501 4751661 993 + 659501 4751691 993 + 659501 4751721 993 + 659501 4751751 993 + 659501 4751781 993 + 659501 4751811 992 + 659501 4751841 991 + 659501 4751871 989 + 659501 4751901 987 + 659501 4751931 985 + 659501 4751961 984 + 659501 4751991 981 + 659501 4752021 979 + 659501 4752051 978 + 659501 4752081 976 + 659501 4752111 964 + 659501 4752141 947 + 659501 4752171 928 + 659501 4752201 909 + 659501 4752231 896 + 659501 4752261 889 + 659501 4752291 883 + 659501 4752321 878 + 659501 4752351 875 + 659501 4752381 872 + 659501 4752411 870 + 659501 4752441 869 + 659501 4752471 868 + 659501 4752501 867 + 659501 4752531 866 + 659501 4752561 866 + 659501 4752591 865 + 659501 4752621 864 + 659501 4752651 863 + 659501 4752681 863 + 659501 4752711 862 + 659501 4752741 862 + 659501 4752771 862 + 659501 4752801 861 + 659501 4752831 860 + 659501 4752861 858 + 659501 4752891 856 + 659501 4752921 855 + 659501 4752951 854 + 659501 4752981 854 + 659501 4753011 853 + 659501 4753041 851 + 659501 4753071 851 + 659501 4753101 850 + 659501 4753131 850 + 659501 4753161 849 + 659501 4753191 847 + 659501 4753221 842 + 659501 4753251 825 + 659501 4753281 809 + 659501 4753311 809 + 659501 4753341 809 + 659501 4753371 809 + 659501 4753401 809 + 659501 4753431 809 + 659501 4753461 809 + 659501 4753491 827 + 659501 4753521 845 + 659501 4753551 847 + 659501 4753581 848 + 659501 4753611 848 + 659501 4753641 848 + 659501 4753671 849 + 659501 4753701 850 + 659501 4753731 850 + 659501 4753761 851 + 659501 4753791 852 + 659501 4753821 853 + 659501 4753851 863 + 659501 4753881 875 + 659501 4753911 878 + 659501 4753941 879 + 659501 4753971 881 + 659501 4754001 882 + 659501 4754031 887 + 659501 4754061 898 + 659501 4754091 917 + 659501 4754121 938 + 659501 4754151 953 + 659501 4754181 953 + 659501 4754211 953 + 659501 4754241 953 + 659501 4754271 953 + 659501 4754301 953 + 659501 4754331 955 + 659501 4754361 954 + 659501 4754391 954 + 659501 4754421 953 + 659501 4754451 953 + 659501 4754481 953 + 659501 4754511 953 + 659501 4754541 953 + 659531 4751301 955 + 659531 4751331 958 + 659531 4751361 961 + 659531 4751391 966 + 659531 4751421 969 + 659531 4751451 973 + 659531 4751481 976 + 659531 4751511 981 + 659531 4751541 986 + 659531 4751571 991 + 659531 4751601 992 + 659531 4751631 992 + 659531 4751661 994 + 659531 4751691 994 + 659531 4751721 994 + 659531 4751751 994 + 659531 4751781 994 + 659531 4751811 993 + 659531 4751841 991 + 659531 4751871 990 + 659531 4751901 987 + 659531 4751931 986 + 659531 4751961 984 + 659531 4751991 982 + 659531 4752021 981 + 659531 4752051 979 + 659531 4752081 976 + 659531 4752111 962 + 659531 4752141 944 + 659531 4752171 928 + 659531 4752201 911 + 659531 4752231 897 + 659531 4752261 888 + 659531 4752291 882 + 659531 4752321 877 + 659531 4752351 875 + 659531 4752381 872 + 659531 4752411 870 + 659531 4752441 869 + 659531 4752471 868 + 659531 4752501 867 + 659531 4752531 866 + 659531 4752561 865 + 659531 4752591 864 + 659531 4752621 863 + 659531 4752651 863 + 659531 4752681 862 + 659531 4752711 861 + 659531 4752741 861 + 659531 4752771 861 + 659531 4752801 860 + 659531 4752831 859 + 659531 4752861 858 + 659531 4752891 856 + 659531 4752921 855 + 659531 4752951 854 + 659531 4752981 853 + 659531 4753011 852 + 659531 4753041 852 + 659531 4753071 852 + 659531 4753101 851 + 659531 4753131 850 + 659531 4753161 849 + 659531 4753191 847 + 659531 4753221 835 + 659531 4753251 809 + 659531 4753281 809 + 659531 4753311 809 + 659531 4753341 809 + 659531 4753371 809 + 659531 4753401 809 + 659531 4753431 809 + 659531 4753461 809 + 659531 4753491 833 + 659531 4753521 850 + 659531 4753551 850 + 659531 4753581 849 + 659531 4753611 849 + 659531 4753641 848 + 659531 4753671 849 + 659531 4753701 849 + 659531 4753731 850 + 659531 4753761 851 + 659531 4753791 852 + 659531 4753821 853 + 659531 4753851 865 + 659531 4753881 878 + 659531 4753911 883 + 659531 4753941 881 + 659531 4753971 883 + 659531 4754001 884 + 659531 4754031 890 + 659531 4754061 896 + 659531 4754091 913 + 659531 4754121 934 + 659531 4754151 953 + 659531 4754181 953 + 659531 4754211 953 + 659531 4754241 953 + 659531 4754271 954 + 659531 4754301 955 + 659531 4754331 953 + 659531 4754361 954 + 659531 4754391 954 + 659531 4754421 954 + 659531 4754451 953 + 659531 4754481 953 + 659531 4754511 953 + 659531 4754541 953 + 659561 4751301 956 + 659561 4751331 959 + 659561 4751361 962 + 659561 4751391 967 + 659561 4751421 970 + 659561 4751451 973 + 659561 4751481 976 + 659561 4751511 981 + 659561 4751541 986 + 659561 4751571 991 + 659561 4751601 992 + 659561 4751631 993 + 659561 4751661 994 + 659561 4751691 995 + 659561 4751721 995 + 659561 4751751 996 + 659561 4751781 995 + 659561 4751811 994 + 659561 4751841 993 + 659561 4751871 991 + 659561 4751901 991 + 659561 4751931 989 + 659561 4751961 986 + 659561 4751991 984 + 659561 4752021 982 + 659561 4752051 979 + 659561 4752081 974 + 659561 4752111 959 + 659561 4752141 942 + 659561 4752171 926 + 659561 4752201 911 + 659561 4752231 897 + 659561 4752261 887 + 659561 4752291 882 + 659561 4752321 877 + 659561 4752351 875 + 659561 4752381 872 + 659561 4752411 870 + 659561 4752441 868 + 659561 4752471 868 + 659561 4752501 867 + 659561 4752531 866 + 659561 4752561 865 + 659561 4752591 864 + 659561 4752621 863 + 659561 4752651 862 + 659561 4752681 862 + 659561 4752711 861 + 659561 4752741 860 + 659561 4752771 860 + 659561 4752801 859 + 659561 4752831 859 + 659561 4752861 857 + 659561 4752891 856 + 659561 4752921 855 + 659561 4752951 854 + 659561 4752981 853 + 659561 4753011 852 + 659561 4753041 852 + 659561 4753071 853 + 659561 4753101 853 + 659561 4753131 852 + 659561 4753161 850 + 659561 4753191 847 + 659561 4753221 831 + 659561 4753251 809 + 659561 4753281 809 + 659561 4753311 809 + 659561 4753341 809 + 659561 4753371 809 + 659561 4753401 809 + 659561 4753431 809 + 659561 4753461 825 + 659561 4753491 841 + 659561 4753521 855 + 659561 4753551 852 + 659561 4753581 848 + 659561 4753611 848 + 659561 4753641 848 + 659561 4753671 848 + 659561 4753701 849 + 659561 4753731 850 + 659561 4753761 851 + 659561 4753791 852 + 659561 4753821 854 + 659561 4753851 865 + 659561 4753881 878 + 659561 4753911 884 + 659561 4753941 881 + 659561 4753971 885 + 659561 4754001 888 + 659561 4754031 889 + 659561 4754061 894 + 659561 4754091 911 + 659561 4754121 931 + 659561 4754151 953 + 659561 4754181 953 + 659561 4754211 953 + 659561 4754241 953 + 659561 4754271 954 + 659561 4754301 955 + 659561 4754331 954 + 659561 4754361 955 + 659561 4754391 954 + 659561 4754421 954 + 659561 4754451 953 + 659561 4754481 953 + 659561 4754511 953 + 659561 4754541 953 + 659591 4751301 958 + 659591 4751331 959 + 659591 4751361 963 + 659591 4751391 967 + 659591 4751421 970 + 659591 4751451 974 + 659591 4751481 977 + 659591 4751511 982 + 659591 4751541 987 + 659591 4751571 991 + 659591 4751601 993 + 659591 4751631 995 + 659591 4751661 996 + 659591 4751691 997 + 659591 4751721 997 + 659591 4751751 997 + 659591 4751781 997 + 659591 4751811 996 + 659591 4751841 994 + 659591 4751871 993 + 659591 4751901 992 + 659591 4751931 990 + 659591 4751961 988 + 659591 4751991 986 + 659591 4752021 984 + 659591 4752051 980 + 659591 4752081 970 + 659591 4752111 957 + 659591 4752141 941 + 659591 4752171 925 + 659591 4752201 909 + 659591 4752231 893 + 659591 4752261 887 + 659591 4752291 882 + 659591 4752321 878 + 659591 4752351 875 + 659591 4752381 872 + 659591 4752411 869 + 659591 4752441 868 + 659591 4752471 868 + 659591 4752501 867 + 659591 4752531 866 + 659591 4752561 865 + 659591 4752591 864 + 659591 4752621 863 + 659591 4752651 862 + 659591 4752681 861 + 659591 4752711 861 + 659591 4752741 860 + 659591 4752771 859 + 659591 4752801 859 + 659591 4752831 857 + 659591 4752861 856 + 659591 4752891 855 + 659591 4752921 854 + 659591 4752951 853 + 659591 4752981 852 + 659591 4753011 852 + 659591 4753041 853 + 659591 4753071 854 + 659591 4753101 854 + 659591 4753131 854 + 659591 4753161 853 + 659591 4753191 844 + 659591 4753221 826 + 659591 4753251 809 + 659591 4753281 809 + 659591 4753311 809 + 659591 4753341 809 + 659591 4753371 809 + 659591 4753401 809 + 659591 4753431 815 + 659591 4753461 832 + 659591 4753491 848 + 659591 4753521 855 + 659591 4753551 852 + 659591 4753581 848 + 659591 4753611 848 + 659591 4753641 848 + 659591 4753671 848 + 659591 4753701 849 + 659591 4753731 850 + 659591 4753761 851 + 659591 4753791 852 + 659591 4753821 854 + 659591 4753851 864 + 659591 4753881 876 + 659591 4753911 879 + 659591 4753941 881 + 659591 4753971 885 + 659591 4754001 891 + 659591 4754031 892 + 659591 4754061 891 + 659591 4754091 909 + 659591 4754121 930 + 659591 4754151 953 + 659591 4754181 953 + 659591 4754211 953 + 659591 4754241 953 + 659591 4754271 954 + 659591 4754301 955 + 659591 4754331 955 + 659591 4754361 954 + 659591 4754391 954 + 659591 4754421 954 + 659591 4754451 954 + 659591 4754481 954 + 659591 4754511 953 + 659591 4754541 953 + 659621 4751301 961 + 659621 4751331 962 + 659621 4751361 965 + 659621 4751391 968 + 659621 4751421 971 + 659621 4751451 974 + 659621 4751481 978 + 659621 4751511 982 + 659621 4751541 987 + 659621 4751571 991 + 659621 4751601 994 + 659621 4751631 997 + 659621 4751661 998 + 659621 4751691 998 + 659621 4751721 997 + 659621 4751751 998 + 659621 4751781 998 + 659621 4751811 997 + 659621 4751841 995 + 659621 4751871 994 + 659621 4751901 993 + 659621 4751931 991 + 659621 4751961 989 + 659621 4751991 986 + 659621 4752021 984 + 659621 4752051 978 + 659621 4752081 966 + 659621 4752111 950 + 659621 4752141 937 + 659621 4752171 915 + 659621 4752201 906 + 659621 4752231 895 + 659621 4752261 888 + 659621 4752291 882 + 659621 4752321 878 + 659621 4752351 874 + 659621 4752381 871 + 659621 4752411 869 + 659621 4752441 868 + 659621 4752471 867 + 659621 4752501 867 + 659621 4752531 866 + 659621 4752561 865 + 659621 4752591 863 + 659621 4752621 862 + 659621 4752651 861 + 659621 4752681 861 + 659621 4752711 860 + 659621 4752741 860 + 659621 4752771 859 + 659621 4752801 858 + 659621 4752831 857 + 659621 4752861 856 + 659621 4752891 855 + 659621 4752921 854 + 659621 4752951 853 + 659621 4752981 852 + 659621 4753011 853 + 659621 4753041 854 + 659621 4753071 854 + 659621 4753101 855 + 659621 4753131 854 + 659621 4753161 852 + 659621 4753191 836 + 659621 4753221 809 + 659621 4753251 809 + 659621 4753281 809 + 659621 4753311 809 + 659621 4753341 809 + 659621 4753371 809 + 659621 4753401 809 + 659621 4753431 822 + 659621 4753461 839 + 659621 4753491 853 + 659621 4753521 855 + 659621 4753551 852 + 659621 4753581 848 + 659621 4753611 848 + 659621 4753641 848 + 659621 4753671 848 + 659621 4753701 849 + 659621 4753731 850 + 659621 4753761 851 + 659621 4753791 852 + 659621 4753821 853 + 659621 4753851 862 + 659621 4753881 872 + 659621 4753911 878 + 659621 4753941 881 + 659621 4753971 884 + 659621 4754001 891 + 659621 4754031 894 + 659621 4754061 891 + 659621 4754091 908 + 659621 4754121 930 + 659621 4754151 953 + 659621 4754181 953 + 659621 4754211 953 + 659621 4754241 953 + 659621 4754271 953 + 659621 4754301 954 + 659621 4754331 955 + 659621 4754361 954 + 659621 4754391 954 + 659621 4754421 954 + 659621 4754451 954 + 659621 4754481 954 + 659621 4754511 953 + 659621 4754541 953 + 659651 4751301 961 + 659651 4751331 963 + 659651 4751361 967 + 659651 4751391 969 + 659651 4751421 972 + 659651 4751451 975 + 659651 4751481 978 + 659651 4751511 982 + 659651 4751541 987 + 659651 4751571 991 + 659651 4751601 994 + 659651 4751631 998 + 659651 4751661 999 + 659651 4751691 999 + 659651 4751721 998 + 659651 4751751 999 + 659651 4751781 999 + 659651 4751811 998 + 659651 4751841 996 + 659651 4751871 995 + 659651 4751901 993 + 659651 4751931 992 + 659651 4751961 989 + 659651 4751991 986 + 659651 4752021 981 + 659651 4752051 971 + 659651 4752081 957 + 659651 4752111 945 + 659651 4752141 931 + 659651 4752171 914 + 659651 4752201 900 + 659651 4752231 894 + 659651 4752261 888 + 659651 4752291 882 + 659651 4752321 878 + 659651 4752351 874 + 659651 4752381 871 + 659651 4752411 869 + 659651 4752441 868 + 659651 4752471 867 + 659651 4752501 866 + 659651 4752531 866 + 659651 4752561 865 + 659651 4752591 864 + 659651 4752621 862 + 659651 4752651 861 + 659651 4752681 860 + 659651 4752711 860 + 659651 4752741 859 + 659651 4752771 859 + 659651 4752801 858 + 659651 4752831 857 + 659651 4752861 856 + 659651 4752891 855 + 659651 4752921 854 + 659651 4752951 853 + 659651 4752981 853 + 659651 4753011 853 + 659651 4753041 854 + 659651 4753071 854 + 659651 4753101 854 + 659651 4753131 854 + 659651 4753161 843 + 659651 4753191 827 + 659651 4753221 809 + 659651 4753251 809 + 659651 4753281 809 + 659651 4753311 809 + 659651 4753341 809 + 659651 4753371 809 + 659651 4753401 816 + 659651 4753431 831 + 659651 4753461 848 + 659651 4753491 857 + 659651 4753521 855 + 659651 4753551 852 + 659651 4753581 848 + 659651 4753611 848 + 659651 4753641 848 + 659651 4753671 849 + 659651 4753701 850 + 659651 4753731 850 + 659651 4753761 850 + 659651 4753791 851 + 659651 4753821 852 + 659651 4753851 857 + 659651 4753881 867 + 659651 4753911 876 + 659651 4753941 880 + 659651 4753971 885 + 659651 4754001 892 + 659651 4754031 894 + 659651 4754061 897 + 659651 4754091 907 + 659651 4754121 933 + 659651 4754151 953 + 659651 4754181 953 + 659651 4754211 953 + 659651 4754241 953 + 659651 4754271 953 + 659651 4754301 954 + 659651 4754331 955 + 659651 4754361 955 + 659651 4754391 954 + 659651 4754421 954 + 659651 4754451 954 + 659651 4754481 954 + 659651 4754511 954 + 659651 4754541 954 + 659681 4751301 960 + 659681 4751331 963 + 659681 4751361 968 + 659681 4751391 970 + 659681 4751421 972 + 659681 4751451 975 + 659681 4751481 978 + 659681 4751511 982 + 659681 4751541 987 + 659681 4751571 991 + 659681 4751601 995 + 659681 4751631 998 + 659681 4751661 1000 + 659681 4751691 1000 + 659681 4751721 999 + 659681 4751751 1000 + 659681 4751781 999 + 659681 4751811 998 + 659681 4751841 997 + 659681 4751871 995 + 659681 4751901 994 + 659681 4751931 992 + 659681 4751961 989 + 659681 4751991 986 + 659681 4752021 983 + 659681 4752051 965 + 659681 4752081 945 + 659681 4752111 934 + 659681 4752141 918 + 659681 4752171 910 + 659681 4752201 900 + 659681 4752231 892 + 659681 4752261 887 + 659681 4752291 882 + 659681 4752321 878 + 659681 4752351 874 + 659681 4752381 871 + 659681 4752411 869 + 659681 4752441 868 + 659681 4752471 867 + 659681 4752501 867 + 659681 4752531 866 + 659681 4752561 865 + 659681 4752591 863 + 659681 4752621 862 + 659681 4752651 861 + 659681 4752681 861 + 659681 4752711 860 + 659681 4752741 859 + 659681 4752771 859 + 659681 4752801 858 + 659681 4752831 857 + 659681 4752861 856 + 659681 4752891 855 + 659681 4752921 854 + 659681 4752951 853 + 659681 4752981 853 + 659681 4753011 853 + 659681 4753041 854 + 659681 4753071 854 + 659681 4753101 854 + 659681 4753131 847 + 659681 4753161 831 + 659681 4753191 809 + 659681 4753221 809 + 659681 4753251 809 + 659681 4753281 809 + 659681 4753311 809 + 659681 4753341 809 + 659681 4753371 809 + 659681 4753401 822 + 659681 4753431 837 + 659681 4753461 852 + 659681 4753491 856 + 659681 4753521 855 + 659681 4753551 851 + 659681 4753581 848 + 659681 4753611 848 + 659681 4753641 850 + 659681 4753671 852 + 659681 4753701 851 + 659681 4753731 851 + 659681 4753761 850 + 659681 4753791 851 + 659681 4753821 852 + 659681 4753851 853 + 659681 4753881 863 + 659681 4753911 872 + 659681 4753941 879 + 659681 4753971 885 + 659681 4754001 899 + 659681 4754031 895 + 659681 4754061 898 + 659681 4754091 907 + 659681 4754121 936 + 659681 4754151 953 + 659681 4754181 953 + 659681 4754211 953 + 659681 4754241 954 + 659681 4754271 953 + 659681 4754301 954 + 659681 4754331 955 + 659681 4754361 955 + 659681 4754391 954 + 659681 4754421 955 + 659681 4754451 954 + 659681 4754481 954 + 659681 4754511 954 + 659681 4754541 954 + 659711 4751301 959 + 659711 4751331 963 + 659711 4751361 968 + 659711 4751391 970 + 659711 4751421 972 + 659711 4751451 975 + 659711 4751481 978 + 659711 4751511 982 + 659711 4751541 986 + 659711 4751571 991 + 659711 4751601 994 + 659711 4751631 998 + 659711 4751661 1000 + 659711 4751691 1001 + 659711 4751721 1001 + 659711 4751751 1000 + 659711 4751781 999 + 659711 4751811 998 + 659711 4751841 997 + 659711 4751871 995 + 659711 4751901 994 + 659711 4751931 991 + 659711 4751961 989 + 659711 4751991 987 + 659711 4752021 980 + 659711 4752051 959 + 659711 4752081 939 + 659711 4752111 923 + 659711 4752141 911 + 659711 4752171 903 + 659711 4752201 896 + 659711 4752231 891 + 659711 4752261 887 + 659711 4752291 883 + 659711 4752321 877 + 659711 4752351 874 + 659711 4752381 871 + 659711 4752411 869 + 659711 4752441 868 + 659711 4752471 867 + 659711 4752501 867 + 659711 4752531 866 + 659711 4752561 865 + 659711 4752591 864 + 659711 4752621 863 + 659711 4752651 862 + 659711 4752681 861 + 659711 4752711 860 + 659711 4752741 859 + 659711 4752771 858 + 659711 4752801 858 + 659711 4752831 857 + 659711 4752861 856 + 659711 4752891 855 + 659711 4752921 854 + 659711 4752951 853 + 659711 4752981 854 + 659711 4753011 853 + 659711 4753041 854 + 659711 4753071 854 + 659711 4753101 849 + 659711 4753131 833 + 659711 4753161 818 + 659711 4753191 809 + 659711 4753221 809 + 659711 4753251 809 + 659711 4753281 809 + 659711 4753311 809 + 659711 4753341 809 + 659711 4753371 809 + 659711 4753401 828 + 659711 4753431 843 + 659711 4753461 853 + 659711 4753491 857 + 659711 4753521 855 + 659711 4753551 851 + 659711 4753581 848 + 659711 4753611 850 + 659711 4753641 854 + 659711 4753671 853 + 659711 4753701 853 + 659711 4753731 852 + 659711 4753761 852 + 659711 4753791 852 + 659711 4753821 852 + 659711 4753851 853 + 659711 4753881 856 + 659711 4753911 868 + 659711 4753941 876 + 659711 4753971 881 + 659711 4754001 893 + 659711 4754031 893 + 659711 4754061 897 + 659711 4754091 907 + 659711 4754121 937 + 659711 4754151 953 + 659711 4754181 953 + 659711 4754211 953 + 659711 4754241 953 + 659711 4754271 954 + 659711 4754301 954 + 659711 4754331 955 + 659711 4754361 955 + 659711 4754391 955 + 659711 4754421 954 + 659711 4754451 954 + 659711 4754481 954 + 659711 4754511 954 + 659711 4754541 954 + 659741 4751301 961 + 659741 4751331 964 + 659741 4751361 968 + 659741 4751391 970 + 659741 4751421 972 + 659741 4751451 974 + 659741 4751481 977 + 659741 4751511 981 + 659741 4751541 985 + 659741 4751571 989 + 659741 4751601 993 + 659741 4751631 998 + 659741 4751661 1000 + 659741 4751691 1001 + 659741 4751721 1001 + 659741 4751751 1001 + 659741 4751781 1000 + 659741 4751811 999 + 659741 4751841 997 + 659741 4751871 996 + 659741 4751901 994 + 659741 4751931 993 + 659741 4751961 991 + 659741 4751991 987 + 659741 4752021 978 + 659741 4752051 958 + 659741 4752081 937 + 659741 4752111 915 + 659741 4752141 906 + 659741 4752171 899 + 659741 4752201 892 + 659741 4752231 889 + 659741 4752261 886 + 659741 4752291 883 + 659741 4752321 877 + 659741 4752351 874 + 659741 4752381 872 + 659741 4752411 870 + 659741 4752441 869 + 659741 4752471 868 + 659741 4752501 867 + 659741 4752531 866 + 659741 4752561 865 + 659741 4752591 864 + 659741 4752621 863 + 659741 4752651 862 + 659741 4752681 861 + 659741 4752711 860 + 659741 4752741 859 + 659741 4752771 858 + 659741 4752801 858 + 659741 4752831 857 + 659741 4752861 856 + 659741 4752891 856 + 659741 4752921 855 + 659741 4752951 855 + 659741 4752981 855 + 659741 4753011 854 + 659741 4753041 855 + 659741 4753071 854 + 659741 4753101 842 + 659741 4753131 822 + 659741 4753161 809 + 659741 4753191 809 + 659741 4753221 809 + 659741 4753251 809 + 659741 4753281 809 + 659741 4753311 809 + 659741 4753341 809 + 659741 4753371 817 + 659741 4753401 832 + 659741 4753431 846 + 659741 4753461 854 + 659741 4753491 855 + 659741 4753521 855 + 659741 4753551 852 + 659741 4753581 848 + 659741 4753611 852 + 659741 4753641 854 + 659741 4753671 854 + 659741 4753701 853 + 659741 4753731 853 + 659741 4753761 852 + 659741 4753791 852 + 659741 4753821 853 + 659741 4753851 853 + 659741 4753881 853 + 659741 4753911 861 + 659741 4753941 869 + 659741 4753971 875 + 659741 4754001 879 + 659741 4754031 885 + 659741 4754061 892 + 659741 4754091 906 + 659741 4754121 937 + 659741 4754151 953 + 659741 4754181 953 + 659741 4754211 953 + 659741 4754241 953 + 659741 4754271 954 + 659741 4754301 954 + 659741 4754331 955 + 659741 4754361 955 + 659741 4754391 955 + 659741 4754421 954 + 659741 4754451 954 + 659741 4754481 954 + 659741 4754511 954 + 659741 4754541 954 + 659771 4751301 968 + 659771 4751331 966 + 659771 4751361 969 + 659771 4751391 970 + 659771 4751421 972 + 659771 4751451 974 + 659771 4751481 977 + 659771 4751511 980 + 659771 4751541 984 + 659771 4751571 988 + 659771 4751601 993 + 659771 4751631 998 + 659771 4751661 1000 + 659771 4751691 1002 + 659771 4751721 1002 + 659771 4751751 1001 + 659771 4751781 1000 + 659771 4751811 999 + 659771 4751841 998 + 659771 4751871 997 + 659771 4751901 995 + 659771 4751931 993 + 659771 4751961 991 + 659771 4751991 986 + 659771 4752021 975 + 659771 4752051 953 + 659771 4752081 933 + 659771 4752111 915 + 659771 4752141 904 + 659771 4752171 897 + 659771 4752201 891 + 659771 4752231 888 + 659771 4752261 885 + 659771 4752291 882 + 659771 4752321 878 + 659771 4752351 875 + 659771 4752381 873 + 659771 4752411 871 + 659771 4752441 869 + 659771 4752471 868 + 659771 4752501 867 + 659771 4752531 866 + 659771 4752561 865 + 659771 4752591 864 + 659771 4752621 863 + 659771 4752651 862 + 659771 4752681 861 + 659771 4752711 860 + 659771 4752741 859 + 659771 4752771 857 + 659771 4752801 857 + 659771 4752831 857 + 659771 4752861 857 + 659771 4752891 856 + 659771 4752921 856 + 659771 4752951 856 + 659771 4752981 855 + 659771 4753011 855 + 659771 4753041 854 + 659771 4753071 852 + 659771 4753101 839 + 659771 4753131 821 + 659771 4753161 809 + 659771 4753191 809 + 659771 4753221 809 + 659771 4753251 809 + 659771 4753281 809 + 659771 4753311 809 + 659771 4753341 809 + 659771 4753371 819 + 659771 4753401 834 + 659771 4753431 849 + 659771 4753461 856 + 659771 4753491 854 + 659771 4753521 854 + 659771 4753551 853 + 659771 4753581 852 + 659771 4753611 853 + 659771 4753641 854 + 659771 4753671 854 + 659771 4753701 854 + 659771 4753731 853 + 659771 4753761 853 + 659771 4753791 853 + 659771 4753821 853 + 659771 4753851 854 + 659771 4753881 854 + 659771 4753911 854 + 659771 4753941 859 + 659771 4753971 867 + 659771 4754001 873 + 659771 4754031 880 + 659771 4754061 890 + 659771 4754091 905 + 659771 4754121 928 + 659771 4754151 953 + 659771 4754181 953 + 659771 4754211 953 + 659771 4754241 954 + 659771 4754271 954 + 659771 4754301 955 + 659771 4754331 955 + 659771 4754361 955 + 659771 4754391 955 + 659771 4754421 955 + 659771 4754451 954 + 659771 4754481 954 + 659771 4754511 954 + 659771 4754541 954 + 659801 4751301 968 + 659801 4751331 967 + 659801 4751361 968 + 659801 4751391 970 + 659801 4751421 973 + 659801 4751451 975 + 659801 4751481 978 + 659801 4751511 981 + 659801 4751541 984 + 659801 4751571 989 + 659801 4751601 994 + 659801 4751631 998 + 659801 4751661 1000 + 659801 4751691 1002 + 659801 4751721 1002 + 659801 4751751 1002 + 659801 4751781 1001 + 659801 4751811 1000 + 659801 4751841 999 + 659801 4751871 997 + 659801 4751901 996 + 659801 4751931 994 + 659801 4751961 991 + 659801 4751991 985 + 659801 4752021 970 + 659801 4752051 947 + 659801 4752081 927 + 659801 4752111 909 + 659801 4752141 899 + 659801 4752171 895 + 659801 4752201 890 + 659801 4752231 887 + 659801 4752261 885 + 659801 4752291 882 + 659801 4752321 878 + 659801 4752351 876 + 659801 4752381 873 + 659801 4752411 871 + 659801 4752441 870 + 659801 4752471 868 + 659801 4752501 867 + 659801 4752531 866 + 659801 4752561 865 + 659801 4752591 864 + 659801 4752621 863 + 659801 4752651 862 + 659801 4752681 861 + 659801 4752711 860 + 659801 4752741 858 + 659801 4752771 856 + 659801 4752801 857 + 659801 4752831 856 + 659801 4752861 856 + 659801 4752891 856 + 659801 4752921 855 + 659801 4752951 855 + 659801 4752981 855 + 659801 4753011 854 + 659801 4753041 853 + 659801 4753071 847 + 659801 4753101 839 + 659801 4753131 820 + 659801 4753161 809 + 659801 4753191 809 + 659801 4753221 809 + 659801 4753251 809 + 659801 4753281 809 + 659801 4753311 809 + 659801 4753341 809 + 659801 4753371 822 + 659801 4753401 837 + 659801 4753431 852 + 659801 4753461 854 + 659801 4753491 854 + 659801 4753521 854 + 659801 4753551 854 + 659801 4753581 854 + 659801 4753611 854 + 659801 4753641 854 + 659801 4753671 855 + 659801 4753701 854 + 659801 4753731 854 + 659801 4753761 853 + 659801 4753791 854 + 659801 4753821 854 + 659801 4753851 854 + 659801 4753881 854 + 659801 4753911 854 + 659801 4753941 854 + 659801 4753971 860 + 659801 4754001 868 + 659801 4754031 878 + 659801 4754061 892 + 659801 4754091 902 + 659801 4754121 928 + 659801 4754151 953 + 659801 4754181 953 + 659801 4754211 953 + 659801 4754241 953 + 659801 4754271 954 + 659801 4754301 955 + 659801 4754331 955 + 659801 4754361 955 + 659801 4754391 955 + 659801 4754421 955 + 659801 4754451 954 + 659801 4754481 955 + 659801 4754511 954 + 659801 4754541 955 + 659831 4751301 969 + 659831 4751331 968 + 659831 4751361 967 + 659831 4751391 970 + 659831 4751421 973 + 659831 4751451 976 + 659831 4751481 979 + 659831 4751511 982 + 659831 4751541 986 + 659831 4751571 990 + 659831 4751601 995 + 659831 4751631 999 + 659831 4751661 1001 + 659831 4751691 1002 + 659831 4751721 1002 + 659831 4751751 1002 + 659831 4751781 1001 + 659831 4751811 1001 + 659831 4751841 999 + 659831 4751871 998 + 659831 4751901 998 + 659831 4751931 996 + 659831 4751961 991 + 659831 4751991 982 + 659831 4752021 966 + 659831 4752051 942 + 659831 4752081 921 + 659831 4752111 909 + 659831 4752141 900 + 659831 4752171 894 + 659831 4752201 890 + 659831 4752231 886 + 659831 4752261 883 + 659831 4752291 880 + 659831 4752321 878 + 659831 4752351 875 + 659831 4752381 873 + 659831 4752411 871 + 659831 4752441 870 + 659831 4752471 868 + 659831 4752501 867 + 659831 4752531 866 + 659831 4752561 865 + 659831 4752591 864 + 659831 4752621 863 + 659831 4752651 862 + 659831 4752681 861 + 659831 4752711 859 + 659831 4752741 856 + 659831 4752771 854 + 659831 4752801 855 + 659831 4752831 855 + 659831 4752861 855 + 659831 4752891 855 + 659831 4752921 855 + 659831 4752951 854 + 659831 4752981 854 + 659831 4753011 850 + 659831 4753041 840 + 659831 4753071 833 + 659831 4753101 829 + 659831 4753131 820 + 659831 4753161 809 + 659831 4753191 809 + 659831 4753221 809 + 659831 4753251 809 + 659831 4753281 809 + 659831 4753311 809 + 659831 4753341 809 + 659831 4753371 827 + 659831 4753401 838 + 659831 4753431 853 + 659831 4753461 854 + 659831 4753491 854 + 659831 4753521 854 + 659831 4753551 854 + 659831 4753581 854 + 659831 4753611 855 + 659831 4753641 855 + 659831 4753671 855 + 659831 4753701 855 + 659831 4753731 854 + 659831 4753761 854 + 659831 4753791 854 + 659831 4753821 854 + 659831 4753851 855 + 659831 4753881 855 + 659831 4753911 854 + 659831 4753941 854 + 659831 4753971 854 + 659831 4754001 861 + 659831 4754031 872 + 659831 4754061 886 + 659831 4754091 898 + 659831 4754121 923 + 659831 4754151 953 + 659831 4754181 953 + 659831 4754211 953 + 659831 4754241 953 + 659831 4754271 954 + 659831 4754301 954 + 659831 4754331 955 + 659831 4754361 955 + 659831 4754391 955 + 659831 4754421 955 + 659831 4754451 955 + 659831 4754481 954 + 659831 4754511 955 + 659831 4754541 955 + 659861 4751301 969 + 659861 4751331 968 + 659861 4751361 967 + 659861 4751391 969 + 659861 4751421 974 + 659861 4751451 977 + 659861 4751481 980 + 659861 4751511 983 + 659861 4751541 988 + 659861 4751571 992 + 659861 4751601 997 + 659861 4751631 999 + 659861 4751661 1001 + 659861 4751691 1002 + 659861 4751721 1003 + 659861 4751751 1003 + 659861 4751781 1002 + 659861 4751811 1002 + 659861 4751841 1001 + 659861 4751871 1000 + 659861 4751901 999 + 659861 4751931 997 + 659861 4751961 988 + 659861 4751991 975 + 659861 4752021 954 + 659861 4752051 934 + 659861 4752081 916 + 659861 4752111 906 + 659861 4752141 899 + 659861 4752171 891 + 659861 4752201 888 + 659861 4752231 885 + 659861 4752261 881 + 659861 4752291 878 + 659861 4752321 876 + 659861 4752351 874 + 659861 4752381 872 + 659861 4752411 871 + 659861 4752441 869 + 659861 4752471 868 + 659861 4752501 867 + 659861 4752531 866 + 659861 4752561 865 + 659861 4752591 864 + 659861 4752621 863 + 659861 4752651 862 + 659861 4752681 861 + 659861 4752711 859 + 659861 4752741 855 + 659861 4752771 853 + 659861 4752801 854 + 659861 4752831 854 + 659861 4752861 854 + 659861 4752891 854 + 659861 4752921 853 + 659861 4752951 849 + 659861 4752981 842 + 659861 4753011 834 + 659861 4753041 824 + 659861 4753071 816 + 659861 4753101 809 + 659861 4753131 809 + 659861 4753161 809 + 659861 4753191 809 + 659861 4753221 809 + 659861 4753251 809 + 659861 4753281 809 + 659861 4753311 809 + 659861 4753341 816 + 659861 4753371 828 + 659861 4753401 839 + 659861 4753431 853 + 659861 4753461 854 + 659861 4753491 854 + 659861 4753521 854 + 659861 4753551 855 + 659861 4753581 855 + 659861 4753611 855 + 659861 4753641 856 + 659861 4753671 855 + 659861 4753701 855 + 659861 4753731 855 + 659861 4753761 855 + 659861 4753791 855 + 659861 4753821 855 + 659861 4753851 855 + 659861 4753881 855 + 659861 4753911 855 + 659861 4753941 854 + 659861 4753971 854 + 659861 4754001 858 + 659861 4754031 866 + 659861 4754061 879 + 659861 4754091 894 + 659861 4754121 908 + 659861 4754151 950 + 659861 4754181 951 + 659861 4754211 953 + 659861 4754241 953 + 659861 4754271 954 + 659861 4754301 954 + 659861 4754331 955 + 659861 4754361 955 + 659861 4754391 955 + 659861 4754421 955 + 659861 4754451 955 + 659861 4754481 955 + 659861 4754511 955 + 659861 4754541 955 + 659891 4751301 970 + 659891 4751331 969 + 659891 4751361 967 + 659891 4751391 969 + 659891 4751421 975 + 659891 4751451 978 + 659891 4751481 981 + 659891 4751511 985 + 659891 4751541 989 + 659891 4751571 994 + 659891 4751601 998 + 659891 4751631 1000 + 659891 4751661 1002 + 659891 4751691 1002 + 659891 4751721 1003 + 659891 4751751 1002 + 659891 4751781 1003 + 659891 4751811 1003 + 659891 4751841 1002 + 659891 4751871 1001 + 659891 4751901 999 + 659891 4751931 994 + 659891 4751961 983 + 659891 4751991 965 + 659891 4752021 945 + 659891 4752051 924 + 659891 4752081 911 + 659891 4752111 903 + 659891 4752141 895 + 659891 4752171 890 + 659891 4752201 887 + 659891 4752231 883 + 659891 4752261 880 + 659891 4752291 877 + 659891 4752321 875 + 659891 4752351 873 + 659891 4752381 871 + 659891 4752411 870 + 659891 4752441 869 + 659891 4752471 868 + 659891 4752501 867 + 659891 4752531 866 + 659891 4752561 864 + 659891 4752591 864 + 659891 4752621 863 + 659891 4752651 862 + 659891 4752681 861 + 659891 4752711 858 + 659891 4752741 854 + 659891 4752771 852 + 659891 4752801 847 + 659891 4752831 847 + 659891 4752861 846 + 659891 4752891 844 + 659891 4752921 841 + 659891 4752951 832 + 659891 4752981 826 + 659891 4753011 819 + 659891 4753041 809 + 659891 4753071 809 + 659891 4753101 809 + 659891 4753131 809 + 659891 4753161 809 + 659891 4753191 809 + 659891 4753221 809 + 659891 4753251 809 + 659891 4753281 809 + 659891 4753311 809 + 659891 4753341 817 + 659891 4753371 830 + 659891 4753401 845 + 659891 4753431 854 + 659891 4753461 854 + 659891 4753491 855 + 659891 4753521 855 + 659891 4753551 855 + 659891 4753581 856 + 659891 4753611 856 + 659891 4753641 856 + 659891 4753671 856 + 659891 4753701 856 + 659891 4753731 856 + 659891 4753761 856 + 659891 4753791 856 + 659891 4753821 855 + 659891 4753851 856 + 659891 4753881 856 + 659891 4753911 856 + 659891 4753941 856 + 659891 4753971 856 + 659891 4754001 858 + 659891 4754031 860 + 659891 4754061 872 + 659891 4754091 884 + 659891 4754121 900 + 659891 4754151 933 + 659891 4754181 953 + 659891 4754211 953 + 659891 4754241 953 + 659891 4754271 953 + 659891 4754301 954 + 659891 4754331 955 + 659891 4754361 955 + 659891 4754391 955 + 659891 4754421 956 + 659891 4754451 955 + 659891 4754481 955 + 659891 4754511 955 + 659891 4754541 955 + 659921 4751301 970 + 659921 4751331 969 + 659921 4751361 967 + 659921 4751391 970 + 659921 4751421 975 + 659921 4751451 979 + 659921 4751481 982 + 659921 4751511 986 + 659921 4751541 990 + 659921 4751571 995 + 659921 4751601 999 + 659921 4751631 1001 + 659921 4751661 1002 + 659921 4751691 1002 + 659921 4751721 1003 + 659921 4751751 1003 + 659921 4751781 1004 + 659921 4751811 1003 + 659921 4751841 1002 + 659921 4751871 1001 + 659921 4751901 998 + 659921 4751931 992 + 659921 4751961 972 + 659921 4751991 956 + 659921 4752021 934 + 659921 4752051 919 + 659921 4752081 908 + 659921 4752111 899 + 659921 4752141 893 + 659921 4752171 889 + 659921 4752201 885 + 659921 4752231 882 + 659921 4752261 879 + 659921 4752291 876 + 659921 4752321 875 + 659921 4752351 873 + 659921 4752381 871 + 659921 4752411 869 + 659921 4752441 868 + 659921 4752471 867 + 659921 4752501 866 + 659921 4752531 865 + 659921 4752561 864 + 659921 4752591 863 + 659921 4752621 862 + 659921 4752651 862 + 659921 4752681 861 + 659921 4752711 858 + 659921 4752741 855 + 659921 4752771 854 + 659921 4752801 847 + 659921 4752831 839 + 659921 4752861 828 + 659921 4752891 828 + 659921 4752921 824 + 659921 4752951 819 + 659921 4752981 814 + 659921 4753011 809 + 659921 4753041 809 + 659921 4753071 809 + 659921 4753101 809 + 659921 4753131 809 + 659921 4753161 809 + 659921 4753191 809 + 659921 4753221 809 + 659921 4753251 809 + 659921 4753281 809 + 659921 4753311 809 + 659921 4753341 823 + 659921 4753371 840 + 659921 4753401 851 + 659921 4753431 854 + 659921 4753461 855 + 659921 4753491 855 + 659921 4753521 856 + 659921 4753551 856 + 659921 4753581 856 + 659921 4753611 857 + 659921 4753641 857 + 659921 4753671 857 + 659921 4753701 857 + 659921 4753731 857 + 659921 4753761 857 + 659921 4753791 857 + 659921 4753821 857 + 659921 4753851 857 + 659921 4753881 857 + 659921 4753911 857 + 659921 4753941 857 + 659921 4753971 857 + 659921 4754001 859 + 659921 4754031 859 + 659921 4754061 864 + 659921 4754091 877 + 659921 4754121 894 + 659921 4754151 922 + 659921 4754181 951 + 659921 4754211 953 + 659921 4754241 953 + 659921 4754271 953 + 659921 4754301 954 + 659921 4754331 955 + 659921 4754361 955 + 659921 4754391 955 + 659921 4754421 955 + 659921 4754451 955 + 659921 4754481 955 + 659921 4754511 955 + 659921 4754541 955 + 659951 4751301 971 + 659951 4751331 969 + 659951 4751361 967 + 659951 4751391 971 + 659951 4751421 976 + 659951 4751451 979 + 659951 4751481 983 + 659951 4751511 986 + 659951 4751541 990 + 659951 4751571 995 + 659951 4751601 999 + 659951 4751631 1001 + 659951 4751661 1002 + 659951 4751691 1003 + 659951 4751721 1003 + 659951 4751751 1003 + 659951 4751781 1003 + 659951 4751811 1004 + 659951 4751841 1002 + 659951 4751871 1000 + 659951 4751901 996 + 659951 4751931 988 + 659951 4751961 963 + 659951 4751991 945 + 659951 4752021 927 + 659951 4752051 913 + 659951 4752081 907 + 659951 4752111 898 + 659951 4752141 891 + 659951 4752171 887 + 659951 4752201 883 + 659951 4752231 880 + 659951 4752261 877 + 659951 4752291 876 + 659951 4752321 874 + 659951 4752351 872 + 659951 4752381 870 + 659951 4752411 868 + 659951 4752441 868 + 659951 4752471 867 + 659951 4752501 866 + 659951 4752531 865 + 659951 4752561 864 + 659951 4752591 863 + 659951 4752621 861 + 659951 4752651 861 + 659951 4752681 859 + 659951 4752711 857 + 659951 4752741 855 + 659951 4752771 854 + 659951 4752801 845 + 659951 4752831 838 + 659951 4752861 822 + 659951 4752891 814 + 659951 4752921 813 + 659951 4752951 809 + 659951 4752981 809 + 659951 4753011 809 + 659951 4753041 809 + 659951 4753071 809 + 659951 4753101 809 + 659951 4753131 809 + 659951 4753161 809 + 659951 4753191 809 + 659951 4753221 809 + 659951 4753251 809 + 659951 4753281 809 + 659951 4753311 809 + 659951 4753341 836 + 659951 4753371 851 + 659951 4753401 854 + 659951 4753431 855 + 659951 4753461 856 + 659951 4753491 856 + 659951 4753521 857 + 659951 4753551 857 + 659951 4753581 857 + 659951 4753611 857 + 659951 4753641 858 + 659951 4753671 858 + 659951 4753701 858 + 659951 4753731 858 + 659951 4753761 858 + 659951 4753791 858 + 659951 4753821 858 + 659951 4753851 858 + 659951 4753881 858 + 659951 4753911 858 + 659951 4753941 858 + 659951 4753971 858 + 659951 4754001 859 + 659951 4754031 859 + 659951 4754061 860 + 659951 4754091 872 + 659951 4754121 888 + 659951 4754151 903 + 659951 4754181 923 + 659951 4754211 953 + 659951 4754241 952 + 659951 4754271 953 + 659951 4754301 954 + 659951 4754331 954 + 659951 4754361 955 + 659951 4754391 956 + 659951 4754421 955 + 659951 4754451 955 + 659951 4754481 955 + 659951 4754511 955 + 659951 4754541 956 + 659981 4751301 972 + 659981 4751331 969 + 659981 4751361 967 + 659981 4751391 972 + 659981 4751421 977 + 659981 4751451 980 + 659981 4751481 983 + 659981 4751511 987 + 659981 4751541 990 + 659981 4751571 995 + 659981 4751601 998 + 659981 4751631 1000 + 659981 4751661 1002 + 659981 4751691 1003 + 659981 4751721 1003 + 659981 4751751 1003 + 659981 4751781 1003 + 659981 4751811 1003 + 659981 4751841 1002 + 659981 4751871 1000 + 659981 4751901 995 + 659981 4751931 982 + 659981 4751961 958 + 659981 4751991 938 + 659981 4752021 921 + 659981 4752051 911 + 659981 4752081 901 + 659981 4752111 896 + 659981 4752141 890 + 659981 4752171 884 + 659981 4752201 882 + 659981 4752231 879 + 659981 4752261 876 + 659981 4752291 875 + 659981 4752321 874 + 659981 4752351 872 + 659981 4752381 870 + 659981 4752411 869 + 659981 4752441 868 + 659981 4752471 867 + 659981 4752501 866 + 659981 4752531 864 + 659981 4752561 863 + 659981 4752591 862 + 659981 4752621 861 + 659981 4752651 860 + 659981 4752681 858 + 659981 4752711 855 + 659981 4752741 853 + 659981 4752771 853 + 659981 4752801 854 + 659981 4752831 841 + 659981 4752861 823 + 659981 4752891 813 + 659981 4752921 809 + 659981 4752951 809 + 659981 4752981 809 + 659981 4753011 809 + 659981 4753041 809 + 659981 4753071 809 + 659981 4753101 809 + 659981 4753131 809 + 659981 4753161 809 + 659981 4753191 809 + 659981 4753221 815 + 659981 4753251 820 + 659981 4753281 822 + 659981 4753311 832 + 659981 4753341 846 + 659981 4753371 854 + 659981 4753401 856 + 659981 4753431 856 + 659981 4753461 857 + 659981 4753491 857 + 659981 4753521 857 + 659981 4753551 857 + 659981 4753581 858 + 659981 4753611 858 + 659981 4753641 858 + 659981 4753671 858 + 659981 4753701 859 + 659981 4753731 859 + 659981 4753761 859 + 659981 4753791 859 + 659981 4753821 859 + 659981 4753851 859 + 659981 4753881 859 + 659981 4753911 859 + 659981 4753941 859 + 659981 4753971 859 + 659981 4754001 859 + 659981 4754031 859 + 659981 4754061 860 + 659981 4754091 865 + 659981 4754121 877 + 659981 4754151 891 + 659981 4754181 912 + 659981 4754211 938 + 659981 4754241 953 + 659981 4754271 953 + 659981 4754301 954 + 659981 4754331 954 + 659981 4754361 955 + 659981 4754391 956 + 659981 4754421 955 + 659981 4754451 955 + 659981 4754481 955 + 659981 4754511 956 + 659981 4754541 956 + 660011 4751301 972 + 660011 4751331 970 + 660011 4751361 967 + 660011 4751391 973 + 660011 4751421 977 + 660011 4751451 981 + 660011 4751481 984 + 660011 4751511 987 + 660011 4751541 990 + 660011 4751571 995 + 660011 4751601 998 + 660011 4751631 1000 + 660011 4751661 1002 + 660011 4751691 1003 + 660011 4751721 1003 + 660011 4751751 1004 + 660011 4751781 1003 + 660011 4751811 1003 + 660011 4751841 1001 + 660011 4751871 998 + 660011 4751901 991 + 660011 4751931 975 + 660011 4751961 951 + 660011 4751991 937 + 660011 4752021 920 + 660011 4752051 910 + 660011 4752081 900 + 660011 4752111 894 + 660011 4752141 890 + 660011 4752171 883 + 660011 4752201 880 + 660011 4752231 878 + 660011 4752261 876 + 660011 4752291 875 + 660011 4752321 873 + 660011 4752351 872 + 660011 4752381 871 + 660011 4752411 869 + 660011 4752441 868 + 660011 4752471 867 + 660011 4752501 865 + 660011 4752531 864 + 660011 4752561 862 + 660011 4752591 861 + 660011 4752621 861 + 660011 4752651 859 + 660011 4752681 857 + 660011 4752711 854 + 660011 4752741 854 + 660011 4752771 856 + 660011 4752801 847 + 660011 4752831 831 + 660011 4752861 815 + 660011 4752891 809 + 660011 4752921 809 + 660011 4752951 809 + 660011 4752981 809 + 660011 4753011 809 + 660011 4753041 809 + 660011 4753071 809 + 660011 4753101 809 + 660011 4753131 809 + 660011 4753161 809 + 660011 4753191 822 + 660011 4753221 825 + 660011 4753251 834 + 660011 4753281 843 + 660011 4753311 848 + 660011 4753341 854 + 660011 4753371 861 + 660011 4753401 860 + 660011 4753431 858 + 660011 4753461 858 + 660011 4753491 858 + 660011 4753521 858 + 660011 4753551 858 + 660011 4753581 858 + 660011 4753611 859 + 660011 4753641 859 + 660011 4753671 859 + 660011 4753701 860 + 660011 4753731 860 + 660011 4753761 860 + 660011 4753791 860 + 660011 4753821 860 + 660011 4753851 860 + 660011 4753881 860 + 660011 4753911 860 + 660011 4753941 859 + 660011 4753971 859 + 660011 4754001 860 + 660011 4754031 860 + 660011 4754061 860 + 660011 4754091 861 + 660011 4754121 871 + 660011 4754151 884 + 660011 4754181 902 + 660011 4754211 924 + 660011 4754241 953 + 660011 4754271 953 + 660011 4754301 954 + 660011 4754331 954 + 660011 4754361 955 + 660011 4754391 955 + 660011 4754421 956 + 660011 4754451 955 + 660011 4754481 956 + 660011 4754511 957 + 660011 4754541 956 + 660041 4751301 974 + 660041 4751331 971 + 660041 4751361 971 + 660041 4751391 975 + 660041 4751421 978 + 660041 4751451 981 + 660041 4751481 984 + 660041 4751511 987 + 660041 4751541 990 + 660041 4751571 994 + 660041 4751601 998 + 660041 4751631 1000 + 660041 4751661 1002 + 660041 4751691 1003 + 660041 4751721 1003 + 660041 4751751 1004 + 660041 4751781 1004 + 660041 4751811 1002 + 660041 4751841 1000 + 660041 4751871 996 + 660041 4751901 984 + 660041 4751931 964 + 660041 4751961 943 + 660041 4751991 930 + 660041 4752021 916 + 660041 4752051 909 + 660041 4752081 899 + 660041 4752111 891 + 660041 4752141 883 + 660041 4752171 881 + 660041 4752201 879 + 660041 4752231 877 + 660041 4752261 876 + 660041 4752291 874 + 660041 4752321 873 + 660041 4752351 872 + 660041 4752381 871 + 660041 4752411 869 + 660041 4752441 868 + 660041 4752471 866 + 660041 4752501 864 + 660041 4752531 863 + 660041 4752561 862 + 660041 4752591 861 + 660041 4752621 861 + 660041 4752651 859 + 660041 4752681 858 + 660041 4752711 856 + 660041 4752741 856 + 660041 4752771 854 + 660041 4752801 840 + 660041 4752831 821 + 660041 4752861 809 + 660041 4752891 809 + 660041 4752921 809 + 660041 4752951 809 + 660041 4752981 809 + 660041 4753011 809 + 660041 4753041 809 + 660041 4753071 809 + 660041 4753101 809 + 660041 4753131 820 + 660041 4753161 828 + 660041 4753191 833 + 660041 4753221 840 + 660041 4753251 844 + 660041 4753281 852 + 660041 4753311 856 + 660041 4753341 860 + 660041 4753371 861 + 660041 4753401 861 + 660041 4753431 860 + 660041 4753461 859 + 660041 4753491 859 + 660041 4753521 859 + 660041 4753551 859 + 660041 4753581 860 + 660041 4753611 860 + 660041 4753641 860 + 660041 4753671 860 + 660041 4753701 860 + 660041 4753731 861 + 660041 4753761 861 + 660041 4753791 861 + 660041 4753821 861 + 660041 4753851 861 + 660041 4753881 861 + 660041 4753911 860 + 660041 4753941 860 + 660041 4753971 860 + 660041 4754001 860 + 660041 4754031 861 + 660041 4754061 862 + 660041 4754091 861 + 660041 4754121 866 + 660041 4754151 877 + 660041 4754181 894 + 660041 4754211 913 + 660041 4754241 950 + 660041 4754271 953 + 660041 4754301 953 + 660041 4754331 954 + 660041 4754361 955 + 660041 4754391 955 + 660041 4754421 955 + 660041 4754451 955 + 660041 4754481 956 + 660041 4754511 957 + 660041 4754541 956 + 660071 4751301 976 + 660071 4751331 973 + 660071 4751361 973 + 660071 4751391 975 + 660071 4751421 978 + 660071 4751451 981 + 660071 4751481 984 + 660071 4751511 987 + 660071 4751541 990 + 660071 4751571 994 + 660071 4751601 998 + 660071 4751631 1000 + 660071 4751661 1002 + 660071 4751691 1003 + 660071 4751721 1004 + 660071 4751751 1003 + 660071 4751781 1004 + 660071 4751811 1002 + 660071 4751841 1000 + 660071 4751871 994 + 660071 4751901 979 + 660071 4751931 959 + 660071 4751961 946 + 660071 4751991 926 + 660071 4752021 912 + 660071 4752051 905 + 660071 4752081 900 + 660071 4752111 893 + 660071 4752141 884 + 660071 4752171 880 + 660071 4752201 878 + 660071 4752231 876 + 660071 4752261 875 + 660071 4752291 874 + 660071 4752321 873 + 660071 4752351 871 + 660071 4752381 870 + 660071 4752411 870 + 660071 4752441 868 + 660071 4752471 867 + 660071 4752501 863 + 660071 4752531 861 + 660071 4752561 861 + 660071 4752591 861 + 660071 4752621 861 + 660071 4752651 860 + 660071 4752681 859 + 660071 4752711 859 + 660071 4752741 859 + 660071 4752771 854 + 660071 4752801 834 + 660071 4752831 816 + 660071 4752861 809 + 660071 4752891 809 + 660071 4752921 809 + 660071 4752951 809 + 660071 4752981 809 + 660071 4753011 809 + 660071 4753041 809 + 660071 4753071 809 + 660071 4753101 822 + 660071 4753131 834 + 660071 4753161 842 + 660071 4753191 851 + 660071 4753221 854 + 660071 4753251 854 + 660071 4753281 856 + 660071 4753311 859 + 660071 4753341 861 + 660071 4753371 862 + 660071 4753401 861 + 660071 4753431 861 + 660071 4753461 860 + 660071 4753491 859 + 660071 4753521 859 + 660071 4753551 860 + 660071 4753581 860 + 660071 4753611 861 + 660071 4753641 861 + 660071 4753671 860 + 660071 4753701 861 + 660071 4753731 862 + 660071 4753761 862 + 660071 4753791 862 + 660071 4753821 863 + 660071 4753851 863 + 660071 4753881 862 + 660071 4753911 861 + 660071 4753941 860 + 660071 4753971 861 + 660071 4754001 861 + 660071 4754031 861 + 660071 4754061 862 + 660071 4754091 863 + 660071 4754121 866 + 660071 4754151 872 + 660071 4754181 890 + 660071 4754211 908 + 660071 4754241 945 + 660071 4754271 953 + 660071 4754301 953 + 660071 4754331 954 + 660071 4754361 956 + 660071 4754391 955 + 660071 4754421 955 + 660071 4754451 956 + 660071 4754481 956 + 660071 4754511 957 + 660071 4754541 957 + 660101 4751301 977 + 660101 4751331 975 + 660101 4751361 974 + 660101 4751391 975 + 660101 4751421 978 + 660101 4751451 981 + 660101 4751481 984 + 660101 4751511 987 + 660101 4751541 990 + 660101 4751571 994 + 660101 4751601 998 + 660101 4751631 1000 + 660101 4751661 1002 + 660101 4751691 1003 + 660101 4751721 1003 + 660101 4751751 1004 + 660101 4751781 1003 + 660101 4751811 1001 + 660101 4751841 999 + 660101 4751871 992 + 660101 4751901 975 + 660101 4751931 956 + 660101 4751961 940 + 660101 4751991 925 + 660101 4752021 912 + 660101 4752051 905 + 660101 4752081 895 + 660101 4752111 888 + 660101 4752141 883 + 660101 4752171 878 + 660101 4752201 876 + 660101 4752231 876 + 660101 4752261 875 + 660101 4752291 874 + 660101 4752321 873 + 660101 4752351 871 + 660101 4752381 869 + 660101 4752411 869 + 660101 4752441 868 + 660101 4752471 867 + 660101 4752501 864 + 660101 4752531 861 + 660101 4752561 861 + 660101 4752591 861 + 660101 4752621 860 + 660101 4752651 860 + 660101 4752681 861 + 660101 4752711 861 + 660101 4752741 862 + 660101 4752771 852 + 660101 4752801 829 + 660101 4752831 809 + 660101 4752861 809 + 660101 4752891 809 + 660101 4752921 809 + 660101 4752951 809 + 660101 4752981 809 + 660101 4753011 809 + 660101 4753041 809 + 660101 4753071 819 + 660101 4753101 837 + 660101 4753131 850 + 660101 4753161 854 + 660101 4753191 856 + 660101 4753221 858 + 660101 4753251 858 + 660101 4753281 858 + 660101 4753311 860 + 660101 4753341 861 + 660101 4753371 862 + 660101 4753401 862 + 660101 4753431 861 + 660101 4753461 860 + 660101 4753491 859 + 660101 4753521 859 + 660101 4753551 860 + 660101 4753581 861 + 660101 4753611 862 + 660101 4753641 861 + 660101 4753671 861 + 660101 4753701 861 + 660101 4753731 862 + 660101 4753761 863 + 660101 4753791 864 + 660101 4753821 865 + 660101 4753851 866 + 660101 4753881 864 + 660101 4753911 861 + 660101 4753941 860 + 660101 4753971 861 + 660101 4754001 861 + 660101 4754031 861 + 660101 4754061 862 + 660101 4754091 864 + 660101 4754121 867 + 660101 4754151 872 + 660101 4754181 888 + 660101 4754211 907 + 660101 4754241 943 + 660101 4754271 953 + 660101 4754301 953 + 660101 4754331 954 + 660101 4754361 955 + 660101 4754391 955 + 660101 4754421 955 + 660101 4754451 957 + 660101 4754481 957 + 660101 4754511 957 + 660101 4754541 957 + 660131 4751301 978 + 660131 4751331 976 + 660131 4751361 975 + 660131 4751391 975 + 660131 4751421 977 + 660131 4751451 980 + 660131 4751481 984 + 660131 4751511 986 + 660131 4751541 990 + 660131 4751571 995 + 660131 4751601 999 + 660131 4751631 1001 + 660131 4751661 1002 + 660131 4751691 1003 + 660131 4751721 1003 + 660131 4751751 1003 + 660131 4751781 1002 + 660131 4751811 999 + 660131 4751841 995 + 660131 4751871 986 + 660131 4751901 964 + 660131 4751931 952 + 660131 4751961 935 + 660131 4751991 923 + 660131 4752021 910 + 660131 4752051 904 + 660131 4752081 893 + 660131 4752111 884 + 660131 4752141 881 + 660131 4752171 877 + 660131 4752201 876 + 660131 4752231 875 + 660131 4752261 874 + 660131 4752291 873 + 660131 4752321 872 + 660131 4752351 871 + 660131 4752381 869 + 660131 4752411 869 + 660131 4752441 868 + 660131 4752471 867 + 660131 4752501 864 + 660131 4752531 863 + 660131 4752561 862 + 660131 4752591 862 + 660131 4752621 861 + 660131 4752651 861 + 660131 4752681 861 + 660131 4752711 861 + 660131 4752741 856 + 660131 4752771 838 + 660131 4752801 825 + 660131 4752831 809 + 660131 4752861 809 + 660131 4752891 809 + 660131 4752921 809 + 660131 4752951 809 + 660131 4752981 809 + 660131 4753011 809 + 660131 4753041 821 + 660131 4753071 837 + 660131 4753101 853 + 660131 4753131 861 + 660131 4753161 857 + 660131 4753191 859 + 660131 4753221 861 + 660131 4753251 860 + 660131 4753281 860 + 660131 4753311 861 + 660131 4753341 861 + 660131 4753371 863 + 660131 4753401 863 + 660131 4753431 861 + 660131 4753461 860 + 660131 4753491 860 + 660131 4753521 860 + 660131 4753551 861 + 660131 4753581 861 + 660131 4753611 862 + 660131 4753641 862 + 660131 4753671 862 + 660131 4753701 862 + 660131 4753731 863 + 660131 4753761 864 + 660131 4753791 866 + 660131 4753821 867 + 660131 4753851 869 + 660131 4753881 865 + 660131 4753911 861 + 660131 4753941 860 + 660131 4753971 860 + 660131 4754001 860 + 660131 4754031 861 + 660131 4754061 863 + 660131 4754091 864 + 660131 4754121 867 + 660131 4754151 872 + 660131 4754181 887 + 660131 4754211 907 + 660131 4754241 940 + 660131 4754271 953 + 660131 4754301 953 + 660131 4754331 954 + 660131 4754361 955 + 660131 4754391 956 + 660131 4754421 956 + 660131 4754451 957 + 660131 4754481 957 + 660131 4754511 957 + 660131 4754541 957 + 660161 4751301 981 + 660161 4751331 978 + 660161 4751361 977 + 660161 4751391 978 + 660161 4751421 978 + 660161 4751451 981 + 660161 4751481 983 + 660161 4751511 986 + 660161 4751541 989 + 660161 4751571 994 + 660161 4751601 998 + 660161 4751631 1000 + 660161 4751661 1002 + 660161 4751691 1003 + 660161 4751721 1003 + 660161 4751751 1004 + 660161 4751781 1001 + 660161 4751811 998 + 660161 4751841 991 + 660161 4751871 976 + 660161 4751901 957 + 660161 4751931 942 + 660161 4751961 931 + 660161 4751991 919 + 660161 4752021 908 + 660161 4752051 900 + 660161 4752081 891 + 660161 4752111 883 + 660161 4752141 880 + 660161 4752171 877 + 660161 4752201 875 + 660161 4752231 875 + 660161 4752261 874 + 660161 4752291 873 + 660161 4752321 872 + 660161 4752351 870 + 660161 4752381 869 + 660161 4752411 869 + 660161 4752441 869 + 660161 4752471 867 + 660161 4752501 865 + 660161 4752531 864 + 660161 4752561 863 + 660161 4752591 862 + 660161 4752621 861 + 660161 4752651 859 + 660161 4752681 860 + 660161 4752711 855 + 660161 4752741 845 + 660161 4752771 829 + 660161 4752801 817 + 660161 4752831 809 + 660161 4752861 809 + 660161 4752891 809 + 660161 4752921 809 + 660161 4752951 809 + 660161 4752981 809 + 660161 4753011 830 + 660161 4753041 839 + 660161 4753071 851 + 660161 4753101 861 + 660161 4753131 860 + 660161 4753161 859 + 660161 4753191 861 + 660161 4753221 862 + 660161 4753251 861 + 660161 4753281 861 + 660161 4753311 862 + 660161 4753341 863 + 660161 4753371 863 + 660161 4753401 863 + 660161 4753431 861 + 660161 4753461 861 + 660161 4753491 860 + 660161 4753521 860 + 660161 4753551 861 + 660161 4753581 862 + 660161 4753611 863 + 660161 4753641 863 + 660161 4753671 863 + 660161 4753701 863 + 660161 4753731 864 + 660161 4753761 865 + 660161 4753791 867 + 660161 4753821 869 + 660161 4753851 867 + 660161 4753881 861 + 660161 4753911 860 + 660161 4753941 860 + 660161 4753971 860 + 660161 4754001 860 + 660161 4754031 861 + 660161 4754061 863 + 660161 4754091 864 + 660161 4754121 866 + 660161 4754151 870 + 660161 4754181 885 + 660161 4754211 908 + 660161 4754241 942 + 660161 4754271 953 + 660161 4754301 954 + 660161 4754331 955 + 660161 4754361 956 + 660161 4754391 956 + 660161 4754421 957 + 660161 4754451 958 + 660161 4754481 957 + 660161 4754511 958 + 660161 4754541 957 + 660191 4751301 983 + 660191 4751331 982 + 660191 4751361 981 + 660191 4751391 981 + 660191 4751421 981 + 660191 4751451 981 + 660191 4751481 983 + 660191 4751511 985 + 660191 4751541 989 + 660191 4751571 992 + 660191 4751601 997 + 660191 4751631 999 + 660191 4751661 1001 + 660191 4751691 1002 + 660191 4751721 1003 + 660191 4751751 1003 + 660191 4751781 1001 + 660191 4751811 997 + 660191 4751841 986 + 660191 4751871 966 + 660191 4751901 946 + 660191 4751931 935 + 660191 4751961 926 + 660191 4751991 915 + 660191 4752021 910 + 660191 4752051 901 + 660191 4752081 890 + 660191 4752111 882 + 660191 4752141 879 + 660191 4752171 876 + 660191 4752201 875 + 660191 4752231 875 + 660191 4752261 874 + 660191 4752291 873 + 660191 4752321 872 + 660191 4752351 871 + 660191 4752381 870 + 660191 4752411 870 + 660191 4752441 869 + 660191 4752471 868 + 660191 4752501 866 + 660191 4752531 864 + 660191 4752561 862 + 660191 4752591 861 + 660191 4752621 860 + 660191 4752651 859 + 660191 4752681 857 + 660191 4752711 855 + 660191 4752741 851 + 660191 4752771 835 + 660191 4752801 809 + 660191 4752831 809 + 660191 4752861 809 + 660191 4752891 809 + 660191 4752921 809 + 660191 4752951 809 + 660191 4752981 828 + 660191 4753011 847 + 660191 4753041 854 + 660191 4753071 856 + 660191 4753101 858 + 660191 4753131 859 + 660191 4753161 860 + 660191 4753191 861 + 660191 4753221 862 + 660191 4753251 863 + 660191 4753281 863 + 660191 4753311 863 + 660191 4753341 864 + 660191 4753371 864 + 660191 4753401 864 + 660191 4753431 862 + 660191 4753461 861 + 660191 4753491 860 + 660191 4753521 861 + 660191 4753551 862 + 660191 4753581 863 + 660191 4753611 863 + 660191 4753641 863 + 660191 4753671 864 + 660191 4753701 864 + 660191 4753731 864 + 660191 4753761 864 + 660191 4753791 865 + 660191 4753821 868 + 660191 4753851 865 + 660191 4753881 861 + 660191 4753911 860 + 660191 4753941 860 + 660191 4753971 860 + 660191 4754001 860 + 660191 4754031 862 + 660191 4754061 863 + 660191 4754091 864 + 660191 4754121 866 + 660191 4754151 869 + 660191 4754181 884 + 660191 4754211 911 + 660191 4754241 949 + 660191 4754271 954 + 660191 4754301 954 + 660191 4754331 955 + 660191 4754361 957 + 660191 4754391 957 + 660191 4754421 958 + 660191 4754451 958 + 660191 4754481 958 + 660191 4754511 957 + 660191 4754541 957 + 660221 4751301 985 + 660221 4751331 983 + 660221 4751361 983 + 660221 4751391 983 + 660221 4751421 982 + 660221 4751451 982 + 660221 4751481 982 + 660221 4751511 984 + 660221 4751541 987 + 660221 4751571 990 + 660221 4751601 994 + 660221 4751631 997 + 660221 4751661 999 + 660221 4751691 1001 + 660221 4751721 1003 + 660221 4751751 1002 + 660221 4751781 1001 + 660221 4751811 996 + 660221 4751841 983 + 660221 4751871 966 + 660221 4751901 948 + 660221 4751931 934 + 660221 4751961 925 + 660221 4751991 909 + 660221 4752021 900 + 660221 4752051 893 + 660221 4752081 884 + 660221 4752111 882 + 660221 4752141 879 + 660221 4752171 877 + 660221 4752201 876 + 660221 4752231 875 + 660221 4752261 874 + 660221 4752291 873 + 660221 4752321 872 + 660221 4752351 871 + 660221 4752381 870 + 660221 4752411 870 + 660221 4752441 869 + 660221 4752471 868 + 660221 4752501 866 + 660221 4752531 864 + 660221 4752561 862 + 660221 4752591 861 + 660221 4752621 861 + 660221 4752651 861 + 660221 4752681 861 + 660221 4752711 862 + 660221 4752741 859 + 660221 4752771 835 + 660221 4752801 809 + 660221 4752831 809 + 660221 4752861 809 + 660221 4752891 809 + 660221 4752921 809 + 660221 4752951 809 + 660221 4752981 827 + 660221 4753011 844 + 660221 4753041 855 + 660221 4753071 859 + 660221 4753101 860 + 660221 4753131 861 + 660221 4753161 861 + 660221 4753191 862 + 660221 4753221 862 + 660221 4753251 863 + 660221 4753281 864 + 660221 4753311 865 + 660221 4753341 865 + 660221 4753371 866 + 660221 4753401 865 + 660221 4753431 863 + 660221 4753461 861 + 660221 4753491 861 + 660221 4753521 861 + 660221 4753551 862 + 660221 4753581 863 + 660221 4753611 864 + 660221 4753641 865 + 660221 4753671 865 + 660221 4753701 865 + 660221 4753731 865 + 660221 4753761 865 + 660221 4753791 864 + 660221 4753821 863 + 660221 4753851 862 + 660221 4753881 861 + 660221 4753911 861 + 660221 4753941 860 + 660221 4753971 860 + 660221 4754001 860 + 660221 4754031 862 + 660221 4754061 863 + 660221 4754091 864 + 660221 4754121 866 + 660221 4754151 868 + 660221 4754181 883 + 660221 4754211 906 + 660221 4754241 940 + 660221 4754271 954 + 660221 4754301 956 + 660221 4754331 957 + 660221 4754361 957 + 660221 4754391 959 + 660221 4754421 958 + 660221 4754451 959 + 660221 4754481 958 + 660221 4754511 958 + 660221 4754541 957 + 660251 4751301 987 + 660251 4751331 984 + 660251 4751361 984 + 660251 4751391 985 + 660251 4751421 984 + 660251 4751451 983 + 660251 4751481 983 + 660251 4751511 983 + 660251 4751541 985 + 660251 4751571 989 + 660251 4751601 991 + 660251 4751631 995 + 660251 4751661 997 + 660251 4751691 999 + 660251 4751721 1001 + 660251 4751751 1001 + 660251 4751781 1000 + 660251 4751811 995 + 660251 4751841 981 + 660251 4751871 963 + 660251 4751901 944 + 660251 4751931 930 + 660251 4751961 918 + 660251 4751991 907 + 660251 4752021 899 + 660251 4752051 893 + 660251 4752081 886 + 660251 4752111 882 + 660251 4752141 879 + 660251 4752171 877 + 660251 4752201 876 + 660251 4752231 875 + 660251 4752261 874 + 660251 4752291 873 + 660251 4752321 871 + 660251 4752351 870 + 660251 4752381 870 + 660251 4752411 869 + 660251 4752441 869 + 660251 4752471 868 + 660251 4752501 866 + 660251 4752531 864 + 660251 4752561 862 + 660251 4752591 861 + 660251 4752621 862 + 660251 4752651 862 + 660251 4752681 863 + 660251 4752711 863 + 660251 4752741 855 + 660251 4752771 832 + 660251 4752801 809 + 660251 4752831 809 + 660251 4752861 809 + 660251 4752891 809 + 660251 4752921 809 + 660251 4752951 809 + 660251 4752981 824 + 660251 4753011 842 + 660251 4753041 855 + 660251 4753071 861 + 660251 4753101 861 + 660251 4753131 861 + 660251 4753161 862 + 660251 4753191 862 + 660251 4753221 863 + 660251 4753251 864 + 660251 4753281 866 + 660251 4753311 866 + 660251 4753341 867 + 660251 4753371 867 + 660251 4753401 866 + 660251 4753431 864 + 660251 4753461 862 + 660251 4753491 862 + 660251 4753521 863 + 660251 4753551 864 + 660251 4753581 865 + 660251 4753611 865 + 660251 4753641 865 + 660251 4753671 866 + 660251 4753701 866 + 660251 4753731 866 + 660251 4753761 866 + 660251 4753791 865 + 660251 4753821 864 + 660251 4753851 863 + 660251 4753881 862 + 660251 4753911 861 + 660251 4753941 860 + 660251 4753971 860 + 660251 4754001 860 + 660251 4754031 861 + 660251 4754061 863 + 660251 4754091 864 + 660251 4754121 866 + 660251 4754151 868 + 660251 4754181 881 + 660251 4754211 902 + 660251 4754241 936 + 660251 4754271 953 + 660251 4754301 956 + 660251 4754331 958 + 660251 4754361 959 + 660251 4754391 959 + 660251 4754421 959 + 660251 4754451 959 + 660251 4754481 958 + 660251 4754511 958 + 660251 4754541 957 + 660281 4751301 988 + 660281 4751331 987 + 660281 4751361 987 + 660281 4751391 987 + 660281 4751421 987 + 660281 4751451 987 + 660281 4751481 986 + 660281 4751511 986 + 660281 4751541 988 + 660281 4751571 989 + 660281 4751601 990 + 660281 4751631 992 + 660281 4751661 996 + 660281 4751691 998 + 660281 4751721 999 + 660281 4751751 999 + 660281 4751781 997 + 660281 4751811 992 + 660281 4751841 975 + 660281 4751871 960 + 660281 4751901 942 + 660281 4751931 930 + 660281 4751961 916 + 660281 4751991 907 + 660281 4752021 901 + 660281 4752051 893 + 660281 4752081 886 + 660281 4752111 882 + 660281 4752141 879 + 660281 4752171 877 + 660281 4752201 876 + 660281 4752231 875 + 660281 4752261 874 + 660281 4752291 873 + 660281 4752321 871 + 660281 4752351 870 + 660281 4752381 869 + 660281 4752411 869 + 660281 4752441 868 + 660281 4752471 867 + 660281 4752501 866 + 660281 4752531 865 + 660281 4752561 865 + 660281 4752591 864 + 660281 4752621 864 + 660281 4752651 863 + 660281 4752681 862 + 660281 4752711 856 + 660281 4752741 847 + 660281 4752771 828 + 660281 4752801 809 + 660281 4752831 809 + 660281 4752861 809 + 660281 4752891 809 + 660281 4752921 809 + 660281 4752951 809 + 660281 4752981 821 + 660281 4753011 841 + 660281 4753041 857 + 660281 4753071 862 + 660281 4753101 861 + 660281 4753131 862 + 660281 4753161 863 + 660281 4753191 863 + 660281 4753221 863 + 660281 4753251 864 + 660281 4753281 866 + 660281 4753311 868 + 660281 4753341 868 + 660281 4753371 869 + 660281 4753401 867 + 660281 4753431 866 + 660281 4753461 865 + 660281 4753491 865 + 660281 4753521 866 + 660281 4753551 867 + 660281 4753581 867 + 660281 4753611 866 + 660281 4753641 866 + 660281 4753671 866 + 660281 4753701 867 + 660281 4753731 867 + 660281 4753761 866 + 660281 4753791 866 + 660281 4753821 865 + 660281 4753851 864 + 660281 4753881 863 + 660281 4753911 862 + 660281 4753941 861 + 660281 4753971 860 + 660281 4754001 860 + 660281 4754031 861 + 660281 4754061 862 + 660281 4754091 863 + 660281 4754121 865 + 660281 4754151 868 + 660281 4754181 880 + 660281 4754211 902 + 660281 4754241 937 + 660281 4754271 953 + 660281 4754301 956 + 660281 4754331 958 + 660281 4754361 960 + 660281 4754391 960 + 660281 4754421 959 + 660281 4754451 959 + 660281 4754481 958 + 660281 4754511 958 + 660281 4754541 957 + 660311 4751301 990 + 660311 4751331 989 + 660311 4751361 989 + 660311 4751391 990 + 660311 4751421 990 + 660311 4751451 990 + 660311 4751481 989 + 660311 4751511 989 + 660311 4751541 990 + 660311 4751571 990 + 660311 4751601 990 + 660311 4751631 991 + 660311 4751661 994 + 660311 4751691 996 + 660311 4751721 998 + 660311 4751751 997 + 660311 4751781 995 + 660311 4751811 991 + 660311 4751841 972 + 660311 4751871 957 + 660311 4751901 938 + 660311 4751931 924 + 660311 4751961 913 + 660311 4751991 905 + 660311 4752021 899 + 660311 4752051 891 + 660311 4752081 886 + 660311 4752111 883 + 660311 4752141 879 + 660311 4752171 877 + 660311 4752201 876 + 660311 4752231 875 + 660311 4752261 874 + 660311 4752291 873 + 660311 4752321 871 + 660311 4752351 870 + 660311 4752381 869 + 660311 4752411 869 + 660311 4752441 869 + 660311 4752471 868 + 660311 4752501 867 + 660311 4752531 866 + 660311 4752561 865 + 660311 4752591 864 + 660311 4752621 864 + 660311 4752651 862 + 660311 4752681 861 + 660311 4752711 845 + 660311 4752741 836 + 660311 4752771 825 + 660311 4752801 809 + 660311 4752831 809 + 660311 4752861 809 + 660311 4752891 809 + 660311 4752921 809 + 660311 4752951 809 + 660311 4752981 817 + 660311 4753011 832 + 660311 4753041 855 + 660311 4753071 862 + 660311 4753101 861 + 660311 4753131 862 + 660311 4753161 863 + 660311 4753191 863 + 660311 4753221 864 + 660311 4753251 865 + 660311 4753281 866 + 660311 4753311 868 + 660311 4753341 869 + 660311 4753371 869 + 660311 4753401 869 + 660311 4753431 868 + 660311 4753461 867 + 660311 4753491 868 + 660311 4753521 868 + 660311 4753551 869 + 660311 4753581 868 + 660311 4753611 867 + 660311 4753641 867 + 660311 4753671 867 + 660311 4753701 867 + 660311 4753731 868 + 660311 4753761 867 + 660311 4753791 867 + 660311 4753821 866 + 660311 4753851 865 + 660311 4753881 864 + 660311 4753911 863 + 660311 4753941 861 + 660311 4753971 861 + 660311 4754001 860 + 660311 4754031 860 + 660311 4754061 861 + 660311 4754091 863 + 660311 4754121 865 + 660311 4754151 868 + 660311 4754181 878 + 660311 4754211 902 + 660311 4754241 938 + 660311 4754271 953 + 660311 4754301 956 + 660311 4754331 958 + 660311 4754361 960 + 660311 4754391 960 + 660311 4754421 959 + 660311 4754451 959 + 660311 4754481 958 + 660311 4754511 958 + 660311 4754541 957 + 660341 4751301 992 + 660341 4751331 991 + 660341 4751361 990 + 660341 4751391 991 + 660341 4751421 992 + 660341 4751451 991 + 660341 4751481 991 + 660341 4751511 991 + 660341 4751541 991 + 660341 4751571 991 + 660341 4751601 991 + 660341 4751631 990 + 660341 4751661 992 + 660341 4751691 995 + 660341 4751721 997 + 660341 4751751 996 + 660341 4751781 994 + 660341 4751811 989 + 660341 4751841 967 + 660341 4751871 952 + 660341 4751901 935 + 660341 4751931 922 + 660341 4751961 912 + 660341 4751991 904 + 660341 4752021 899 + 660341 4752051 893 + 660341 4752081 888 + 660341 4752111 883 + 660341 4752141 880 + 660341 4752171 877 + 660341 4752201 876 + 660341 4752231 875 + 660341 4752261 874 + 660341 4752291 873 + 660341 4752321 872 + 660341 4752351 870 + 660341 4752381 870 + 660341 4752411 870 + 660341 4752441 869 + 660341 4752471 868 + 660341 4752501 867 + 660341 4752531 866 + 660341 4752561 865 + 660341 4752591 864 + 660341 4752621 863 + 660341 4752651 862 + 660341 4752681 854 + 660341 4752711 838 + 660341 4752741 828 + 660341 4752771 818 + 660341 4752801 809 + 660341 4752831 809 + 660341 4752861 809 + 660341 4752891 809 + 660341 4752921 809 + 660341 4752951 809 + 660341 4752981 809 + 660341 4753011 826 + 660341 4753041 845 + 660341 4753071 857 + 660341 4753101 859 + 660341 4753131 861 + 660341 4753161 862 + 660341 4753191 863 + 660341 4753221 863 + 660341 4753251 865 + 660341 4753281 866 + 660341 4753311 866 + 660341 4753341 868 + 660341 4753371 868 + 660341 4753401 869 + 660341 4753431 869 + 660341 4753461 868 + 660341 4753491 868 + 660341 4753521 869 + 660341 4753551 869 + 660341 4753581 868 + 660341 4753611 868 + 660341 4753641 868 + 660341 4753671 868 + 660341 4753701 868 + 660341 4753731 868 + 660341 4753761 868 + 660341 4753791 868 + 660341 4753821 867 + 660341 4753851 867 + 660341 4753881 867 + 660341 4753911 865 + 660341 4753941 864 + 660341 4753971 862 + 660341 4754001 861 + 660341 4754031 861 + 660341 4754061 861 + 660341 4754091 863 + 660341 4754121 865 + 660341 4754151 867 + 660341 4754181 876 + 660341 4754211 899 + 660341 4754241 937 + 660341 4754271 953 + 660341 4754301 956 + 660341 4754331 958 + 660341 4754361 960 + 660341 4754391 960 + 660341 4754421 959 + 660341 4754451 959 + 660341 4754481 958 + 660341 4754511 958 + 660341 4754541 957 + 660371 4751301 993 + 660371 4751331 992 + 660371 4751361 992 + 660371 4751391 993 + 660371 4751421 993 + 660371 4751451 993 + 660371 4751481 992 + 660371 4751511 992 + 660371 4751541 992 + 660371 4751571 992 + 660371 4751601 992 + 660371 4751631 991 + 660371 4751661 992 + 660371 4751691 994 + 660371 4751721 996 + 660371 4751751 995 + 660371 4751781 994 + 660371 4751811 986 + 660371 4751841 968 + 660371 4751871 953 + 660371 4751901 938 + 660371 4751931 925 + 660371 4751961 914 + 660371 4751991 907 + 660371 4752021 901 + 660371 4752051 895 + 660371 4752081 890 + 660371 4752111 883 + 660371 4752141 880 + 660371 4752171 877 + 660371 4752201 876 + 660371 4752231 875 + 660371 4752261 874 + 660371 4752291 873 + 660371 4752321 872 + 660371 4752351 871 + 660371 4752381 870 + 660371 4752411 869 + 660371 4752441 868 + 660371 4752471 867 + 660371 4752501 866 + 660371 4752531 866 + 660371 4752561 865 + 660371 4752591 864 + 660371 4752621 862 + 660371 4752651 859 + 660371 4752681 844 + 660371 4752711 835 + 660371 4752741 825 + 660371 4752771 809 + 660371 4752801 809 + 660371 4752831 809 + 660371 4752861 809 + 660371 4752891 809 + 660371 4752921 809 + 660371 4752951 809 + 660371 4752981 809 + 660371 4753011 823 + 660371 4753041 840 + 660371 4753071 853 + 660371 4753101 856 + 660371 4753131 860 + 660371 4753161 863 + 660371 4753191 863 + 660371 4753221 863 + 660371 4753251 862 + 660371 4753281 864 + 660371 4753311 865 + 660371 4753341 866 + 660371 4753371 867 + 660371 4753401 867 + 660371 4753431 868 + 660371 4753461 868 + 660371 4753491 869 + 660371 4753521 869 + 660371 4753551 869 + 660371 4753581 868 + 660371 4753611 868 + 660371 4753641 869 + 660371 4753671 869 + 660371 4753701 869 + 660371 4753731 869 + 660371 4753761 869 + 660371 4753791 869 + 660371 4753821 868 + 660371 4753851 868 + 660371 4753881 869 + 660371 4753911 868 + 660371 4753941 866 + 660371 4753971 864 + 660371 4754001 863 + 660371 4754031 863 + 660371 4754061 862 + 660371 4754091 863 + 660371 4754121 865 + 660371 4754151 867 + 660371 4754181 875 + 660371 4754211 899 + 660371 4754241 937 + 660371 4754271 953 + 660371 4754301 956 + 660371 4754331 958 + 660371 4754361 960 + 660371 4754391 960 + 660371 4754421 959 + 660371 4754451 959 + 660371 4754481 958 + 660371 4754511 958 + 660371 4754541 957 + 660401 4751301 994 + 660401 4751331 994 + 660401 4751361 994 + 660401 4751391 994 + 660401 4751421 994 + 660401 4751451 994 + 660401 4751481 994 + 660401 4751511 994 + 660401 4751541 993 + 660401 4751571 994 + 660401 4751601 993 + 660401 4751631 992 + 660401 4751661 994 + 660401 4751691 994 + 660401 4751721 995 + 660401 4751751 994 + 660401 4751781 993 + 660401 4751811 984 + 660401 4751841 965 + 660401 4751871 951 + 660401 4751901 935 + 660401 4751931 924 + 660401 4751961 913 + 660401 4751991 906 + 660401 4752021 899 + 660401 4752051 893 + 660401 4752081 888 + 660401 4752111 884 + 660401 4752141 880 + 660401 4752171 877 + 660401 4752201 876 + 660401 4752231 875 + 660401 4752261 874 + 660401 4752291 873 + 660401 4752321 872 + 660401 4752351 871 + 660401 4752381 870 + 660401 4752411 869 + 660401 4752441 867 + 660401 4752471 867 + 660401 4752501 866 + 660401 4752531 866 + 660401 4752561 865 + 660401 4752591 864 + 660401 4752621 862 + 660401 4752651 857 + 660401 4752681 840 + 660401 4752711 830 + 660401 4752741 823 + 660401 4752771 809 + 660401 4752801 809 + 660401 4752831 809 + 660401 4752861 809 + 660401 4752891 809 + 660401 4752921 809 + 660401 4752951 809 + 660401 4752981 809 + 660401 4753011 818 + 660401 4753041 829 + 660401 4753071 843 + 660401 4753101 851 + 660401 4753131 856 + 660401 4753161 862 + 660401 4753191 862 + 660401 4753221 862 + 660401 4753251 861 + 660401 4753281 862 + 660401 4753311 863 + 660401 4753341 864 + 660401 4753371 866 + 660401 4753401 866 + 660401 4753431 868 + 660401 4753461 868 + 660401 4753491 868 + 660401 4753521 869 + 660401 4753551 869 + 660401 4753581 869 + 660401 4753611 869 + 660401 4753641 869 + 660401 4753671 869 + 660401 4753701 869 + 660401 4753731 869 + 660401 4753761 870 + 660401 4753791 869 + 660401 4753821 869 + 660401 4753851 869 + 660401 4753881 869 + 660401 4753911 869 + 660401 4753941 868 + 660401 4753971 866 + 660401 4754001 865 + 660401 4754031 864 + 660401 4754061 863 + 660401 4754091 864 + 660401 4754121 866 + 660401 4754151 867 + 660401 4754181 875 + 660401 4754211 899 + 660401 4754241 936 + 660401 4754271 953 + 660401 4754301 956 + 660401 4754331 958 + 660401 4754361 960 + 660401 4754391 960 + 660401 4754421 960 + 660401 4754451 959 + 660401 4754481 959 + 660401 4754511 958 + 660401 4754541 958 + 660431 4751301 996 + 660431 4751331 996 + 660431 4751361 995 + 660431 4751391 996 + 660431 4751421 996 + 660431 4751451 996 + 660431 4751481 995 + 660431 4751511 995 + 660431 4751541 995 + 660431 4751571 995 + 660431 4751601 994 + 660431 4751631 994 + 660431 4751661 995 + 660431 4751691 995 + 660431 4751721 995 + 660431 4751751 994 + 660431 4751781 993 + 660431 4751811 980 + 660431 4751841 961 + 660431 4751871 947 + 660431 4751901 931 + 660431 4751931 921 + 660431 4751961 913 + 660431 4751991 905 + 660431 4752021 897 + 660431 4752051 891 + 660431 4752081 886 + 660431 4752111 883 + 660431 4752141 880 + 660431 4752171 878 + 660431 4752201 876 + 660431 4752231 875 + 660431 4752261 874 + 660431 4752291 873 + 660431 4752321 871 + 660431 4752351 871 + 660431 4752381 870 + 660431 4752411 869 + 660431 4752441 866 + 660431 4752471 864 + 660431 4752501 864 + 660431 4752531 865 + 660431 4752561 865 + 660431 4752591 863 + 660431 4752621 862 + 660431 4752651 856 + 660431 4752681 838 + 660431 4752711 825 + 660431 4752741 809 + 660431 4752771 809 + 660431 4752801 809 + 660431 4752831 809 + 660431 4752861 809 + 660431 4752891 809 + 660431 4752921 809 + 660431 4752951 809 + 660431 4752981 809 + 660431 4753011 809 + 660431 4753041 823 + 660431 4753071 833 + 660431 4753101 839 + 660431 4753131 846 + 660431 4753161 857 + 660431 4753191 863 + 660431 4753221 862 + 660431 4753251 861 + 660431 4753281 861 + 660431 4753311 862 + 660431 4753341 863 + 660431 4753371 865 + 660431 4753401 865 + 660431 4753431 866 + 660431 4753461 868 + 660431 4753491 868 + 660431 4753521 869 + 660431 4753551 869 + 660431 4753581 869 + 660431 4753611 869 + 660431 4753641 869 + 660431 4753671 870 + 660431 4753701 870 + 660431 4753731 870 + 660431 4753761 870 + 660431 4753791 870 + 660431 4753821 869 + 660431 4753851 869 + 660431 4753881 869 + 660431 4753911 869 + 660431 4753941 869 + 660431 4753971 868 + 660431 4754001 867 + 660431 4754031 865 + 660431 4754061 864 + 660431 4754091 865 + 660431 4754121 866 + 660431 4754151 868 + 660431 4754181 875 + 660431 4754211 895 + 660431 4754241 935 + 660431 4754271 953 + 660431 4754301 956 + 660431 4754331 958 + 660431 4754361 960 + 660431 4754391 960 + 660431 4754421 960 + 660431 4754451 959 + 660431 4754481 959 + 660431 4754511 958 + 660431 4754541 958 + 660461 4751301 997 + 660461 4751331 997 + 660461 4751361 997 + 660461 4751391 997 + 660461 4751421 997 + 660461 4751451 997 + 660461 4751481 997 + 660461 4751511 997 + 660461 4751541 996 + 660461 4751571 996 + 660461 4751601 996 + 660461 4751631 995 + 660461 4751661 995 + 660461 4751691 994 + 660461 4751721 994 + 660461 4751751 993 + 660461 4751781 992 + 660461 4751811 977 + 660461 4751841 962 + 660461 4751871 948 + 660461 4751901 931 + 660461 4751931 918 + 660461 4751961 908 + 660461 4751991 900 + 660461 4752021 894 + 660461 4752051 890 + 660461 4752081 886 + 660461 4752111 883 + 660461 4752141 881 + 660461 4752171 878 + 660461 4752201 876 + 660461 4752231 875 + 660461 4752261 874 + 660461 4752291 873 + 660461 4752321 871 + 660461 4752351 870 + 660461 4752381 869 + 660461 4752411 867 + 660461 4752441 862 + 660461 4752471 862 + 660461 4752501 861 + 660461 4752531 862 + 660461 4752561 864 + 660461 4752591 864 + 660461 4752621 862 + 660461 4752651 853 + 660461 4752681 836 + 660461 4752711 822 + 660461 4752741 809 + 660461 4752771 809 + 660461 4752801 809 + 660461 4752831 809 + 660461 4752861 809 + 660461 4752891 809 + 660461 4752921 809 + 660461 4752951 809 + 660461 4752981 809 + 660461 4753011 809 + 660461 4753041 809 + 660461 4753071 818 + 660461 4753101 824 + 660461 4753131 832 + 660461 4753161 846 + 660461 4753191 857 + 660461 4753221 861 + 660461 4753251 861 + 660461 4753281 858 + 660461 4753311 861 + 660461 4753341 862 + 660461 4753371 865 + 660461 4753401 866 + 660461 4753431 869 + 660461 4753461 868 + 660461 4753491 870 + 660461 4753521 869 + 660461 4753551 869 + 660461 4753581 870 + 660461 4753611 869 + 660461 4753641 870 + 660461 4753671 870 + 660461 4753701 870 + 660461 4753731 870 + 660461 4753761 870 + 660461 4753791 870 + 660461 4753821 870 + 660461 4753851 870 + 660461 4753881 869 + 660461 4753911 869 + 660461 4753941 869 + 660461 4753971 869 + 660461 4754001 868 + 660461 4754031 867 + 660461 4754061 865 + 660461 4754091 866 + 660461 4754121 866 + 660461 4754151 868 + 660461 4754181 875 + 660461 4754211 897 + 660461 4754241 933 + 660461 4754271 953 + 660461 4754301 955 + 660461 4754331 958 + 660461 4754361 960 + 660461 4754391 960 + 660461 4754421 960 + 660461 4754451 959 + 660461 4754481 959 + 660461 4754511 958 + 660461 4754541 958 + 660491 4751301 998 + 660491 4751331 998 + 660491 4751361 998 + 660491 4751391 998 + 660491 4751421 998 + 660491 4751451 998 + 660491 4751481 998 + 660491 4751511 998 + 660491 4751541 997 + 660491 4751571 997 + 660491 4751601 997 + 660491 4751631 996 + 660491 4751661 996 + 660491 4751691 995 + 660491 4751721 994 + 660491 4751751 993 + 660491 4751781 992 + 660491 4751811 983 + 660491 4751841 967 + 660491 4751871 948 + 660491 4751901 932 + 660491 4751931 919 + 660491 4751961 910 + 660491 4751991 902 + 660491 4752021 893 + 660491 4752051 889 + 660491 4752081 886 + 660491 4752111 884 + 660491 4752141 881 + 660491 4752171 878 + 660491 4752201 876 + 660491 4752231 875 + 660491 4752261 874 + 660491 4752291 873 + 660491 4752321 871 + 660491 4752351 870 + 660491 4752381 869 + 660491 4752411 866 + 660491 4752441 862 + 660491 4752471 860 + 660491 4752501 859 + 660491 4752531 861 + 660491 4752561 863 + 660491 4752591 863 + 660491 4752621 863 + 660491 4752651 854 + 660491 4752681 835 + 660491 4752711 820 + 660491 4752741 813 + 660491 4752771 817 + 660491 4752801 809 + 660491 4752831 809 + 660491 4752861 809 + 660491 4752891 809 + 660491 4752921 809 + 660491 4752951 809 + 660491 4752981 809 + 660491 4753011 809 + 660491 4753041 809 + 660491 4753071 809 + 660491 4753101 809 + 660491 4753131 820 + 660491 4753161 829 + 660491 4753191 844 + 660491 4753221 854 + 660491 4753251 856 + 660491 4753281 855 + 660491 4753311 860 + 660491 4753341 863 + 660491 4753371 866 + 660491 4753401 869 + 660491 4753431 869 + 660491 4753461 869 + 660491 4753491 869 + 660491 4753521 870 + 660491 4753551 870 + 660491 4753581 870 + 660491 4753611 871 + 660491 4753641 870 + 660491 4753671 871 + 660491 4753701 871 + 660491 4753731 871 + 660491 4753761 871 + 660491 4753791 871 + 660491 4753821 871 + 660491 4753851 871 + 660491 4753881 871 + 660491 4753911 871 + 660491 4753941 870 + 660491 4753971 870 + 660491 4754001 869 + 660491 4754031 868 + 660491 4754061 866 + 660491 4754091 866 + 660491 4754121 866 + 660491 4754151 868 + 660491 4754181 875 + 660491 4754211 898 + 660491 4754241 930 + 660491 4754271 953 + 660491 4754301 955 + 660491 4754331 958 + 660491 4754361 960 + 660491 4754391 960 + 660491 4754421 960 + 660491 4754451 959 + 660491 4754481 959 + 660491 4754511 958 + 660491 4754541 958 + 660521 4751301 999 + 660521 4751331 999 + 660521 4751361 999 + 660521 4751391 999 + 660521 4751421 999 + 660521 4751451 999 + 660521 4751481 999 + 660521 4751511 999 + 660521 4751541 998 + 660521 4751571 997 + 660521 4751601 997 + 660521 4751631 996 + 660521 4751661 996 + 660521 4751691 995 + 660521 4751721 994 + 660521 4751751 993 + 660521 4751781 993 + 660521 4751811 978 + 660521 4751841 963 + 660521 4751871 946 + 660521 4751901 930 + 660521 4751931 919 + 660521 4751961 910 + 660521 4751991 902 + 660521 4752021 894 + 660521 4752051 889 + 660521 4752081 885 + 660521 4752111 883 + 660521 4752141 880 + 660521 4752171 878 + 660521 4752201 876 + 660521 4752231 875 + 660521 4752261 874 + 660521 4752291 872 + 660521 4752321 871 + 660521 4752351 870 + 660521 4752381 869 + 660521 4752411 866 + 660521 4752441 864 + 660521 4752471 862 + 660521 4752501 856 + 660521 4752531 859 + 660521 4752561 861 + 660521 4752591 861 + 660521 4752621 863 + 660521 4752651 854 + 660521 4752681 836 + 660521 4752711 819 + 660521 4752741 820 + 660521 4752771 828 + 660521 4752801 821 + 660521 4752831 809 + 660521 4752861 809 + 660521 4752891 809 + 660521 4752921 809 + 660521 4752951 809 + 660521 4752981 809 + 660521 4753011 809 + 660521 4753041 809 + 660521 4753071 809 + 660521 4753101 809 + 660521 4753131 809 + 660521 4753161 809 + 660521 4753191 826 + 660521 4753221 838 + 660521 4753251 843 + 660521 4753281 849 + 660521 4753311 860 + 660521 4753341 862 + 660521 4753371 865 + 660521 4753401 867 + 660521 4753431 869 + 660521 4753461 868 + 660521 4753491 869 + 660521 4753521 869 + 660521 4753551 870 + 660521 4753581 870 + 660521 4753611 871 + 660521 4753641 870 + 660521 4753671 871 + 660521 4753701 871 + 660521 4753731 871 + 660521 4753761 872 + 660521 4753791 872 + 660521 4753821 872 + 660521 4753851 871 + 660521 4753881 871 + 660521 4753911 871 + 660521 4753941 871 + 660521 4753971 870 + 660521 4754001 869 + 660521 4754031 868 + 660521 4754061 867 + 660521 4754091 866 + 660521 4754121 867 + 660521 4754151 868 + 660521 4754181 873 + 660521 4754211 894 + 660521 4754241 926 + 660521 4754271 953 + 660521 4754301 955 + 660521 4754331 957 + 660521 4754361 960 + 660521 4754391 960 + 660521 4754421 960 + 660521 4754451 959 + 660521 4754481 959 + 660521 4754511 958 + 660521 4754541 958 + 660551 4751301 1001 + 660551 4751331 1000 + 660551 4751361 1000 + 660551 4751391 1000 + 660551 4751421 1000 + 660551 4751451 1000 + 660551 4751481 1000 + 660551 4751511 1000 + 660551 4751541 999 + 660551 4751571 998 + 660551 4751601 997 + 660551 4751631 997 + 660551 4751661 996 + 660551 4751691 996 + 660551 4751721 995 + 660551 4751751 993 + 660551 4751781 992 + 660551 4751811 977 + 660551 4751841 959 + 660551 4751871 945 + 660551 4751901 930 + 660551 4751931 915 + 660551 4751961 907 + 660551 4751991 900 + 660551 4752021 891 + 660551 4752051 887 + 660551 4752081 884 + 660551 4752111 882 + 660551 4752141 880 + 660551 4752171 877 + 660551 4752201 876 + 660551 4752231 875 + 660551 4752261 874 + 660551 4752291 872 + 660551 4752321 870 + 660551 4752351 869 + 660551 4752381 868 + 660551 4752411 866 + 660551 4752441 864 + 660551 4752471 862 + 660551 4752501 855 + 660551 4752531 854 + 660551 4752561 855 + 660551 4752591 852 + 660551 4752621 851 + 660551 4752651 847 + 660551 4752681 835 + 660551 4752711 821 + 660551 4752741 830 + 660551 4752771 837 + 660551 4752801 825 + 660551 4752831 814 + 660551 4752861 809 + 660551 4752891 809 + 660551 4752921 809 + 660551 4752951 809 + 660551 4752981 809 + 660551 4753011 809 + 660551 4753041 809 + 660551 4753071 809 + 660551 4753101 809 + 660551 4753131 809 + 660551 4753161 809 + 660551 4753191 817 + 660551 4753221 824 + 660551 4753251 831 + 660551 4753281 838 + 660551 4753311 854 + 660551 4753341 862 + 660551 4753371 864 + 660551 4753401 865 + 660551 4753431 867 + 660551 4753461 867 + 660551 4753491 868 + 660551 4753521 869 + 660551 4753551 870 + 660551 4753581 870 + 660551 4753611 871 + 660551 4753641 871 + 660551 4753671 871 + 660551 4753701 871 + 660551 4753731 871 + 660551 4753761 871 + 660551 4753791 871 + 660551 4753821 872 + 660551 4753851 872 + 660551 4753881 872 + 660551 4753911 872 + 660551 4753941 871 + 660551 4753971 871 + 660551 4754001 870 + 660551 4754031 869 + 660551 4754061 867 + 660551 4754091 866 + 660551 4754121 867 + 660551 4754151 867 + 660551 4754181 872 + 660551 4754211 889 + 660551 4754241 918 + 660551 4754271 951 + 660551 4754301 955 + 660551 4754331 957 + 660551 4754361 959 + 660551 4754391 960 + 660551 4754421 960 + 660551 4754451 959 + 660551 4754481 959 + 660551 4754511 958 + 660551 4754541 958 + 660581 4751301 1002 + 660581 4751331 1001 + 660581 4751361 1001 + 660581 4751391 1001 + 660581 4751421 1001 + 660581 4751451 1001 + 660581 4751481 1001 + 660581 4751511 1000 + 660581 4751541 999 + 660581 4751571 999 + 660581 4751601 998 + 660581 4751631 997 + 660581 4751661 997 + 660581 4751691 996 + 660581 4751721 995 + 660581 4751751 993 + 660581 4751781 991 + 660581 4751811 974 + 660581 4751841 957 + 660581 4751871 941 + 660581 4751901 926 + 660581 4751931 913 + 660581 4751961 905 + 660581 4751991 896 + 660581 4752021 890 + 660581 4752051 886 + 660581 4752081 884 + 660581 4752111 882 + 660581 4752141 880 + 660581 4752171 878 + 660581 4752201 877 + 660581 4752231 876 + 660581 4752261 874 + 660581 4752291 871 + 660581 4752321 870 + 660581 4752351 868 + 660581 4752381 866 + 660581 4752411 864 + 660581 4752441 862 + 660581 4752471 858 + 660581 4752501 852 + 660581 4752531 844 + 660581 4752561 843 + 660581 4752591 838 + 660581 4752621 837 + 660581 4752651 836 + 660581 4752681 830 + 660581 4752711 827 + 660581 4752741 843 + 660581 4752771 845 + 660581 4752801 829 + 660581 4752831 816 + 660581 4752861 809 + 660581 4752891 809 + 660581 4752921 809 + 660581 4752951 809 + 660581 4752981 809 + 660581 4753011 809 + 660581 4753041 809 + 660581 4753071 809 + 660581 4753101 809 + 660581 4753131 809 + 660581 4753161 809 + 660581 4753191 809 + 660581 4753221 813 + 660581 4753251 820 + 660581 4753281 832 + 660581 4753311 846 + 660581 4753341 861 + 660581 4753371 863 + 660581 4753401 864 + 660581 4753431 866 + 660581 4753461 867 + 660581 4753491 868 + 660581 4753521 869 + 660581 4753551 870 + 660581 4753581 870 + 660581 4753611 872 + 660581 4753641 871 + 660581 4753671 871 + 660581 4753701 872 + 660581 4753731 871 + 660581 4753761 871 + 660581 4753791 871 + 660581 4753821 871 + 660581 4753851 871 + 660581 4753881 871 + 660581 4753911 872 + 660581 4753941 872 + 660581 4753971 871 + 660581 4754001 869 + 660581 4754031 869 + 660581 4754061 867 + 660581 4754091 867 + 660581 4754121 867 + 660581 4754151 867 + 660581 4754181 871 + 660581 4754211 887 + 660581 4754241 925 + 660581 4754271 949 + 660581 4754301 955 + 660581 4754331 958 + 660581 4754361 959 + 660581 4754391 960 + 660581 4754421 960 + 660581 4754451 959 + 660581 4754481 959 + 660581 4754511 959 + 660581 4754541 958 + 660611 4751301 1002 + 660611 4751331 1002 + 660611 4751361 1003 + 660611 4751391 1002 + 660611 4751421 1003 + 660611 4751451 1002 + 660611 4751481 1002 + 660611 4751511 1001 + 660611 4751541 1000 + 660611 4751571 999 + 660611 4751601 999 + 660611 4751631 998 + 660611 4751661 997 + 660611 4751691 996 + 660611 4751721 994 + 660611 4751751 993 + 660611 4751781 986 + 660611 4751811 968 + 660611 4751841 948 + 660611 4751871 939 + 660611 4751901 924 + 660611 4751931 912 + 660611 4751961 903 + 660611 4751991 892 + 660611 4752021 889 + 660611 4752051 887 + 660611 4752081 884 + 660611 4752111 882 + 660611 4752141 881 + 660611 4752171 879 + 660611 4752201 878 + 660611 4752231 876 + 660611 4752261 874 + 660611 4752291 871 + 660611 4752321 869 + 660611 4752351 866 + 660611 4752381 863 + 660611 4752411 861 + 660611 4752441 856 + 660611 4752471 849 + 660611 4752501 844 + 660611 4752531 839 + 660611 4752561 838 + 660611 4752591 838 + 660611 4752621 837 + 660611 4752651 830 + 660611 4752681 828 + 660611 4752711 835 + 660611 4752741 850 + 660611 4752771 850 + 660611 4752801 831 + 660611 4752831 820 + 660611 4752861 818 + 660611 4752891 809 + 660611 4752921 809 + 660611 4752951 809 + 660611 4752981 809 + 660611 4753011 809 + 660611 4753041 809 + 660611 4753071 809 + 660611 4753101 809 + 660611 4753131 809 + 660611 4753161 809 + 660611 4753191 809 + 660611 4753221 809 + 660611 4753251 809 + 660611 4753281 825 + 660611 4753311 839 + 660611 4753341 854 + 660611 4753371 860 + 660611 4753401 862 + 660611 4753431 867 + 660611 4753461 869 + 660611 4753491 869 + 660611 4753521 869 + 660611 4753551 870 + 660611 4753581 870 + 660611 4753611 871 + 660611 4753641 871 + 660611 4753671 872 + 660611 4753701 872 + 660611 4753731 872 + 660611 4753761 872 + 660611 4753791 871 + 660611 4753821 871 + 660611 4753851 871 + 660611 4753881 871 + 660611 4753911 871 + 660611 4753941 871 + 660611 4753971 871 + 660611 4754001 869 + 660611 4754031 869 + 660611 4754061 867 + 660611 4754091 867 + 660611 4754121 867 + 660611 4754151 867 + 660611 4754181 872 + 660611 4754211 886 + 660611 4754241 912 + 660611 4754271 941 + 660611 4754301 954 + 660611 4754331 959 + 660611 4754361 960 + 660611 4754391 960 + 660611 4754421 960 + 660611 4754451 960 + 660611 4754481 959 + 660611 4754511 959 + 660611 4754541 958 + 660641 4751301 1002 + 660641 4751331 1003 + 660641 4751361 1003 + 660641 4751391 1004 + 660641 4751421 1004 + 660641 4751451 1004 + 660641 4751481 1003 + 660641 4751511 1002 + 660641 4751541 1001 + 660641 4751571 1000 + 660641 4751601 1000 + 660641 4751631 998 + 660641 4751661 997 + 660641 4751691 996 + 660641 4751721 994 + 660641 4751751 992 + 660641 4751781 978 + 660641 4751811 965 + 660641 4751841 949 + 660641 4751871 939 + 660641 4751901 926 + 660641 4751931 914 + 660641 4751961 904 + 660641 4751991 893 + 660641 4752021 890 + 660641 4752051 887 + 660641 4752081 884 + 660641 4752111 882 + 660641 4752141 881 + 660641 4752171 880 + 660641 4752201 878 + 660641 4752231 876 + 660641 4752261 874 + 660641 4752291 871 + 660641 4752321 868 + 660641 4752351 863 + 660641 4752381 861 + 660641 4752411 854 + 660641 4752441 851 + 660641 4752471 846 + 660641 4752501 842 + 660641 4752531 846 + 660641 4752561 852 + 660641 4752591 851 + 660641 4752621 843 + 660641 4752651 832 + 660641 4752681 836 + 660641 4752711 846 + 660641 4752741 855 + 660641 4752771 852 + 660641 4752801 832 + 660641 4752831 828 + 660641 4752861 825 + 660641 4752891 818 + 660641 4752921 809 + 660641 4752951 809 + 660641 4752981 809 + 660641 4753011 809 + 660641 4753041 809 + 660641 4753071 809 + 660641 4753101 809 + 660641 4753131 809 + 660641 4753161 809 + 660641 4753191 809 + 660641 4753221 809 + 660641 4753251 809 + 660641 4753281 815 + 660641 4753311 831 + 660641 4753341 840 + 660641 4753371 850 + 660641 4753401 859 + 660641 4753431 865 + 660641 4753461 869 + 660641 4753491 871 + 660641 4753521 870 + 660641 4753551 871 + 660641 4753581 871 + 660641 4753611 871 + 660641 4753641 871 + 660641 4753671 872 + 660641 4753701 872 + 660641 4753731 872 + 660641 4753761 873 + 660641 4753791 873 + 660641 4753821 873 + 660641 4753851 872 + 660641 4753881 871 + 660641 4753911 871 + 660641 4753941 870 + 660641 4753971 870 + 660641 4754001 870 + 660641 4754031 869 + 660641 4754061 867 + 660641 4754091 867 + 660641 4754121 867 + 660641 4754151 867 + 660641 4754181 872 + 660641 4754211 885 + 660641 4754241 907 + 660641 4754271 943 + 660641 4754301 958 + 660641 4754331 960 + 660641 4754361 960 + 660641 4754391 960 + 660641 4754421 960 + 660641 4754451 960 + 660641 4754481 959 + 660641 4754511 959 + 660641 4754541 958 + 660671 4751301 1002 + 660671 4751331 1004 + 660671 4751361 1004 + 660671 4751391 1004 + 660671 4751421 1005 + 660671 4751451 1005 + 660671 4751481 1005 + 660671 4751511 1004 + 660671 4751541 1003 + 660671 4751571 1001 + 660671 4751601 1000 + 660671 4751631 999 + 660671 4751661 998 + 660671 4751691 996 + 660671 4751721 995 + 660671 4751751 992 + 660671 4751781 981 + 660671 4751811 967 + 660671 4751841 955 + 660671 4751871 945 + 660671 4751901 930 + 660671 4751931 915 + 660671 4751961 905 + 660671 4751991 897 + 660671 4752021 891 + 660671 4752051 888 + 660671 4752081 885 + 660671 4752111 883 + 660671 4752141 881 + 660671 4752171 880 + 660671 4752201 878 + 660671 4752231 877 + 660671 4752261 874 + 660671 4752291 870 + 660671 4752321 867 + 660671 4752351 863 + 660671 4752381 860 + 660671 4752411 862 + 660671 4752441 853 + 660671 4752471 844 + 660671 4752501 852 + 660671 4752531 859 + 660671 4752561 863 + 660671 4752591 856 + 660671 4752621 845 + 660671 4752651 838 + 660671 4752681 844 + 660671 4752711 854 + 660671 4752741 858 + 660671 4752771 850 + 660671 4752801 836 + 660671 4752831 840 + 660671 4752861 834 + 660671 4752891 828 + 660671 4752921 809 + 660671 4752951 809 + 660671 4752981 809 + 660671 4753011 809 + 660671 4753041 809 + 660671 4753071 809 + 660671 4753101 809 + 660671 4753131 809 + 660671 4753161 809 + 660671 4753191 809 + 660671 4753221 809 + 660671 4753251 809 + 660671 4753281 809 + 660671 4753311 818 + 660671 4753341 829 + 660671 4753371 840 + 660671 4753401 853 + 660671 4753431 862 + 660671 4753461 868 + 660671 4753491 869 + 660671 4753521 871 + 660671 4753551 871 + 660671 4753581 871 + 660671 4753611 871 + 660671 4753641 872 + 660671 4753671 872 + 660671 4753701 873 + 660671 4753731 873 + 660671 4753761 874 + 660671 4753791 874 + 660671 4753821 873 + 660671 4753851 873 + 660671 4753881 873 + 660671 4753911 872 + 660671 4753941 871 + 660671 4753971 870 + 660671 4754001 869 + 660671 4754031 869 + 660671 4754061 867 + 660671 4754091 867 + 660671 4754121 867 + 660671 4754151 867 + 660671 4754181 871 + 660671 4754211 886 + 660671 4754241 910 + 660671 4754271 944 + 660671 4754301 961 + 660671 4754331 960 + 660671 4754361 960 + 660671 4754391 960 + 660671 4754421 960 + 660671 4754451 960 + 660671 4754481 959 + 660671 4754511 958 + 660671 4754541 958 + 660701 4751301 1000 + 660701 4751331 1003 + 660701 4751361 1005 + 660701 4751391 1005 + 660701 4751421 1006 + 660701 4751451 1006 + 660701 4751481 1006 + 660701 4751511 1005 + 660701 4751541 1004 + 660701 4751571 1002 + 660701 4751601 1001 + 660701 4751631 1000 + 660701 4751661 998 + 660701 4751691 997 + 660701 4751721 996 + 660701 4751751 993 + 660701 4751781 981 + 660701 4751811 967 + 660701 4751841 955 + 660701 4751871 943 + 660701 4751901 927 + 660701 4751931 915 + 660701 4751961 904 + 660701 4751991 897 + 660701 4752021 892 + 660701 4752051 889 + 660701 4752081 886 + 660701 4752111 884 + 660701 4752141 882 + 660701 4752171 880 + 660701 4752201 878 + 660701 4752231 877 + 660701 4752261 874 + 660701 4752291 870 + 660701 4752321 867 + 660701 4752351 865 + 660701 4752381 863 + 660701 4752411 859 + 660701 4752441 847 + 660701 4752471 852 + 660701 4752501 861 + 660701 4752531 864 + 660701 4752561 865 + 660701 4752591 856 + 660701 4752621 843 + 660701 4752651 841 + 660701 4752681 847 + 660701 4752711 861 + 660701 4752741 859 + 660701 4752771 850 + 660701 4752801 846 + 660701 4752831 849 + 660701 4752861 849 + 660701 4752891 832 + 660701 4752921 809 + 660701 4752951 809 + 660701 4752981 809 + 660701 4753011 809 + 660701 4753041 809 + 660701 4753071 820 + 660701 4753101 818 + 660701 4753131 809 + 660701 4753161 809 + 660701 4753191 809 + 660701 4753221 809 + 660701 4753251 809 + 660701 4753281 809 + 660701 4753311 809 + 660701 4753341 819 + 660701 4753371 832 + 660701 4753401 844 + 660701 4753431 853 + 660701 4753461 861 + 660701 4753491 865 + 660701 4753521 869 + 660701 4753551 869 + 660701 4753581 870 + 660701 4753611 870 + 660701 4753641 872 + 660701 4753671 872 + 660701 4753701 873 + 660701 4753731 874 + 660701 4753761 874 + 660701 4753791 874 + 660701 4753821 874 + 660701 4753851 874 + 660701 4753881 874 + 660701 4753911 874 + 660701 4753941 873 + 660701 4753971 870 + 660701 4754001 869 + 660701 4754031 868 + 660701 4754061 867 + 660701 4754091 867 + 660701 4754121 868 + 660701 4754151 867 + 660701 4754181 871 + 660701 4754211 888 + 660701 4754241 907 + 660701 4754271 940 + 660701 4754301 955 + 660701 4754331 957 + 660701 4754361 959 + 660701 4754391 960 + 660701 4754421 960 + 660701 4754451 959 + 660701 4754481 959 + 660701 4754511 958 + 660701 4754541 958 + 660731 4751301 998 + 660731 4751331 1003 + 660731 4751361 1005 + 660731 4751391 1006 + 660731 4751421 1006 + 660731 4751451 1006 + 660731 4751481 1006 + 660731 4751511 1006 + 660731 4751541 1004 + 660731 4751571 1002 + 660731 4751601 1001 + 660731 4751631 1000 + 660731 4751661 998 + 660731 4751691 999 + 660731 4751721 997 + 660731 4751751 993 + 660731 4751781 978 + 660731 4751811 964 + 660731 4751841 953 + 660731 4751871 941 + 660731 4751901 928 + 660731 4751931 913 + 660731 4751961 903 + 660731 4751991 897 + 660731 4752021 892 + 660731 4752051 889 + 660731 4752081 886 + 660731 4752111 884 + 660731 4752141 882 + 660731 4752171 880 + 660731 4752201 878 + 660731 4752231 876 + 660731 4752261 874 + 660731 4752291 871 + 660731 4752321 869 + 660731 4752351 866 + 660731 4752381 862 + 660731 4752411 853 + 660731 4752441 852 + 660731 4752471 860 + 660731 4752501 864 + 660731 4752531 867 + 660731 4752561 863 + 660731 4752591 852 + 660731 4752621 842 + 660731 4752651 843 + 660731 4752681 850 + 660731 4752711 863 + 660731 4752741 859 + 660731 4752771 853 + 660731 4752801 859 + 660731 4752831 862 + 660731 4752861 848 + 660731 4752891 825 + 660731 4752921 809 + 660731 4752951 809 + 660731 4752981 809 + 660731 4753011 809 + 660731 4753041 831 + 660731 4753071 839 + 660731 4753101 835 + 660731 4753131 831 + 660731 4753161 809 + 660731 4753191 809 + 660731 4753221 809 + 660731 4753251 809 + 660731 4753281 809 + 660731 4753311 809 + 660731 4753341 809 + 660731 4753371 826 + 660731 4753401 833 + 660731 4753431 845 + 660731 4753461 855 + 660731 4753491 861 + 660731 4753521 865 + 660731 4753551 867 + 660731 4753581 868 + 660731 4753611 871 + 660731 4753641 873 + 660731 4753671 873 + 660731 4753701 873 + 660731 4753731 874 + 660731 4753761 874 + 660731 4753791 875 + 660731 4753821 875 + 660731 4753851 875 + 660731 4753881 875 + 660731 4753911 875 + 660731 4753941 875 + 660731 4753971 873 + 660731 4754001 870 + 660731 4754031 869 + 660731 4754061 868 + 660731 4754091 867 + 660731 4754121 868 + 660731 4754151 868 + 660731 4754181 874 + 660731 4754211 889 + 660731 4754241 904 + 660731 4754271 937 + 660731 4754301 954 + 660731 4754331 956 + 660731 4754361 959 + 660731 4754391 960 + 660731 4754421 960 + 660731 4754451 959 + 660731 4754481 959 + 660731 4754511 958 + 660731 4754541 958 + 660761 4751301 1002 + 660761 4751331 1004 + 660761 4751361 1006 + 660761 4751391 1006 + 660761 4751421 1006 + 660761 4751451 1006 + 660761 4751481 1007 + 660761 4751511 1006 + 660761 4751541 1004 + 660761 4751571 1003 + 660761 4751601 1002 + 660761 4751631 1001 + 660761 4751661 1000 + 660761 4751691 1000 + 660761 4751721 997 + 660761 4751751 989 + 660761 4751781 972 + 660761 4751811 960 + 660761 4751841 949 + 660761 4751871 939 + 660761 4751901 924 + 660761 4751931 912 + 660761 4751961 901 + 660761 4751991 897 + 660761 4752021 892 + 660761 4752051 891 + 660761 4752081 886 + 660761 4752111 884 + 660761 4752141 882 + 660761 4752171 881 + 660761 4752201 879 + 660761 4752231 877 + 660761 4752261 877 + 660761 4752291 873 + 660761 4752321 869 + 660761 4752351 866 + 660761 4752381 862 + 660761 4752411 852 + 660761 4752441 855 + 660761 4752471 863 + 660761 4752501 866 + 660761 4752531 864 + 660761 4752561 856 + 660761 4752591 846 + 660761 4752621 842 + 660761 4752651 847 + 660761 4752681 854 + 660761 4752711 860 + 660761 4752741 859 + 660761 4752771 860 + 660761 4752801 863 + 660761 4752831 862 + 660761 4752861 845 + 660761 4752891 823 + 660761 4752921 809 + 660761 4752951 809 + 660761 4752981 809 + 660761 4753011 809 + 660761 4753041 835 + 660761 4753071 854 + 660761 4753101 847 + 660761 4753131 839 + 660761 4753161 809 + 660761 4753191 809 + 660761 4753221 809 + 660761 4753251 809 + 660761 4753281 809 + 660761 4753311 809 + 660761 4753341 809 + 660761 4753371 818 + 660761 4753401 826 + 660761 4753431 835 + 660761 4753461 848 + 660761 4753491 857 + 660761 4753521 861 + 660761 4753551 865 + 660761 4753581 869 + 660761 4753611 870 + 660761 4753641 871 + 660761 4753671 873 + 660761 4753701 873 + 660761 4753731 874 + 660761 4753761 874 + 660761 4753791 875 + 660761 4753821 875 + 660761 4753851 875 + 660761 4753881 875 + 660761 4753911 875 + 660761 4753941 875 + 660761 4753971 875 + 660761 4754001 873 + 660761 4754031 871 + 660761 4754061 869 + 660761 4754091 868 + 660761 4754121 868 + 660761 4754151 870 + 660761 4754181 876 + 660761 4754211 890 + 660761 4754241 905 + 660761 4754271 936 + 660761 4754301 953 + 660761 4754331 956 + 660761 4754361 959 + 660761 4754391 960 + 660761 4754421 960 + 660761 4754451 959 + 660761 4754481 959 + 660761 4754511 959 + 660761 4754541 959 + 660791 4751301 1004 + 660791 4751331 1005 + 660791 4751361 1006 + 660791 4751391 1006 + 660791 4751421 1007 + 660791 4751451 1006 + 660791 4751481 1006 + 660791 4751511 1005 + 660791 4751541 1003 + 660791 4751571 1003 + 660791 4751601 1002 + 660791 4751631 1001 + 660791 4751661 1001 + 660791 4751691 999 + 660791 4751721 993 + 660791 4751751 980 + 660791 4751781 966 + 660791 4751811 956 + 660791 4751841 943 + 660791 4751871 935 + 660791 4751901 923 + 660791 4751931 908 + 660791 4751961 903 + 660791 4751991 901 + 660791 4752021 895 + 660791 4752051 890 + 660791 4752081 888 + 660791 4752111 885 + 660791 4752141 883 + 660791 4752171 881 + 660791 4752201 879 + 660791 4752231 878 + 660791 4752261 877 + 660791 4752291 874 + 660791 4752321 870 + 660791 4752351 866 + 660791 4752381 862 + 660791 4752411 853 + 660791 4752441 861 + 660791 4752471 865 + 660791 4752501 867 + 660791 4752531 863 + 660791 4752561 854 + 660791 4752591 844 + 660791 4752621 843 + 660791 4752651 849 + 660791 4752681 861 + 660791 4752711 861 + 660791 4752741 859 + 660791 4752771 861 + 660791 4752801 864 + 660791 4752831 863 + 660791 4752861 849 + 660791 4752891 828 + 660791 4752921 809 + 660791 4752951 809 + 660791 4752981 809 + 660791 4753011 821 + 660791 4753041 835 + 660791 4753071 852 + 660791 4753101 846 + 660791 4753131 836 + 660791 4753161 823 + 660791 4753191 809 + 660791 4753221 809 + 660791 4753251 809 + 660791 4753281 809 + 660791 4753311 809 + 660791 4753341 809 + 660791 4753371 809 + 660791 4753401 819 + 660791 4753431 830 + 660791 4753461 840 + 660791 4753491 854 + 660791 4753521 855 + 660791 4753551 862 + 660791 4753581 869 + 660791 4753611 870 + 660791 4753641 870 + 660791 4753671 871 + 660791 4753701 872 + 660791 4753731 873 + 660791 4753761 874 + 660791 4753791 875 + 660791 4753821 875 + 660791 4753851 876 + 660791 4753881 876 + 660791 4753911 876 + 660791 4753941 876 + 660791 4753971 876 + 660791 4754001 876 + 660791 4754031 873 + 660791 4754061 870 + 660791 4754091 869 + 660791 4754121 868 + 660791 4754151 868 + 660791 4754181 877 + 660791 4754211 891 + 660791 4754241 907 + 660791 4754271 937 + 660791 4754301 955 + 660791 4754331 957 + 660791 4754361 959 + 660791 4754391 960 + 660791 4754421 960 + 660791 4754451 959 + 660791 4754481 959 + 660791 4754511 959 + 660791 4754541 959 + 660821 4751301 1005 + 660821 4751331 1006 + 660821 4751361 1007 + 660821 4751391 1007 + 660821 4751421 1008 + 660821 4751451 1007 + 660821 4751481 1007 + 660821 4751511 1006 + 660821 4751541 1003 + 660821 4751571 1003 + 660821 4751601 1002 + 660821 4751631 1001 + 660821 4751661 1000 + 660821 4751691 995 + 660821 4751721 983 + 660821 4751751 969 + 660821 4751781 960 + 660821 4751811 950 + 660821 4751841 941 + 660821 4751871 933 + 660821 4751901 922 + 660821 4751931 914 + 660821 4751961 909 + 660821 4751991 900 + 660821 4752021 896 + 660821 4752051 893 + 660821 4752081 890 + 660821 4752111 886 + 660821 4752141 883 + 660821 4752171 882 + 660821 4752201 880 + 660821 4752231 878 + 660821 4752261 876 + 660821 4752291 874 + 660821 4752321 870 + 660821 4752351 865 + 660821 4752381 861 + 660821 4752411 858 + 660821 4752441 866 + 660821 4752471 868 + 660821 4752501 866 + 660821 4752531 863 + 660821 4752561 853 + 660821 4752591 843 + 660821 4752621 844 + 660821 4752651 851 + 660821 4752681 861 + 660821 4752711 861 + 660821 4752741 861 + 660821 4752771 861 + 660821 4752801 863 + 660821 4752831 863 + 660821 4752861 853 + 660821 4752891 832 + 660821 4752921 809 + 660821 4752951 809 + 660821 4752981 809 + 660821 4753011 820 + 660821 4753041 839 + 660821 4753071 850 + 660821 4753101 845 + 660821 4753131 835 + 660821 4753161 824 + 660821 4753191 819 + 660821 4753221 809 + 660821 4753251 809 + 660821 4753281 809 + 660821 4753311 809 + 660821 4753341 809 + 660821 4753371 809 + 660821 4753401 809 + 660821 4753431 823 + 660821 4753461 832 + 660821 4753491 839 + 660821 4753521 846 + 660821 4753551 859 + 660821 4753581 868 + 660821 4753611 870 + 660821 4753641 871 + 660821 4753671 871 + 660821 4753701 872 + 660821 4753731 873 + 660821 4753761 874 + 660821 4753791 875 + 660821 4753821 876 + 660821 4753851 876 + 660821 4753881 876 + 660821 4753911 877 + 660821 4753941 877 + 660821 4753971 878 + 660821 4754001 877 + 660821 4754031 874 + 660821 4754061 872 + 660821 4754091 870 + 660821 4754121 868 + 660821 4754151 868 + 660821 4754181 879 + 660821 4754211 894 + 660821 4754241 910 + 660821 4754271 938 + 660821 4754301 960 + 660821 4754331 960 + 660821 4754361 958 + 660821 4754391 960 + 660821 4754421 960 + 660821 4754451 960 + 660821 4754481 959 + 660821 4754511 959 + 660821 4754541 959 + 660851 4751301 1006 + 660851 4751331 1006 + 660851 4751361 1008 + 660851 4751391 1010 + 660851 4751421 1011 + 660851 4751451 1010 + 660851 4751481 1008 + 660851 4751511 1007 + 660851 4751541 1004 + 660851 4751571 1002 + 660851 4751601 1001 + 660851 4751631 1000 + 660851 4751661 998 + 660851 4751691 983 + 660851 4751721 971 + 660851 4751751 958 + 660851 4751781 951 + 660851 4751811 944 + 660851 4751841 938 + 660851 4751871 929 + 660851 4751901 922 + 660851 4751931 917 + 660851 4751961 911 + 660851 4751991 905 + 660851 4752021 898 + 660851 4752051 895 + 660851 4752081 891 + 660851 4752111 886 + 660851 4752141 883 + 660851 4752171 881 + 660851 4752201 880 + 660851 4752231 878 + 660851 4752261 876 + 660851 4752291 873 + 660851 4752321 870 + 660851 4752351 865 + 660851 4752381 861 + 660851 4752411 861 + 660851 4752441 870 + 660851 4752471 869 + 660851 4752501 866 + 660851 4752531 861 + 660851 4752561 848 + 660851 4752591 843 + 660851 4752621 846 + 660851 4752651 859 + 660851 4752681 861 + 660851 4752711 861 + 660851 4752741 861 + 660851 4752771 861 + 660851 4752801 863 + 660851 4752831 858 + 660851 4752861 845 + 660851 4752891 829 + 660851 4752921 809 + 660851 4752951 809 + 660851 4752981 809 + 660851 4753011 822 + 660851 4753041 844 + 660851 4753071 855 + 660851 4753101 848 + 660851 4753131 839 + 660851 4753161 829 + 660851 4753191 834 + 660851 4753221 821 + 660851 4753251 809 + 660851 4753281 809 + 660851 4753311 809 + 660851 4753341 809 + 660851 4753371 809 + 660851 4753401 809 + 660851 4753431 809 + 660851 4753461 820 + 660851 4753491 828 + 660851 4753521 843 + 660851 4753551 855 + 660851 4753581 864 + 660851 4753611 869 + 660851 4753641 870 + 660851 4753671 871 + 660851 4753701 872 + 660851 4753731 873 + 660851 4753761 874 + 660851 4753791 875 + 660851 4753821 876 + 660851 4753851 877 + 660851 4753881 877 + 660851 4753911 877 + 660851 4753941 877 + 660851 4753971 877 + 660851 4754001 876 + 660851 4754031 874 + 660851 4754061 872 + 660851 4754091 870 + 660851 4754121 868 + 660851 4754151 871 + 660851 4754181 882 + 660851 4754211 898 + 660851 4754241 914 + 660851 4754271 946 + 660851 4754301 956 + 660851 4754331 957 + 660851 4754361 958 + 660851 4754391 960 + 660851 4754421 960 + 660851 4754451 960 + 660851 4754481 959 + 660851 4754511 959 + 660851 4754541 960 + 660881 4751301 1007 + 660881 4751331 1008 + 660881 4751361 1010 + 660881 4751391 1012 + 660881 4751421 1013 + 660881 4751451 1012 + 660881 4751481 1010 + 660881 4751511 1007 + 660881 4751541 1005 + 660881 4751571 1004 + 660881 4751601 1000 + 660881 4751631 999 + 660881 4751661 988 + 660881 4751691 973 + 660881 4751721 966 + 660881 4751751 967 + 660881 4751781 967 + 660881 4751811 964 + 660881 4751841 954 + 660881 4751871 942 + 660881 4751901 930 + 660881 4751931 924 + 660881 4751961 917 + 660881 4751991 910 + 660881 4752021 907 + 660881 4752051 898 + 660881 4752081 892 + 660881 4752111 886 + 660881 4752141 883 + 660881 4752171 882 + 660881 4752201 879 + 660881 4752231 877 + 660881 4752261 876 + 660881 4752291 872 + 660881 4752321 869 + 660881 4752351 864 + 660881 4752381 861 + 660881 4752411 865 + 660881 4752441 871 + 660881 4752471 868 + 660881 4752501 867 + 660881 4752531 859 + 660881 4752561 846 + 660881 4752591 843 + 660881 4752621 853 + 660881 4752651 861 + 660881 4752681 861 + 660881 4752711 861 + 660881 4752741 861 + 660881 4752771 862 + 660881 4752801 859 + 660881 4752831 844 + 660881 4752861 830 + 660881 4752891 817 + 660881 4752921 809 + 660881 4752951 809 + 660881 4752981 809 + 660881 4753011 830 + 660881 4753041 851 + 660881 4753071 860 + 660881 4753101 855 + 660881 4753131 843 + 660881 4753161 839 + 660881 4753191 845 + 660881 4753221 826 + 660881 4753251 809 + 660881 4753281 809 + 660881 4753311 809 + 660881 4753341 809 + 660881 4753371 809 + 660881 4753401 809 + 660881 4753431 809 + 660881 4753461 809 + 660881 4753491 822 + 660881 4753521 836 + 660881 4753551 849 + 660881 4753581 859 + 660881 4753611 868 + 660881 4753641 870 + 660881 4753671 871 + 660881 4753701 872 + 660881 4753731 872 + 660881 4753761 873 + 660881 4753791 875 + 660881 4753821 876 + 660881 4753851 876 + 660881 4753881 876 + 660881 4753911 877 + 660881 4753941 878 + 660881 4753971 877 + 660881 4754001 876 + 660881 4754031 875 + 660881 4754061 873 + 660881 4754091 870 + 660881 4754121 868 + 660881 4754151 873 + 660881 4754181 885 + 660881 4754211 901 + 660881 4754241 926 + 660881 4754271 952 + 660881 4754301 956 + 660881 4754331 959 + 660881 4754361 959 + 660881 4754391 960 + 660881 4754421 960 + 660881 4754451 960 + 660881 4754481 959 + 660881 4754511 959 + 660881 4754541 960 + 660911 4751301 1010 + 660911 4751331 1011 + 660911 4751361 1012 + 660911 4751391 1013 + 660911 4751421 1014 + 660911 4751451 1013 + 660911 4751481 1011 + 660911 4751511 1008 + 660911 4751541 1006 + 660911 4751571 1004 + 660911 4751601 1001 + 660911 4751631 997 + 660911 4751661 985 + 660911 4751691 974 + 660911 4751721 974 + 660911 4751751 979 + 660911 4751781 982 + 660911 4751811 979 + 660911 4751841 964 + 660911 4751871 948 + 660911 4751901 937 + 660911 4751931 929 + 660911 4751961 922 + 660911 4751991 915 + 660911 4752021 907 + 660911 4752051 900 + 660911 4752081 894 + 660911 4752111 889 + 660911 4752141 884 + 660911 4752171 882 + 660911 4752201 879 + 660911 4752231 876 + 660911 4752261 874 + 660911 4752291 871 + 660911 4752321 869 + 660911 4752351 863 + 660911 4752381 862 + 660911 4752411 868 + 660911 4752441 872 + 660911 4752471 872 + 660911 4752501 869 + 660911 4752531 857 + 660911 4752561 844 + 660911 4752591 843 + 660911 4752621 854 + 660911 4752651 861 + 660911 4752681 861 + 660911 4752711 861 + 660911 4752741 861 + 660911 4752771 868 + 660911 4752801 853 + 660911 4752831 837 + 660911 4752861 821 + 660911 4752891 811 + 660911 4752921 809 + 660911 4752951 809 + 660911 4752981 822 + 660911 4753011 837 + 660911 4753041 857 + 660911 4753071 864 + 660911 4753101 862 + 660911 4753131 849 + 660911 4753161 849 + 660911 4753191 853 + 660911 4753221 830 + 660911 4753251 809 + 660911 4753281 809 + 660911 4753311 809 + 660911 4753341 809 + 660911 4753371 809 + 660911 4753401 809 + 660911 4753431 809 + 660911 4753461 809 + 660911 4753491 815 + 660911 4753521 826 + 660911 4753551 837 + 660911 4753581 851 + 660911 4753611 862 + 660911 4753641 869 + 660911 4753671 871 + 660911 4753701 871 + 660911 4753731 872 + 660911 4753761 873 + 660911 4753791 874 + 660911 4753821 875 + 660911 4753851 875 + 660911 4753881 876 + 660911 4753911 877 + 660911 4753941 877 + 660911 4753971 878 + 660911 4754001 878 + 660911 4754031 877 + 660911 4754061 873 + 660911 4754091 869 + 660911 4754121 870 + 660911 4754151 875 + 660911 4754181 887 + 660911 4754211 903 + 660911 4754241 934 + 660911 4754271 958 + 660911 4754301 960 + 660911 4754331 960 + 660911 4754361 960 + 660911 4754391 960 + 660911 4754421 960 + 660911 4754451 960 + 660911 4754481 960 + 660911 4754511 960 + 660911 4754541 960 + 660941 4751301 1012 + 660941 4751331 1013 + 660941 4751361 1013 + 660941 4751391 1014 + 660941 4751421 1014 + 660941 4751451 1013 + 660941 4751481 1011 + 660941 4751511 1008 + 660941 4751541 1006 + 660941 4751571 1004 + 660941 4751601 1002 + 660941 4751631 999 + 660941 4751661 993 + 660941 4751691 982 + 660941 4751721 984 + 660941 4751751 990 + 660941 4751781 992 + 660941 4751811 991 + 660941 4751841 971 + 660941 4751871 954 + 660941 4751901 940 + 660941 4751931 929 + 660941 4751961 920 + 660941 4751991 911 + 660941 4752021 901 + 660941 4752051 897 + 660941 4752081 891 + 660941 4752111 889 + 660941 4752141 885 + 660941 4752171 882 + 660941 4752201 880 + 660941 4752231 878 + 660941 4752261 875 + 660941 4752291 871 + 660941 4752321 868 + 660941 4752351 864 + 660941 4752381 864 + 660941 4752411 868 + 660941 4752441 872 + 660941 4752471 874 + 660941 4752501 869 + 660941 4752531 852 + 660941 4752561 843 + 660941 4752591 844 + 660941 4752621 852 + 660941 4752651 861 + 660941 4752681 861 + 660941 4752711 861 + 660941 4752741 861 + 660941 4752771 873 + 660941 4752801 843 + 660941 4752831 825 + 660941 4752861 814 + 660941 4752891 809 + 660941 4752921 809 + 660941 4752951 817 + 660941 4752981 827 + 660941 4753011 846 + 660941 4753041 861 + 660941 4753071 864 + 660941 4753101 863 + 660941 4753131 856 + 660941 4753161 856 + 660941 4753191 858 + 660941 4753221 841 + 660941 4753251 821 + 660941 4753281 809 + 660941 4753311 809 + 660941 4753341 809 + 660941 4753371 809 + 660941 4753401 809 + 660941 4753431 809 + 660941 4753461 809 + 660941 4753491 809 + 660941 4753521 817 + 660941 4753551 826 + 660941 4753581 839 + 660941 4753611 852 + 660941 4753641 863 + 660941 4753671 869 + 660941 4753701 871 + 660941 4753731 871 + 660941 4753761 872 + 660941 4753791 873 + 660941 4753821 874 + 660941 4753851 875 + 660941 4753881 876 + 660941 4753911 877 + 660941 4753941 878 + 660941 4753971 878 + 660941 4754001 878 + 660941 4754031 876 + 660941 4754061 873 + 660941 4754091 869 + 660941 4754121 871 + 660941 4754151 876 + 660941 4754181 891 + 660941 4754211 906 + 660941 4754241 944 + 660941 4754271 960 + 660941 4754301 958 + 660941 4754331 960 + 660941 4754361 960 + 660941 4754391 960 + 660941 4754421 960 + 660941 4754451 960 + 660941 4754481 960 + 660941 4754511 960 + 660941 4754541 960 + 660971 4751301 1012 + 660971 4751331 1013 + 660971 4751361 1014 + 660971 4751391 1014 + 660971 4751421 1014 + 660971 4751451 1013 + 660971 4751481 1011 + 660971 4751511 1009 + 660971 4751541 1007 + 660971 4751571 1005 + 660971 4751601 1003 + 660971 4751631 1001 + 660971 4751661 999 + 660971 4751691 988 + 660971 4751721 996 + 660971 4751751 999 + 660971 4751781 996 + 660971 4751811 988 + 660971 4751841 970 + 660971 4751871 956 + 660971 4751901 943 + 660971 4751931 932 + 660971 4751961 921 + 660971 4751991 912 + 660971 4752021 904 + 660971 4752051 897 + 660971 4752081 892 + 660971 4752111 888 + 660971 4752141 884 + 660971 4752171 882 + 660971 4752201 880 + 660971 4752231 878 + 660971 4752261 875 + 660971 4752291 871 + 660971 4752321 868 + 660971 4752351 866 + 660971 4752381 867 + 660971 4752411 869 + 660971 4752441 871 + 660971 4752471 872 + 660971 4752501 865 + 660971 4752531 850 + 660971 4752561 843 + 660971 4752591 846 + 660971 4752621 855 + 660971 4752651 861 + 660971 4752681 861 + 660971 4752711 861 + 660971 4752741 865 + 660971 4752771 862 + 660971 4752801 838 + 660971 4752831 816 + 660971 4752861 810 + 660971 4752891 809 + 660971 4752921 809 + 660971 4752951 820 + 660971 4752981 833 + 660971 4753011 851 + 660971 4753041 862 + 660971 4753071 865 + 660971 4753101 864 + 660971 4753131 862 + 660971 4753161 861 + 660971 4753191 861 + 660971 4753221 851 + 660971 4753251 832 + 660971 4753281 817 + 660971 4753311 809 + 660971 4753341 809 + 660971 4753371 809 + 660971 4753401 809 + 660971 4753431 809 + 660971 4753461 809 + 660971 4753491 809 + 660971 4753521 809 + 660971 4753551 817 + 660971 4753581 827 + 660971 4753611 840 + 660971 4753641 853 + 660971 4753671 865 + 660971 4753701 870 + 660971 4753731 871 + 660971 4753761 871 + 660971 4753791 872 + 660971 4753821 873 + 660971 4753851 875 + 660971 4753881 876 + 660971 4753911 877 + 660971 4753941 877 + 660971 4753971 878 + 660971 4754001 878 + 660971 4754031 876 + 660971 4754061 874 + 660971 4754091 874 + 660971 4754121 872 + 660971 4754151 878 + 660971 4754181 894 + 660971 4754211 910 + 660971 4754241 946 + 660971 4754271 953 + 660971 4754301 957 + 660971 4754331 958 + 660971 4754361 958 + 660971 4754391 959 + 660971 4754421 960 + 660971 4754451 960 + 660971 4754481 960 + 660971 4754511 960 + 660971 4754541 960 + 661001 4751301 1013 + 661001 4751331 1014 + 661001 4751361 1014 + 661001 4751391 1014 + 661001 4751421 1014 + 661001 4751451 1012 + 661001 4751481 1011 + 661001 4751511 1009 + 661001 4751541 1007 + 661001 4751571 1006 + 661001 4751601 1005 + 661001 4751631 1003 + 661001 4751661 1000 + 661001 4751691 997 + 661001 4751721 1000 + 661001 4751751 1000 + 661001 4751781 996 + 661001 4751811 983 + 661001 4751841 969 + 661001 4751871 956 + 661001 4751901 942 + 661001 4751931 932 + 661001 4751961 924 + 661001 4751991 914 + 661001 4752021 907 + 661001 4752051 898 + 661001 4752081 892 + 661001 4752111 888 + 661001 4752141 885 + 661001 4752171 882 + 661001 4752201 880 + 661001 4752231 878 + 661001 4752261 875 + 661001 4752291 871 + 661001 4752321 868 + 661001 4752351 868 + 661001 4752381 868 + 661001 4752411 869 + 661001 4752441 871 + 661001 4752471 870 + 661001 4752501 862 + 661001 4752531 849 + 661001 4752561 843 + 661001 4752591 849 + 661001 4752621 860 + 661001 4752651 863 + 661001 4752681 861 + 661001 4752711 861 + 661001 4752741 871 + 661001 4752771 859 + 661001 4752801 831 + 661001 4752831 815 + 661001 4752861 809 + 661001 4752891 809 + 661001 4752921 809 + 661001 4752951 823 + 661001 4752981 839 + 661001 4753011 858 + 661001 4753041 866 + 661001 4753071 866 + 661001 4753101 865 + 661001 4753131 864 + 661001 4753161 863 + 661001 4753191 863 + 661001 4753221 857 + 661001 4753251 840 + 661001 4753281 820 + 661001 4753311 814 + 661001 4753341 809 + 661001 4753371 809 + 661001 4753401 809 + 661001 4753431 809 + 661001 4753461 809 + 661001 4753491 809 + 661001 4753521 809 + 661001 4753551 809 + 661001 4753581 817 + 661001 4753611 827 + 661001 4753641 840 + 661001 4753671 853 + 661001 4753701 868 + 661001 4753731 870 + 661001 4753761 871 + 661001 4753791 872 + 661001 4753821 873 + 661001 4753851 874 + 661001 4753881 875 + 661001 4753911 876 + 661001 4753941 877 + 661001 4753971 877 + 661001 4754001 877 + 661001 4754031 877 + 661001 4754061 875 + 661001 4754091 875 + 661001 4754121 875 + 661001 4754151 880 + 661001 4754181 897 + 661001 4754211 915 + 661001 4754241 949 + 661001 4754271 960 + 661001 4754301 960 + 661001 4754331 959 + 661001 4754361 960 + 661001 4754391 960 + 661001 4754421 961 + 661001 4754451 960 + 661001 4754481 960 + 661001 4754511 960 + 661001 4754541 960 + 661031 4751301 1014 + 661031 4751331 1014 + 661031 4751361 1015 + 661031 4751391 1014 + 661031 4751421 1013 + 661031 4751451 1012 + 661031 4751481 1011 + 661031 4751511 1010 + 661031 4751541 1008 + 661031 4751571 1007 + 661031 4751601 1006 + 661031 4751631 1005 + 661031 4751661 1002 + 661031 4751691 1000 + 661031 4751721 1001 + 661031 4751751 1000 + 661031 4751781 997 + 661031 4751811 982 + 661031 4751841 966 + 661031 4751871 955 + 661031 4751901 944 + 661031 4751931 932 + 661031 4751961 924 + 661031 4751991 912 + 661031 4752021 903 + 661031 4752051 896 + 661031 4752081 891 + 661031 4752111 888 + 661031 4752141 885 + 661031 4752171 883 + 661031 4752201 881 + 661031 4752231 878 + 661031 4752261 875 + 661031 4752291 872 + 661031 4752321 869 + 661031 4752351 869 + 661031 4752381 868 + 661031 4752411 869 + 661031 4752441 870 + 661031 4752471 870 + 661031 4752501 858 + 661031 4752531 847 + 661031 4752561 844 + 661031 4752591 852 + 661031 4752621 861 + 661031 4752651 865 + 661031 4752681 861 + 661031 4752711 864 + 661031 4752741 868 + 661031 4752771 853 + 661031 4752801 831 + 661031 4752831 809 + 661031 4752861 809 + 661031 4752891 809 + 661031 4752921 809 + 661031 4752951 826 + 661031 4752981 843 + 661031 4753011 860 + 661031 4753041 869 + 661031 4753071 868 + 661031 4753101 867 + 661031 4753131 865 + 661031 4753161 864 + 661031 4753191 862 + 661031 4753221 855 + 661031 4753251 838 + 661031 4753281 824 + 661031 4753311 819 + 661031 4753341 822 + 661031 4753371 821 + 661031 4753401 809 + 661031 4753431 809 + 661031 4753461 809 + 661031 4753491 809 + 661031 4753521 809 + 661031 4753551 809 + 661031 4753581 809 + 661031 4753611 817 + 661031 4753641 830 + 661031 4753671 842 + 661031 4753701 858 + 661031 4753731 869 + 661031 4753761 870 + 661031 4753791 871 + 661031 4753821 872 + 661031 4753851 874 + 661031 4753881 875 + 661031 4753911 875 + 661031 4753941 876 + 661031 4753971 876 + 661031 4754001 878 + 661031 4754031 877 + 661031 4754061 876 + 661031 4754091 875 + 661031 4754121 875 + 661031 4754151 881 + 661031 4754181 899 + 661031 4754211 921 + 661031 4754241 955 + 661031 4754271 960 + 661031 4754301 961 + 661031 4754331 961 + 661031 4754361 960 + 661031 4754391 960 + 661031 4754421 960 + 661031 4754451 961 + 661031 4754481 961 + 661031 4754511 960 + 661031 4754541 960 + 661061 4751301 1014 + 661061 4751331 1014 + 661061 4751361 1015 + 661061 4751391 1014 + 661061 4751421 1014 + 661061 4751451 1012 + 661061 4751481 1011 + 661061 4751511 1010 + 661061 4751541 1009 + 661061 4751571 1008 + 661061 4751601 1007 + 661061 4751631 1006 + 661061 4751661 1005 + 661061 4751691 1004 + 661061 4751721 1003 + 661061 4751751 1001 + 661061 4751781 999 + 661061 4751811 986 + 661061 4751841 971 + 661061 4751871 956 + 661061 4751901 944 + 661061 4751931 932 + 661061 4751961 922 + 661061 4751991 911 + 661061 4752021 902 + 661061 4752051 895 + 661061 4752081 891 + 661061 4752111 888 + 661061 4752141 886 + 661061 4752171 884 + 661061 4752201 881 + 661061 4752231 878 + 661061 4752261 876 + 661061 4752291 873 + 661061 4752321 871 + 661061 4752351 869 + 661061 4752381 868 + 661061 4752411 869 + 661061 4752441 869 + 661061 4752471 868 + 661061 4752501 854 + 661061 4752531 844 + 661061 4752561 845 + 661061 4752591 855 + 661061 4752621 864 + 661061 4752651 867 + 661061 4752681 862 + 661061 4752711 861 + 661061 4752741 855 + 661061 4752771 844 + 661061 4752801 829 + 661061 4752831 815 + 661061 4752861 809 + 661061 4752891 809 + 661061 4752921 809 + 661061 4752951 829 + 661061 4752981 844 + 661061 4753011 858 + 661061 4753041 870 + 661061 4753071 869 + 661061 4753101 868 + 661061 4753131 867 + 661061 4753161 865 + 661061 4753191 862 + 661061 4753221 857 + 661061 4753251 845 + 661061 4753281 831 + 661061 4753311 830 + 661061 4753341 831 + 661061 4753371 832 + 661061 4753401 822 + 661061 4753431 809 + 661061 4753461 809 + 661061 4753491 809 + 661061 4753521 809 + 661061 4753551 809 + 661061 4753581 809 + 661061 4753611 811 + 661061 4753641 821 + 661061 4753671 835 + 661061 4753701 850 + 661061 4753731 868 + 661061 4753761 870 + 661061 4753791 870 + 661061 4753821 872 + 661061 4753851 873 + 661061 4753881 874 + 661061 4753911 875 + 661061 4753941 876 + 661061 4753971 877 + 661061 4754001 878 + 661061 4754031 878 + 661061 4754061 877 + 661061 4754091 876 + 661061 4754121 875 + 661061 4754151 881 + 661061 4754181 900 + 661061 4754211 927 + 661061 4754241 957 + 661061 4754271 960 + 661061 4754301 960 + 661061 4754331 961 + 661061 4754361 961 + 661061 4754391 960 + 661061 4754421 962 + 661061 4754451 960 + 661061 4754481 961 + 661061 4754511 961 + 661061 4754541 960 + 661091 4751301 1015 + 661091 4751331 1015 + 661091 4751361 1015 + 661091 4751391 1014 + 661091 4751421 1014 + 661091 4751451 1013 + 661091 4751481 1012 + 661091 4751511 1011 + 661091 4751541 1010 + 661091 4751571 1009 + 661091 4751601 1008 + 661091 4751631 1007 + 661091 4751661 1006 + 661091 4751691 1005 + 661091 4751721 1004 + 661091 4751751 1003 + 661091 4751781 1000 + 661091 4751811 989 + 661091 4751841 975 + 661091 4751871 961 + 661091 4751901 943 + 661091 4751931 931 + 661091 4751961 922 + 661091 4751991 911 + 661091 4752021 903 + 661091 4752051 897 + 661091 4752081 891 + 661091 4752111 889 + 661091 4752141 886 + 661091 4752171 884 + 661091 4752201 881 + 661091 4752231 879 + 661091 4752261 876 + 661091 4752291 874 + 661091 4752321 871 + 661091 4752351 870 + 661091 4752381 869 + 661091 4752411 868 + 661091 4752441 869 + 661091 4752471 863 + 661091 4752501 851 + 661091 4752531 844 + 661091 4752561 846 + 661091 4752591 856 + 661091 4752621 863 + 661091 4752651 866 + 661091 4752681 862 + 661091 4752711 852 + 661091 4752741 842 + 661091 4752771 830 + 661091 4752801 821 + 661091 4752831 813 + 661091 4752861 809 + 661091 4752891 809 + 661091 4752921 809 + 661091 4752951 829 + 661091 4752981 844 + 661091 4753011 857 + 661091 4753041 870 + 661091 4753071 870 + 661091 4753101 869 + 661091 4753131 868 + 661091 4753161 867 + 661091 4753191 867 + 661091 4753221 862 + 661091 4753251 853 + 661091 4753281 838 + 661091 4753311 837 + 661091 4753341 841 + 661091 4753371 842 + 661091 4753401 834 + 661091 4753431 825 + 661091 4753461 815 + 661091 4753491 809 + 661091 4753521 809 + 661091 4753551 809 + 661091 4753581 809 + 661091 4753611 809 + 661091 4753641 816 + 661091 4753671 825 + 661091 4753701 843 + 661091 4753731 856 + 661091 4753761 869 + 661091 4753791 870 + 661091 4753821 871 + 661091 4753851 872 + 661091 4753881 873 + 661091 4753911 875 + 661091 4753941 876 + 661091 4753971 877 + 661091 4754001 878 + 661091 4754031 878 + 661091 4754061 878 + 661091 4754091 876 + 661091 4754121 876 + 661091 4754151 883 + 661091 4754181 900 + 661091 4754211 931 + 661091 4754241 960 + 661091 4754271 961 + 661091 4754301 961 + 661091 4754331 961 + 661091 4754361 960 + 661091 4754391 962 + 661091 4754421 962 + 661091 4754451 962 + 661091 4754481 961 + 661091 4754511 960 + 661091 4754541 960 + 661121 4751301 1015 + 661121 4751331 1015 + 661121 4751361 1015 + 661121 4751391 1014 + 661121 4751421 1014 + 661121 4751451 1013 + 661121 4751481 1012 + 661121 4751511 1011 + 661121 4751541 1010 + 661121 4751571 1009 + 661121 4751601 1008 + 661121 4751631 1007 + 661121 4751661 1006 + 661121 4751691 1006 + 661121 4751721 1005 + 661121 4751751 1005 + 661121 4751781 1005 + 661121 4751811 996 + 661121 4751841 978 + 661121 4751871 960 + 661121 4751901 946 + 661121 4751931 930 + 661121 4751961 915 + 661121 4751991 907 + 661121 4752021 899 + 661121 4752051 894 + 661121 4752081 891 + 661121 4752111 889 + 661121 4752141 887 + 661121 4752171 885 + 661121 4752201 882 + 661121 4752231 879 + 661121 4752261 876 + 661121 4752291 874 + 661121 4752321 872 + 661121 4752351 870 + 661121 4752381 869 + 661121 4752411 868 + 661121 4752441 869 + 661121 4752471 860 + 661121 4752501 848 + 661121 4752531 844 + 661121 4752561 848 + 661121 4752591 857 + 661121 4752621 862 + 661121 4752651 866 + 661121 4752681 859 + 661121 4752711 846 + 661121 4752741 834 + 661121 4752771 827 + 661121 4752801 821 + 661121 4752831 816 + 661121 4752861 809 + 661121 4752891 809 + 661121 4752921 809 + 661121 4752951 827 + 661121 4752981 843 + 661121 4753011 857 + 661121 4753041 870 + 661121 4753071 870 + 661121 4753101 869 + 661121 4753131 869 + 661121 4753161 869 + 661121 4753191 869 + 661121 4753221 864 + 661121 4753251 857 + 661121 4753281 843 + 661121 4753311 846 + 661121 4753341 853 + 661121 4753371 853 + 661121 4753401 846 + 661121 4753431 834 + 661121 4753461 826 + 661121 4753491 809 + 661121 4753521 809 + 661121 4753551 809 + 661121 4753581 809 + 661121 4753611 809 + 661121 4753641 809 + 661121 4753671 809 + 661121 4753701 832 + 661121 4753731 847 + 661121 4753761 860 + 661121 4753791 869 + 661121 4753821 871 + 661121 4753851 872 + 661121 4753881 873 + 661121 4753911 874 + 661121 4753941 876 + 661121 4753971 877 + 661121 4754001 878 + 661121 4754031 879 + 661121 4754061 880 + 661121 4754091 877 + 661121 4754121 877 + 661121 4754151 890 + 661121 4754181 904 + 661121 4754211 926 + 661121 4754241 960 + 661121 4754271 961 + 661121 4754301 961 + 661121 4754331 960 + 661121 4754361 962 + 661121 4754391 962 + 661121 4754421 962 + 661121 4754451 961 + 661121 4754481 960 + 661121 4754511 961 + 661121 4754541 961 + 661151 4751301 1016 + 661151 4751331 1016 + 661151 4751361 1015 + 661151 4751391 1015 + 661151 4751421 1014 + 661151 4751451 1013 + 661151 4751481 1012 + 661151 4751511 1011 + 661151 4751541 1011 + 661151 4751571 1010 + 661151 4751601 1009 + 661151 4751631 1008 + 661151 4751661 1008 + 661151 4751691 1007 + 661151 4751721 1007 + 661151 4751751 1007 + 661151 4751781 1006 + 661151 4751811 1000 + 661151 4751841 982 + 661151 4751871 961 + 661151 4751901 945 + 661151 4751931 928 + 661151 4751961 914 + 661151 4751991 906 + 661151 4752021 900 + 661151 4752051 893 + 661151 4752081 891 + 661151 4752111 889 + 661151 4752141 887 + 661151 4752171 885 + 661151 4752201 882 + 661151 4752231 878 + 661151 4752261 876 + 661151 4752291 874 + 661151 4752321 872 + 661151 4752351 870 + 661151 4752381 869 + 661151 4752411 866 + 661151 4752441 869 + 661151 4752471 858 + 661151 4752501 848 + 661151 4752531 848 + 661151 4752561 854 + 661151 4752591 860 + 661151 4752621 864 + 661151 4752651 866 + 661151 4752681 857 + 661151 4752711 843 + 661151 4752741 833 + 661151 4752771 836 + 661151 4752801 838 + 661151 4752831 819 + 661151 4752861 811 + 661151 4752891 809 + 661151 4752921 809 + 661151 4752951 824 + 661151 4752981 844 + 661151 4753011 860 + 661151 4753041 873 + 661151 4753071 871 + 661151 4753101 871 + 661151 4753131 870 + 661151 4753161 870 + 661151 4753191 868 + 661151 4753221 864 + 661151 4753251 861 + 661151 4753281 851 + 661151 4753311 851 + 661151 4753341 862 + 661151 4753371 861 + 661151 4753401 854 + 661151 4753431 843 + 661151 4753461 838 + 661151 4753491 826 + 661151 4753521 809 + 661151 4753551 809 + 661151 4753581 809 + 661151 4753611 809 + 661151 4753641 809 + 661151 4753671 809 + 661151 4753701 826 + 661151 4753731 838 + 661151 4753761 852 + 661151 4753791 869 + 661151 4753821 870 + 661151 4753851 871 + 661151 4753881 873 + 661151 4753911 874 + 661151 4753941 875 + 661151 4753971 876 + 661151 4754001 877 + 661151 4754031 879 + 661151 4754061 880 + 661151 4754091 881 + 661151 4754121 882 + 661151 4754151 890 + 661151 4754181 905 + 661151 4754211 935 + 661151 4754241 960 + 661151 4754271 961 + 661151 4754301 960 + 661151 4754331 961 + 661151 4754361 962 + 661151 4754391 961 + 661151 4754421 961 + 661151 4754451 962 + 661151 4754481 962 + 661151 4754511 962 + 661151 4754541 962 + 661181 4751301 1016 + 661181 4751331 1016 + 661181 4751361 1016 + 661181 4751391 1015 + 661181 4751421 1014 + 661181 4751451 1013 + 661181 4751481 1012 + 661181 4751511 1012 + 661181 4751541 1011 + 661181 4751571 1011 + 661181 4751601 1010 + 661181 4751631 1009 + 661181 4751661 1009 + 661181 4751691 1008 + 661181 4751721 1008 + 661181 4751751 1008 + 661181 4751781 1007 + 661181 4751811 1001 + 661181 4751841 979 + 661181 4751871 957 + 661181 4751901 942 + 661181 4751931 929 + 661181 4751961 914 + 661181 4751991 906 + 661181 4752021 900 + 661181 4752051 895 + 661181 4752081 892 + 661181 4752111 889 + 661181 4752141 886 + 661181 4752171 884 + 661181 4752201 881 + 661181 4752231 878 + 661181 4752261 875 + 661181 4752291 873 + 661181 4752321 871 + 661181 4752351 870 + 661181 4752381 869 + 661181 4752411 867 + 661181 4752441 864 + 661181 4752471 860 + 661181 4752501 854 + 661181 4752531 852 + 661181 4752561 859 + 661181 4752591 862 + 661181 4752621 865 + 661181 4752651 865 + 661181 4752681 856 + 661181 4752711 843 + 661181 4752741 841 + 661181 4752771 845 + 661181 4752801 845 + 661181 4752831 828 + 661181 4752861 815 + 661181 4752891 809 + 661181 4752921 809 + 661181 4752951 822 + 661181 4752981 845 + 661181 4753011 864 + 661181 4753041 872 + 661181 4753071 873 + 661181 4753101 872 + 661181 4753131 871 + 661181 4753161 869 + 661181 4753191 867 + 661181 4753221 864 + 661181 4753251 862 + 661181 4753281 859 + 661181 4753311 857 + 661181 4753341 865 + 661181 4753371 866 + 661181 4753401 859 + 661181 4753431 853 + 661181 4753461 849 + 661181 4753491 834 + 661181 4753521 809 + 661181 4753551 809 + 661181 4753581 809 + 661181 4753611 809 + 661181 4753641 809 + 661181 4753671 809 + 661181 4753701 821 + 661181 4753731 834 + 661181 4753761 847 + 661181 4753791 868 + 661181 4753821 870 + 661181 4753851 871 + 661181 4753881 872 + 661181 4753911 874 + 661181 4753941 875 + 661181 4753971 875 + 661181 4754001 876 + 661181 4754031 877 + 661181 4754061 879 + 661181 4754091 882 + 661181 4754121 884 + 661181 4754151 896 + 661181 4754181 910 + 661181 4754211 949 + 661181 4754241 960 + 661181 4754271 960 + 661181 4754301 961 + 661181 4754331 960 + 661181 4754361 961 + 661181 4754391 962 + 661181 4754421 962 + 661181 4754451 962 + 661181 4754481 962 + 661181 4754511 962 + 661181 4754541 962 + 661211 4751301 1017 + 661211 4751331 1016 + 661211 4751361 1016 + 661211 4751391 1015 + 661211 4751421 1014 + 661211 4751451 1013 + 661211 4751481 1013 + 661211 4751511 1012 + 661211 4751541 1012 + 661211 4751571 1011 + 661211 4751601 1011 + 661211 4751631 1010 + 661211 4751661 1009 + 661211 4751691 1009 + 661211 4751721 1008 + 661211 4751751 1008 + 661211 4751781 1007 + 661211 4751811 1002 + 661211 4751841 983 + 661211 4751871 961 + 661211 4751901 945 + 661211 4751931 933 + 661211 4751961 918 + 661211 4751991 909 + 661211 4752021 901 + 661211 4752051 895 + 661211 4752081 891 + 661211 4752111 889 + 661211 4752141 886 + 661211 4752171 883 + 661211 4752201 881 + 661211 4752231 878 + 661211 4752261 876 + 661211 4752291 873 + 661211 4752321 871 + 661211 4752351 869 + 661211 4752381 868 + 661211 4752411 866 + 661211 4752441 864 + 661211 4752471 862 + 661211 4752501 860 + 661211 4752531 859 + 661211 4752561 862 + 661211 4752591 863 + 661211 4752621 864 + 661211 4752651 864 + 661211 4752681 856 + 661211 4752711 846 + 661211 4752741 850 + 661211 4752771 856 + 661211 4752801 855 + 661211 4752831 837 + 661211 4752861 818 + 661211 4752891 809 + 661211 4752921 809 + 661211 4752951 824 + 661211 4752981 847 + 661211 4753011 867 + 661211 4753041 873 + 661211 4753071 872 + 661211 4753101 871 + 661211 4753131 870 + 661211 4753161 869 + 661211 4753191 867 + 661211 4753221 865 + 661211 4753251 863 + 661211 4753281 862 + 661211 4753311 861 + 661211 4753341 867 + 661211 4753371 869 + 661211 4753401 866 + 661211 4753431 862 + 661211 4753461 857 + 661211 4753491 854 + 661211 4753521 822 + 661211 4753551 809 + 661211 4753581 809 + 661211 4753611 809 + 661211 4753641 809 + 661211 4753671 809 + 661211 4753701 809 + 661211 4753731 829 + 661211 4753761 843 + 661211 4753791 861 + 661211 4753821 869 + 661211 4753851 871 + 661211 4753881 872 + 661211 4753911 873 + 661211 4753941 874 + 661211 4753971 875 + 661211 4754001 875 + 661211 4754031 877 + 661211 4754061 879 + 661211 4754091 882 + 661211 4754121 890 + 661211 4754151 900 + 661211 4754181 916 + 661211 4754211 954 + 661211 4754241 960 + 661211 4754271 959 + 661211 4754301 960 + 661211 4754331 961 + 661211 4754361 962 + 661211 4754391 962 + 661211 4754421 962 + 661211 4754451 962 + 661211 4754481 962 + 661211 4754511 963 + 661211 4754541 962 + 661241 4751301 1017 + 661241 4751331 1017 + 661241 4751361 1016 + 661241 4751391 1015 + 661241 4751421 1014 + 661241 4751451 1014 + 661241 4751481 1014 + 661241 4751511 1013 + 661241 4751541 1012 + 661241 4751571 1012 + 661241 4751601 1011 + 661241 4751631 1010 + 661241 4751661 1010 + 661241 4751691 1009 + 661241 4751721 1009 + 661241 4751751 1008 + 661241 4751781 1007 + 661241 4751811 1001 + 661241 4751841 983 + 661241 4751871 963 + 661241 4751901 944 + 661241 4751931 933 + 661241 4751961 915 + 661241 4751991 907 + 661241 4752021 902 + 661241 4752051 894 + 661241 4752081 890 + 661241 4752111 888 + 661241 4752141 886 + 661241 4752171 884 + 661241 4752201 881 + 661241 4752231 878 + 661241 4752261 876 + 661241 4752291 872 + 661241 4752321 870 + 661241 4752351 868 + 661241 4752381 867 + 661241 4752411 866 + 661241 4752441 865 + 661241 4752471 863 + 661241 4752501 864 + 661241 4752531 863 + 661241 4752561 864 + 661241 4752591 864 + 661241 4752621 864 + 661241 4752651 863 + 661241 4752681 859 + 661241 4752711 851 + 661241 4752741 861 + 661241 4752771 862 + 661241 4752801 849 + 661241 4752831 831 + 661241 4752861 816 + 661241 4752891 809 + 661241 4752921 809 + 661241 4752951 826 + 661241 4752981 850 + 661241 4753011 868 + 661241 4753041 873 + 661241 4753071 872 + 661241 4753101 870 + 661241 4753131 869 + 661241 4753161 869 + 661241 4753191 866 + 661241 4753221 865 + 661241 4753251 864 + 661241 4753281 862 + 661241 4753311 862 + 661241 4753341 867 + 661241 4753371 869 + 661241 4753401 869 + 661241 4753431 867 + 661241 4753461 865 + 661241 4753491 860 + 661241 4753521 848 + 661241 4753551 809 + 661241 4753581 809 + 661241 4753611 809 + 661241 4753641 809 + 661241 4753671 809 + 661241 4753701 809 + 661241 4753731 827 + 661241 4753761 842 + 661241 4753791 859 + 661241 4753821 869 + 661241 4753851 870 + 661241 4753881 871 + 661241 4753911 872 + 661241 4753941 873 + 661241 4753971 874 + 661241 4754001 875 + 661241 4754031 876 + 661241 4754061 879 + 661241 4754091 883 + 661241 4754121 893 + 661241 4754151 903 + 661241 4754181 921 + 661241 4754211 960 + 661241 4754241 959 + 661241 4754271 961 + 661241 4754301 961 + 661241 4754331 962 + 661241 4754361 962 + 661241 4754391 962 + 661241 4754421 963 + 661241 4754451 963 + 661241 4754481 963 + 661241 4754511 963 + 661241 4754541 963 + 661271 4751301 1018 + 661271 4751331 1017 + 661271 4751361 1016 + 661271 4751391 1016 + 661271 4751421 1015 + 661271 4751451 1015 + 661271 4751481 1014 + 661271 4751511 1013 + 661271 4751541 1013 + 661271 4751571 1012 + 661271 4751601 1011 + 661271 4751631 1011 + 661271 4751661 1010 + 661271 4751691 1010 + 661271 4751721 1009 + 661271 4751751 1008 + 661271 4751781 1007 + 661271 4751811 1003 + 661271 4751841 986 + 661271 4751871 965 + 661271 4751901 951 + 661271 4751931 938 + 661271 4751961 924 + 661271 4751991 909 + 661271 4752021 903 + 661271 4752051 896 + 661271 4752081 890 + 661271 4752111 888 + 661271 4752141 886 + 661271 4752171 883 + 661271 4752201 881 + 661271 4752231 878 + 661271 4752261 875 + 661271 4752291 871 + 661271 4752321 869 + 661271 4752351 868 + 661271 4752381 867 + 661271 4752411 866 + 661271 4752441 865 + 661271 4752471 864 + 661271 4752501 864 + 661271 4752531 864 + 661271 4752561 865 + 661271 4752591 864 + 661271 4752621 865 + 661271 4752651 862 + 661271 4752681 861 + 661271 4752711 861 + 661271 4752741 857 + 661271 4752771 846 + 661271 4752801 833 + 661271 4752831 818 + 661271 4752861 809 + 661271 4752891 809 + 661271 4752921 809 + 661271 4752951 838 + 661271 4752981 856 + 661271 4753011 869 + 661271 4753041 871 + 661271 4753071 872 + 661271 4753101 869 + 661271 4753131 869 + 661271 4753161 867 + 661271 4753191 867 + 661271 4753221 866 + 661271 4753251 864 + 661271 4753281 864 + 661271 4753311 865 + 661271 4753341 868 + 661271 4753371 869 + 661271 4753401 870 + 661271 4753431 869 + 661271 4753461 869 + 661271 4753491 867 + 661271 4753521 858 + 661271 4753551 809 + 661271 4753581 809 + 661271 4753611 809 + 661271 4753641 809 + 661271 4753671 809 + 661271 4753701 809 + 661271 4753731 825 + 661271 4753761 842 + 661271 4753791 860 + 661271 4753821 869 + 661271 4753851 870 + 661271 4753881 871 + 661271 4753911 872 + 661271 4753941 873 + 661271 4753971 874 + 661271 4754001 875 + 661271 4754031 876 + 661271 4754061 880 + 661271 4754091 884 + 661271 4754121 896 + 661271 4754151 907 + 661271 4754181 933 + 661271 4754211 958 + 661271 4754241 959 + 661271 4754271 961 + 661271 4754301 962 + 661271 4754331 962 + 661271 4754361 962 + 661271 4754391 963 + 661271 4754421 963 + 661271 4754451 963 + 661271 4754481 963 + 661271 4754511 963 + 661271 4754541 963 + 661301 4751301 1018 + 661301 4751331 1017 + 661301 4751361 1017 + 661301 4751391 1016 + 661301 4751421 1016 + 661301 4751451 1015 + 661301 4751481 1014 + 661301 4751511 1014 + 661301 4751541 1013 + 661301 4751571 1012 + 661301 4751601 1012 + 661301 4751631 1011 + 661301 4751661 1011 + 661301 4751691 1010 + 661301 4751721 1009 + 661301 4751751 1008 + 661301 4751781 1007 + 661301 4751811 1003 + 661301 4751841 986 + 661301 4751871 968 + 661301 4751901 954 + 661301 4751931 941 + 661301 4751961 925 + 661301 4751991 914 + 661301 4752021 905 + 661301 4752051 898 + 661301 4752081 892 + 661301 4752111 889 + 661301 4752141 886 + 661301 4752171 883 + 661301 4752201 880 + 661301 4752231 878 + 661301 4752261 874 + 661301 4752291 870 + 661301 4752321 868 + 661301 4752351 867 + 661301 4752381 866 + 661301 4752411 865 + 661301 4752441 864 + 661301 4752471 864 + 661301 4752501 864 + 661301 4752531 863 + 661301 4752561 864 + 661301 4752591 863 + 661301 4752621 862 + 661301 4752651 862 + 661301 4752681 862 + 661301 4752711 858 + 661301 4752741 846 + 661301 4752771 833 + 661301 4752801 809 + 661301 4752831 809 + 661301 4752861 809 + 661301 4752891 815 + 661301 4752921 829 + 661301 4752951 849 + 661301 4752981 863 + 661301 4753011 869 + 661301 4753041 871 + 661301 4753071 870 + 661301 4753101 869 + 661301 4753131 869 + 661301 4753161 868 + 661301 4753191 868 + 661301 4753221 867 + 661301 4753251 865 + 661301 4753281 865 + 661301 4753311 866 + 661301 4753341 867 + 661301 4753371 869 + 661301 4753401 869 + 661301 4753431 870 + 661301 4753461 871 + 661301 4753491 870 + 661301 4753521 860 + 661301 4753551 821 + 661301 4753581 809 + 661301 4753611 809 + 661301 4753641 809 + 661301 4753671 809 + 661301 4753701 809 + 661301 4753731 822 + 661301 4753761 839 + 661301 4753791 854 + 661301 4753821 868 + 661301 4753851 870 + 661301 4753881 871 + 661301 4753911 872 + 661301 4753941 873 + 661301 4753971 874 + 661301 4754001 875 + 661301 4754031 877 + 661301 4754061 880 + 661301 4754091 887 + 661301 4754121 900 + 661301 4754151 911 + 661301 4754181 949 + 661301 4754211 961 + 661301 4754241 959 + 661301 4754271 961 + 661301 4754301 962 + 661301 4754331 963 + 661301 4754361 963 + 661301 4754391 963 + 661301 4754421 964 + 661301 4754451 963 + 661301 4754481 963 + 661301 4754511 964 + 661301 4754541 964 + 661331 4751301 1018 + 661331 4751331 1018 + 661331 4751361 1017 + 661331 4751391 1017 + 661331 4751421 1016 + 661331 4751451 1015 + 661331 4751481 1015 + 661331 4751511 1014 + 661331 4751541 1013 + 661331 4751571 1012 + 661331 4751601 1012 + 661331 4751631 1012 + 661331 4751661 1011 + 661331 4751691 1010 + 661331 4751721 1009 + 661331 4751751 1008 + 661331 4751781 1007 + 661331 4751811 999 + 661331 4751841 983 + 661331 4751871 967 + 661331 4751901 953 + 661331 4751931 944 + 661331 4751961 924 + 661331 4751991 912 + 661331 4752021 904 + 661331 4752051 897 + 661331 4752081 891 + 661331 4752111 888 + 661331 4752141 885 + 661331 4752171 882 + 661331 4752201 878 + 661331 4752231 876 + 661331 4752261 873 + 661331 4752291 870 + 661331 4752321 868 + 661331 4752351 867 + 661331 4752381 865 + 661331 4752411 864 + 661331 4752441 863 + 661331 4752471 862 + 661331 4752501 862 + 661331 4752531 859 + 661331 4752561 852 + 661331 4752591 848 + 661331 4752621 846 + 661331 4752651 841 + 661331 4752681 844 + 661331 4752711 842 + 661331 4752741 833 + 661331 4752771 818 + 661331 4752801 809 + 661331 4752831 809 + 661331 4752861 817 + 661331 4752891 831 + 661331 4752921 848 + 661331 4752951 862 + 661331 4752981 868 + 661331 4753011 869 + 661331 4753041 870 + 661331 4753071 870 + 661331 4753101 870 + 661331 4753131 869 + 661331 4753161 869 + 661331 4753191 869 + 661331 4753221 868 + 661331 4753251 865 + 661331 4753281 866 + 661331 4753311 866 + 661331 4753341 867 + 661331 4753371 868 + 661331 4753401 869 + 661331 4753431 869 + 661331 4753461 870 + 661331 4753491 870 + 661331 4753521 860 + 661331 4753551 830 + 661331 4753581 809 + 661331 4753611 809 + 661331 4753641 809 + 661331 4753671 809 + 661331 4753701 809 + 661331 4753731 820 + 661331 4753761 835 + 661331 4753791 849 + 661331 4753821 865 + 661331 4753851 869 + 661331 4753881 871 + 661331 4753911 872 + 661331 4753941 873 + 661331 4753971 874 + 661331 4754001 875 + 661331 4754031 877 + 661331 4754061 881 + 661331 4754091 891 + 661331 4754121 907 + 661331 4754151 935 + 661331 4754181 960 + 661331 4754211 961 + 661331 4754241 961 + 661331 4754271 961 + 661331 4754301 963 + 661331 4754331 963 + 661331 4754361 963 + 661331 4754391 964 + 661331 4754421 964 + 661331 4754451 964 + 661331 4754481 964 + 661331 4754511 964 + 661331 4754541 964 + 661361 4751301 1019 + 661361 4751331 1018 + 661361 4751361 1018 + 661361 4751391 1017 + 661361 4751421 1016 + 661361 4751451 1016 + 661361 4751481 1015 + 661361 4751511 1014 + 661361 4751541 1013 + 661361 4751571 1013 + 661361 4751601 1013 + 661361 4751631 1012 + 661361 4751661 1012 + 661361 4751691 1011 + 661361 4751721 1010 + 661361 4751751 1008 + 661361 4751781 1007 + 661361 4751811 995 + 661361 4751841 981 + 661361 4751871 965 + 661361 4751901 953 + 661361 4751931 942 + 661361 4751961 924 + 661361 4751991 911 + 661361 4752021 904 + 661361 4752051 897 + 661361 4752081 891 + 661361 4752111 888 + 661361 4752141 885 + 661361 4752171 881 + 661361 4752201 878 + 661361 4752231 875 + 661361 4752261 872 + 661361 4752291 869 + 661361 4752321 867 + 661361 4752351 864 + 661361 4752381 864 + 661361 4752411 863 + 661361 4752441 860 + 661361 4752471 854 + 661361 4752501 850 + 661361 4752531 847 + 661361 4752561 842 + 661361 4752591 832 + 661361 4752621 829 + 661361 4752651 828 + 661361 4752681 831 + 661361 4752711 831 + 661361 4752741 819 + 661361 4752771 809 + 661361 4752801 809 + 661361 4752831 809 + 661361 4752861 829 + 661361 4752891 843 + 661361 4752921 858 + 661361 4752951 868 + 661361 4752981 869 + 661361 4753011 870 + 661361 4753041 870 + 661361 4753071 870 + 661361 4753101 870 + 661361 4753131 869 + 661361 4753161 869 + 661361 4753191 869 + 661361 4753221 867 + 661361 4753251 867 + 661361 4753281 866 + 661361 4753311 867 + 661361 4753341 868 + 661361 4753371 868 + 661361 4753401 869 + 661361 4753431 869 + 661361 4753461 870 + 661361 4753491 868 + 661361 4753521 861 + 661361 4753551 841 + 661361 4753581 809 + 661361 4753611 809 + 661361 4753641 809 + 661361 4753671 809 + 661361 4753701 809 + 661361 4753731 820 + 661361 4753761 835 + 661361 4753791 852 + 661361 4753821 869 + 661361 4753851 870 + 661361 4753881 871 + 661361 4753911 872 + 661361 4753941 873 + 661361 4753971 875 + 661361 4754001 876 + 661361 4754031 878 + 661361 4754061 882 + 661361 4754091 897 + 661361 4754121 912 + 661361 4754151 951 + 661361 4754181 961 + 661361 4754211 962 + 661361 4754241 963 + 661361 4754271 964 + 661361 4754301 962 + 661361 4754331 964 + 661361 4754361 964 + 661361 4754391 964 + 661361 4754421 964 + 661361 4754451 964 + 661361 4754481 965 + 661361 4754511 965 + 661361 4754541 965 + 661391 4751301 1019 + 661391 4751331 1019 + 661391 4751361 1018 + 661391 4751391 1017 + 661391 4751421 1017 + 661391 4751451 1016 + 661391 4751481 1015 + 661391 4751511 1014 + 661391 4751541 1014 + 661391 4751571 1014 + 661391 4751601 1014 + 661391 4751631 1013 + 661391 4751661 1012 + 661391 4751691 1012 + 661391 4751721 1011 + 661391 4751751 1008 + 661391 4751781 1002 + 661391 4751811 989 + 661391 4751841 976 + 661391 4751871 964 + 661391 4751901 953 + 661391 4751931 944 + 661391 4751961 928 + 661391 4751991 916 + 661391 4752021 906 + 661391 4752051 899 + 661391 4752081 892 + 661391 4752111 888 + 661391 4752141 884 + 661391 4752171 881 + 661391 4752201 878 + 661391 4752231 875 + 661391 4752261 872 + 661391 4752291 870 + 661391 4752321 867 + 661391 4752351 862 + 661391 4752381 861 + 661391 4752411 862 + 661391 4752441 861 + 661391 4752471 848 + 661391 4752501 842 + 661391 4752531 836 + 661391 4752561 830 + 661391 4752591 823 + 661391 4752621 821 + 661391 4752651 819 + 661391 4752681 820 + 661391 4752711 819 + 661391 4752741 809 + 661391 4752771 809 + 661391 4752801 809 + 661391 4752831 826 + 661391 4752861 841 + 661391 4752891 855 + 661391 4752921 867 + 661391 4752951 870 + 661391 4752981 870 + 661391 4753011 870 + 661391 4753041 869 + 661391 4753071 869 + 661391 4753101 869 + 661391 4753131 869 + 661391 4753161 869 + 661391 4753191 869 + 661391 4753221 867 + 661391 4753251 867 + 661391 4753281 866 + 661391 4753311 867 + 661391 4753341 867 + 661391 4753371 867 + 661391 4753401 868 + 661391 4753431 869 + 661391 4753461 869 + 661391 4753491 869 + 661391 4753521 869 + 661391 4753551 853 + 661391 4753581 820 + 661391 4753611 809 + 661391 4753641 809 + 661391 4753671 809 + 661391 4753701 809 + 661391 4753731 820 + 661391 4753761 835 + 661391 4753791 852 + 661391 4753821 869 + 661391 4753851 870 + 661391 4753881 871 + 661391 4753911 872 + 661391 4753941 874 + 661391 4753971 875 + 661391 4754001 876 + 661391 4754031 879 + 661391 4754061 885 + 661391 4754091 906 + 661391 4754121 939 + 661391 4754151 961 + 661391 4754181 965 + 661391 4754211 965 + 661391 4754241 964 + 661391 4754271 964 + 661391 4754301 964 + 661391 4754331 964 + 661391 4754361 964 + 661391 4754391 965 + 661391 4754421 966 + 661391 4754451 965 + 661391 4754481 965 + 661391 4754511 966 + 661391 4754541 965 + 661421 4751301 1020 + 661421 4751331 1019 + 661421 4751361 1018 + 661421 4751391 1018 + 661421 4751421 1017 + 661421 4751451 1016 + 661421 4751481 1015 + 661421 4751511 1015 + 661421 4751541 1015 + 661421 4751571 1015 + 661421 4751601 1014 + 661421 4751631 1013 + 661421 4751661 1013 + 661421 4751691 1013 + 661421 4751721 1014 + 661421 4751751 1010 + 661421 4751781 996 + 661421 4751811 981 + 661421 4751841 966 + 661421 4751871 953 + 661421 4751901 945 + 661421 4751931 934 + 661421 4751961 927 + 661421 4751991 914 + 661421 4752021 905 + 661421 4752051 897 + 661421 4752081 892 + 661421 4752111 887 + 661421 4752141 884 + 661421 4752171 881 + 661421 4752201 878 + 661421 4752231 875 + 661421 4752261 872 + 661421 4752291 869 + 661421 4752321 866 + 661421 4752351 862 + 661421 4752381 858 + 661421 4752411 854 + 661421 4752441 853 + 661421 4752471 844 + 661421 4752501 834 + 661421 4752531 830 + 661421 4752561 828 + 661421 4752591 832 + 661421 4752621 833 + 661421 4752651 824 + 661421 4752681 816 + 661421 4752711 813 + 661421 4752741 809 + 661421 4752771 809 + 661421 4752801 814 + 661421 4752831 831 + 661421 4752861 849 + 661421 4752891 862 + 661421 4752921 868 + 661421 4752951 869 + 661421 4752981 869 + 661421 4753011 870 + 661421 4753041 870 + 661421 4753071 869 + 661421 4753101 869 + 661421 4753131 869 + 661421 4753161 869 + 661421 4753191 868 + 661421 4753221 868 + 661421 4753251 867 + 661421 4753281 866 + 661421 4753311 867 + 661421 4753341 867 + 661421 4753371 868 + 661421 4753401 867 + 661421 4753431 869 + 661421 4753461 869 + 661421 4753491 871 + 661421 4753521 871 + 661421 4753551 859 + 661421 4753581 821 + 661421 4753611 809 + 661421 4753641 809 + 661421 4753671 809 + 661421 4753701 809 + 661421 4753731 818 + 661421 4753761 830 + 661421 4753791 848 + 661421 4753821 869 + 661421 4753851 870 + 661421 4753881 871 + 661421 4753911 873 + 661421 4753941 874 + 661421 4753971 875 + 661421 4754001 878 + 661421 4754031 881 + 661421 4754061 889 + 661421 4754091 916 + 661421 4754121 948 + 661421 4754151 968 + 661421 4754181 968 + 661421 4754211 966 + 661421 4754241 965 + 661421 4754271 965 + 661421 4754301 965 + 661421 4754331 965 + 661421 4754361 965 + 661421 4754391 966 + 661421 4754421 967 + 661421 4754451 966 + 661421 4754481 966 + 661421 4754511 966 + 661421 4754541 966 + 661451 4751301 1020 + 661451 4751331 1019 + 661451 4751361 1019 + 661451 4751391 1018 + 661451 4751421 1018 + 661451 4751451 1017 + 661451 4751481 1016 + 661451 4751511 1016 + 661451 4751541 1016 + 661451 4751571 1015 + 661451 4751601 1015 + 661451 4751631 1014 + 661451 4751661 1014 + 661451 4751691 1014 + 661451 4751721 1014 + 661451 4751751 1013 + 661451 4751781 1001 + 661451 4751811 985 + 661451 4751841 970 + 661451 4751871 953 + 661451 4751901 938 + 661451 4751931 918 + 661451 4751961 912 + 661451 4751991 911 + 661451 4752021 905 + 661451 4752051 897 + 661451 4752081 889 + 661451 4752111 885 + 661451 4752141 882 + 661451 4752171 879 + 661451 4752201 877 + 661451 4752231 874 + 661451 4752261 872 + 661451 4752291 869 + 661451 4752321 865 + 661451 4752351 861 + 661451 4752381 862 + 661451 4752411 850 + 661451 4752441 844 + 661451 4752471 837 + 661451 4752501 830 + 661451 4752531 833 + 661451 4752561 837 + 661451 4752591 840 + 661451 4752621 844 + 661451 4752651 844 + 661451 4752681 831 + 661451 4752711 819 + 661451 4752741 812 + 661451 4752771 810 + 661451 4752801 813 + 661451 4752831 833 + 661451 4752861 853 + 661451 4752891 863 + 661451 4752921 865 + 661451 4752951 867 + 661451 4752981 868 + 661451 4753011 869 + 661451 4753041 869 + 661451 4753071 869 + 661451 4753101 868 + 661451 4753131 868 + 661451 4753161 868 + 661451 4753191 868 + 661451 4753221 869 + 661451 4753251 868 + 661451 4753281 867 + 661451 4753311 868 + 661451 4753341 868 + 661451 4753371 868 + 661451 4753401 867 + 661451 4753431 868 + 661451 4753461 869 + 661451 4753491 871 + 661451 4753521 870 + 661451 4753551 859 + 661451 4753581 809 + 661451 4753611 809 + 661451 4753641 809 + 661451 4753671 809 + 661451 4753701 809 + 661451 4753731 817 + 661451 4753761 830 + 661451 4753791 846 + 661451 4753821 868 + 661451 4753851 871 + 661451 4753881 872 + 661451 4753911 874 + 661451 4753941 875 + 661451 4753971 876 + 661451 4754001 878 + 661451 4754031 882 + 661451 4754061 895 + 661451 4754091 916 + 661451 4754121 948 + 661451 4754151 965 + 661451 4754181 968 + 661451 4754211 967 + 661451 4754241 966 + 661451 4754271 966 + 661451 4754301 965 + 661451 4754331 965 + 661451 4754361 966 + 661451 4754391 966 + 661451 4754421 967 + 661451 4754451 967 + 661451 4754481 967 + 661451 4754511 966 + 661451 4754541 966 + 661481 4751301 1020 + 661481 4751331 1019 + 661481 4751361 1019 + 661481 4751391 1019 + 661481 4751421 1018 + 661481 4751451 1018 + 661481 4751481 1017 + 661481 4751511 1017 + 661481 4751541 1016 + 661481 4751571 1016 + 661481 4751601 1016 + 661481 4751631 1015 + 661481 4751661 1015 + 661481 4751691 1015 + 661481 4751721 1014 + 661481 4751751 1011 + 661481 4751781 1003 + 661481 4751811 988 + 661481 4751841 975 + 661481 4751871 957 + 661481 4751901 943 + 661481 4751931 921 + 661481 4751961 914 + 661481 4751991 909 + 661481 4752021 900 + 661481 4752051 892 + 661481 4752081 889 + 661481 4752111 884 + 661481 4752141 881 + 661481 4752171 876 + 661481 4752201 875 + 661481 4752231 873 + 661481 4752261 871 + 661481 4752291 868 + 661481 4752321 864 + 661481 4752351 860 + 661481 4752381 858 + 661481 4752411 850 + 661481 4752441 843 + 661481 4752471 837 + 661481 4752501 834 + 661481 4752531 840 + 661481 4752561 842 + 661481 4752591 848 + 661481 4752621 855 + 661481 4752651 856 + 661481 4752681 841 + 661481 4752711 829 + 661481 4752741 814 + 661481 4752771 810 + 661481 4752801 811 + 661481 4752831 824 + 661481 4752861 845 + 661481 4752891 857 + 661481 4752921 863 + 661481 4752951 865 + 661481 4752981 867 + 661481 4753011 868 + 661481 4753041 869 + 661481 4753071 868 + 661481 4753101 868 + 661481 4753131 868 + 661481 4753161 869 + 661481 4753191 869 + 661481 4753221 869 + 661481 4753251 869 + 661481 4753281 868 + 661481 4753311 868 + 661481 4753341 868 + 661481 4753371 869 + 661481 4753401 868 + 661481 4753431 868 + 661481 4753461 869 + 661481 4753491 870 + 661481 4753521 869 + 661481 4753551 857 + 661481 4753581 809 + 661481 4753611 809 + 661481 4753641 809 + 661481 4753671 809 + 661481 4753701 809 + 661481 4753731 817 + 661481 4753761 833 + 661481 4753791 852 + 661481 4753821 869 + 661481 4753851 874 + 661481 4753881 875 + 661481 4753911 875 + 661481 4753941 876 + 661481 4753971 877 + 661481 4754001 879 + 661481 4754031 882 + 661481 4754061 898 + 661481 4754091 914 + 661481 4754121 944 + 661481 4754151 968 + 661481 4754181 967 + 661481 4754211 968 + 661481 4754241 967 + 661481 4754271 966 + 661481 4754301 966 + 661481 4754331 966 + 661481 4754361 966 + 661481 4754391 967 + 661481 4754421 968 + 661481 4754451 968 + 661481 4754481 967 + 661481 4754511 967 + 661481 4754541 966 + 661511 4751301 1020 + 661511 4751331 1020 + 661511 4751361 1019 + 661511 4751391 1019 + 661511 4751421 1018 + 661511 4751451 1018 + 661511 4751481 1018 + 661511 4751511 1018 + 661511 4751541 1017 + 661511 4751571 1017 + 661511 4751601 1016 + 661511 4751631 1016 + 661511 4751661 1016 + 661511 4751691 1015 + 661511 4751721 1014 + 661511 4751751 1009 + 661511 4751781 997 + 661511 4751811 985 + 661511 4751841 971 + 661511 4751871 955 + 661511 4751901 940 + 661511 4751931 925 + 661511 4751961 923 + 661511 4751991 915 + 661511 4752021 903 + 661511 4752051 895 + 661511 4752081 889 + 661511 4752111 885 + 661511 4752141 881 + 661511 4752171 878 + 661511 4752201 875 + 661511 4752231 872 + 661511 4752261 870 + 661511 4752291 867 + 661511 4752321 863 + 661511 4752351 856 + 661511 4752381 848 + 661511 4752411 847 + 661511 4752441 840 + 661511 4752471 836 + 661511 4752501 839 + 661511 4752531 842 + 661511 4752561 844 + 661511 4752591 851 + 661511 4752621 860 + 661511 4752651 861 + 661511 4752681 845 + 661511 4752711 834 + 661511 4752741 820 + 661511 4752771 813 + 661511 4752801 811 + 661511 4752831 811 + 661511 4752861 831 + 661511 4752891 849 + 661511 4752921 861 + 661511 4752951 863 + 661511 4752981 865 + 661511 4753011 867 + 661511 4753041 867 + 661511 4753071 867 + 661511 4753101 868 + 661511 4753131 869 + 661511 4753161 869 + 661511 4753191 869 + 661511 4753221 869 + 661511 4753251 868 + 661511 4753281 868 + 661511 4753311 869 + 661511 4753341 869 + 661511 4753371 869 + 661511 4753401 868 + 661511 4753431 868 + 661511 4753461 869 + 661511 4753491 870 + 661511 4753521 869 + 661511 4753551 857 + 661511 4753581 809 + 661511 4753611 809 + 661511 4753641 809 + 661511 4753671 809 + 661511 4753701 809 + 661511 4753731 817 + 661511 4753761 838 + 661511 4753791 856 + 661511 4753821 872 + 661511 4753851 877 + 661511 4753881 877 + 661511 4753911 877 + 661511 4753941 877 + 661511 4753971 878 + 661511 4754001 881 + 661511 4754031 883 + 661511 4754061 899 + 661511 4754091 912 + 661511 4754121 942 + 661511 4754151 968 + 661511 4754181 968 + 661511 4754211 968 + 661511 4754241 967 + 661511 4754271 967 + 661511 4754301 966 + 661511 4754331 966 + 661511 4754361 966 + 661511 4754391 967 + 661511 4754421 968 + 661511 4754451 968 + 661511 4754481 967 + 661511 4754511 967 + 661511 4754541 966 + 661541 4751301 1021 + 661541 4751331 1020 + 661541 4751361 1019 + 661541 4751391 1019 + 661541 4751421 1019 + 661541 4751451 1018 + 661541 4751481 1018 + 661541 4751511 1018 + 661541 4751541 1018 + 661541 4751571 1018 + 661541 4751601 1017 + 661541 4751631 1017 + 661541 4751661 1016 + 661541 4751691 1015 + 661541 4751721 1013 + 661541 4751751 1004 + 661541 4751781 991 + 661541 4751811 976 + 661541 4751841 963 + 661541 4751871 947 + 661541 4751901 936 + 661541 4751931 938 + 661541 4751961 931 + 661541 4751991 917 + 661541 4752021 904 + 661541 4752051 896 + 661541 4752081 890 + 661541 4752111 884 + 661541 4752141 881 + 661541 4752171 877 + 661541 4752201 874 + 661541 4752231 872 + 661541 4752261 869 + 661541 4752291 866 + 661541 4752321 863 + 661541 4752351 853 + 661541 4752381 847 + 661541 4752411 843 + 661541 4752441 838 + 661541 4752471 838 + 661541 4752501 843 + 661541 4752531 845 + 661541 4752561 850 + 661541 4752591 857 + 661541 4752621 865 + 661541 4752651 865 + 661541 4752681 849 + 661541 4752711 837 + 661541 4752741 825 + 661541 4752771 817 + 661541 4752801 813 + 661541 4752831 811 + 661541 4752861 824 + 661541 4752891 842 + 661541 4752921 856 + 661541 4752951 862 + 661541 4752981 864 + 661541 4753011 866 + 661541 4753041 867 + 661541 4753071 868 + 661541 4753101 869 + 661541 4753131 869 + 661541 4753161 869 + 661541 4753191 869 + 661541 4753221 869 + 661541 4753251 869 + 661541 4753281 869 + 661541 4753311 869 + 661541 4753341 869 + 661541 4753371 869 + 661541 4753401 869 + 661541 4753431 869 + 661541 4753461 869 + 661541 4753491 870 + 661541 4753521 869 + 661541 4753551 858 + 661541 4753581 809 + 661541 4753611 809 + 661541 4753641 809 + 661541 4753671 809 + 661541 4753701 809 + 661541 4753731 820 + 661541 4753761 841 + 661541 4753791 858 + 661541 4753821 875 + 661541 4753851 877 + 661541 4753881 877 + 661541 4753911 878 + 661541 4753941 879 + 661541 4753971 880 + 661541 4754001 881 + 661541 4754031 884 + 661541 4754061 900 + 661541 4754091 912 + 661541 4754121 942 + 661541 4754151 968 + 661541 4754181 968 + 661541 4754211 968 + 661541 4754241 967 + 661541 4754271 967 + 661541 4754301 967 + 661541 4754331 967 + 661541 4754361 966 + 661541 4754391 967 + 661541 4754421 968 + 661541 4754451 968 + 661541 4754481 967 + 661541 4754511 967 + 661541 4754541 966 + 661571 4751301 1021 + 661571 4751331 1020 + 661571 4751361 1020 + 661571 4751391 1019 + 661571 4751421 1019 + 661571 4751451 1019 + 661571 4751481 1019 + 661571 4751511 1019 + 661571 4751541 1018 + 661571 4751571 1018 + 661571 4751601 1018 + 661571 4751631 1017 + 661571 4751661 1016 + 661571 4751691 1015 + 661571 4751721 1010 + 661571 4751751 997 + 661571 4751781 985 + 661571 4751811 970 + 661571 4751841 958 + 661571 4751871 952 + 661571 4751901 948 + 661571 4751931 943 + 661571 4751961 927 + 661571 4751991 913 + 661571 4752021 903 + 661571 4752051 895 + 661571 4752081 890 + 661571 4752111 885 + 661571 4752141 880 + 661571 4752171 877 + 661571 4752201 874 + 661571 4752231 871 + 661571 4752261 868 + 661571 4752291 865 + 661571 4752321 862 + 661571 4752351 851 + 661571 4752381 846 + 661571 4752411 841 + 661571 4752441 839 + 661571 4752471 842 + 661571 4752501 849 + 661571 4752531 853 + 661571 4752561 858 + 661571 4752591 864 + 661571 4752621 870 + 661571 4752651 870 + 661571 4752681 854 + 661571 4752711 840 + 661571 4752741 829 + 661571 4752771 820 + 661571 4752801 814 + 661571 4752831 811 + 661571 4752861 819 + 661571 4752891 839 + 661571 4752921 857 + 661571 4752951 862 + 661571 4752981 864 + 661571 4753011 866 + 661571 4753041 868 + 661571 4753071 869 + 661571 4753101 869 + 661571 4753131 869 + 661571 4753161 869 + 661571 4753191 869 + 661571 4753221 869 + 661571 4753251 869 + 661571 4753281 869 + 661571 4753311 869 + 661571 4753341 869 + 661571 4753371 869 + 661571 4753401 869 + 661571 4753431 869 + 661571 4753461 869 + 661571 4753491 870 + 661571 4753521 866 + 661571 4753551 855 + 661571 4753581 809 + 661571 4753611 809 + 661571 4753641 809 + 661571 4753671 809 + 661571 4753701 812 + 661571 4753731 823 + 661571 4753761 844 + 661571 4753791 866 + 661571 4753821 876 + 661571 4753851 878 + 661571 4753881 878 + 661571 4753911 878 + 661571 4753941 880 + 661571 4753971 880 + 661571 4754001 882 + 661571 4754031 884 + 661571 4754061 900 + 661571 4754091 912 + 661571 4754121 944 + 661571 4754151 968 + 661571 4754181 968 + 661571 4754211 968 + 661571 4754241 967 + 661571 4754271 967 + 661571 4754301 967 + 661571 4754331 967 + 661571 4754361 967 + 661571 4754391 967 + 661571 4754421 968 + 661571 4754451 968 + 661571 4754481 967 + 661571 4754511 967 + 661571 4754541 967 + 661601 4751301 1021 + 661601 4751331 1021 + 661601 4751361 1020 + 661601 4751391 1020 + 661601 4751421 1019 + 661601 4751451 1019 + 661601 4751481 1019 + 661601 4751511 1019 + 661601 4751541 1019 + 661601 4751571 1019 + 661601 4751601 1019 + 661601 4751631 1018 + 661601 4751661 1017 + 661601 4751691 1015 + 661601 4751721 1008 + 661601 4751751 995 + 661601 4751781 985 + 661601 4751811 971 + 661601 4751841 963 + 661601 4751871 957 + 661601 4751901 949 + 661601 4751931 935 + 661601 4751961 916 + 661601 4751991 906 + 661601 4752021 898 + 661601 4752051 891 + 661601 4752081 887 + 661601 4752111 883 + 661601 4752141 878 + 661601 4752171 876 + 661601 4752201 873 + 661601 4752231 870 + 661601 4752261 867 + 661601 4752291 863 + 661601 4752321 860 + 661601 4752351 852 + 661601 4752381 852 + 661601 4752411 845 + 661601 4752441 842 + 661601 4752471 843 + 661601 4752501 853 + 661601 4752531 862 + 661601 4752561 866 + 661601 4752591 869 + 661601 4752621 872 + 661601 4752651 872 + 661601 4752681 865 + 661601 4752711 845 + 661601 4752741 833 + 661601 4752771 822 + 661601 4752801 815 + 661601 4752831 811 + 661601 4752861 819 + 661601 4752891 840 + 661601 4752921 858 + 661601 4752951 862 + 661601 4752981 864 + 661601 4753011 866 + 661601 4753041 868 + 661601 4753071 869 + 661601 4753101 869 + 661601 4753131 869 + 661601 4753161 869 + 661601 4753191 869 + 661601 4753221 869 + 661601 4753251 869 + 661601 4753281 869 + 661601 4753311 869 + 661601 4753341 869 + 661601 4753371 869 + 661601 4753401 869 + 661601 4753431 869 + 661601 4753461 869 + 661601 4753491 869 + 661601 4753521 861 + 661601 4753551 842 + 661601 4753581 809 + 661601 4753611 809 + 661601 4753641 809 + 661601 4753671 809 + 661601 4753701 815 + 661601 4753731 826 + 661601 4753761 850 + 661601 4753791 869 + 661601 4753821 877 + 661601 4753851 878 + 661601 4753881 879 + 661601 4753911 879 + 661601 4753941 880 + 661601 4753971 881 + 661601 4754001 882 + 661601 4754031 884 + 661601 4754061 900 + 661601 4754091 913 + 661601 4754121 946 + 661601 4754151 968 + 661601 4754181 968 + 661601 4754211 968 + 661601 4754241 968 + 661601 4754271 968 + 661601 4754301 967 + 661601 4754331 968 + 661601 4754361 967 + 661601 4754391 967 + 661601 4754421 968 + 661601 4754451 968 + 661601 4754481 967 + 661601 4754511 967 + 661601 4754541 967 + 661631 4751301 1021 + 661631 4751331 1021 + 661631 4751361 1020 + 661631 4751391 1020 + 661631 4751421 1020 + 661631 4751451 1020 + 661631 4751481 1020 + 661631 4751511 1020 + 661631 4751541 1019 + 661631 4751571 1019 + 661631 4751601 1019 + 661631 4751631 1019 + 661631 4751661 1019 + 661631 4751691 1017 + 661631 4751721 1011 + 661631 4751751 998 + 661631 4751781 984 + 661631 4751811 971 + 661631 4751841 962 + 661631 4751871 952 + 661631 4751901 940 + 661631 4751931 930 + 661631 4751961 917 + 661631 4751991 908 + 661631 4752021 898 + 661631 4752051 891 + 661631 4752081 888 + 661631 4752111 884 + 661631 4752141 879 + 661631 4752171 877 + 661631 4752201 873 + 661631 4752231 870 + 661631 4752261 867 + 661631 4752291 862 + 661631 4752321 860 + 661631 4752351 859 + 661631 4752381 859 + 661631 4752411 845 + 661631 4752441 844 + 661631 4752471 847 + 661631 4752501 861 + 661631 4752531 863 + 661631 4752561 868 + 661631 4752591 869 + 661631 4752621 871 + 661631 4752651 872 + 661631 4752681 868 + 661631 4752711 853 + 661631 4752741 836 + 661631 4752771 823 + 661631 4752801 815 + 661631 4752831 811 + 661631 4752861 819 + 661631 4752891 840 + 661631 4752921 856 + 661631 4752951 862 + 661631 4752981 864 + 661631 4753011 866 + 661631 4753041 868 + 661631 4753071 869 + 661631 4753101 869 + 661631 4753131 869 + 661631 4753161 869 + 661631 4753191 869 + 661631 4753221 869 + 661631 4753251 869 + 661631 4753281 869 + 661631 4753311 869 + 661631 4753341 869 + 661631 4753371 869 + 661631 4753401 869 + 661631 4753431 869 + 661631 4753461 869 + 661631 4753491 870 + 661631 4753521 860 + 661631 4753551 831 + 661631 4753581 809 + 661631 4753611 809 + 661631 4753641 809 + 661631 4753671 809 + 661631 4753701 817 + 661631 4753731 830 + 661631 4753761 853 + 661631 4753791 871 + 661631 4753821 877 + 661631 4753851 878 + 661631 4753881 880 + 661631 4753911 879 + 661631 4753941 880 + 661631 4753971 881 + 661631 4754001 882 + 661631 4754031 884 + 661631 4754061 901 + 661631 4754091 914 + 661631 4754121 947 + 661631 4754151 968 + 661631 4754181 968 + 661631 4754211 968 + 661631 4754241 968 + 661631 4754271 968 + 661631 4754301 968 + 661631 4754331 968 + 661631 4754361 968 + 661631 4754391 968 + 661631 4754421 968 + 661631 4754451 968 + 661631 4754481 967 + 661631 4754511 967 + 661631 4754541 967 + 661661 4751301 1021 + 661661 4751331 1021 + 661661 4751361 1021 + 661661 4751391 1020 + 661661 4751421 1020 + 661661 4751451 1020 + 661661 4751481 1020 + 661661 4751511 1020 + 661661 4751541 1020 + 661661 4751571 1020 + 661661 4751601 1020 + 661661 4751631 1021 + 661661 4751661 1021 + 661661 4751691 1021 + 661661 4751721 1016 + 661661 4751751 1004 + 661661 4751781 993 + 661661 4751811 975 + 661661 4751841 963 + 661661 4751871 953 + 661661 4751901 941 + 661661 4751931 929 + 661661 4751961 918 + 661661 4751991 910 + 661661 4752021 902 + 661661 4752051 895 + 661661 4752081 889 + 661661 4752111 883 + 661661 4752141 879 + 661661 4752171 876 + 661661 4752201 873 + 661661 4752231 869 + 661661 4752261 867 + 661661 4752291 864 + 661661 4752321 862 + 661661 4752351 861 + 661661 4752381 861 + 661661 4752411 850 + 661661 4752441 847 + 661661 4752471 854 + 661661 4752501 862 + 661661 4752531 865 + 661661 4752561 867 + 661661 4752591 868 + 661661 4752621 870 + 661661 4752651 869 + 661661 4752681 871 + 661661 4752711 862 + 661661 4752741 841 + 661661 4752771 825 + 661661 4752801 814 + 661661 4752831 811 + 661661 4752861 818 + 661661 4752891 841 + 661661 4752921 857 + 661661 4752951 862 + 661661 4752981 864 + 661661 4753011 866 + 661661 4753041 867 + 661661 4753071 868 + 661661 4753101 869 + 661661 4753131 869 + 661661 4753161 869 + 661661 4753191 869 + 661661 4753221 869 + 661661 4753251 869 + 661661 4753281 869 + 661661 4753311 869 + 661661 4753341 869 + 661661 4753371 869 + 661661 4753401 870 + 661661 4753431 870 + 661661 4753461 870 + 661661 4753491 870 + 661661 4753521 863 + 661661 4753551 831 + 661661 4753581 809 + 661661 4753611 809 + 661661 4753641 809 + 661661 4753671 809 + 661661 4753701 818 + 661661 4753731 834 + 661661 4753761 857 + 661661 4753791 873 + 661661 4753821 877 + 661661 4753851 878 + 661661 4753881 880 + 661661 4753911 881 + 661661 4753941 881 + 661661 4753971 882 + 661661 4754001 883 + 661661 4754031 885 + 661661 4754061 901 + 661661 4754091 915 + 661661 4754121 950 + 661661 4754151 968 + 661661 4754181 968 + 661661 4754211 968 + 661661 4754241 968 + 661661 4754271 968 + 661661 4754301 968 + 661661 4754331 968 + 661661 4754361 968 + 661661 4754391 968 + 661661 4754421 968 + 661661 4754451 968 + 661661 4754481 968 + 661661 4754511 967 + 661661 4754541 967 + 661691 4751301 1021 + 661691 4751331 1021 + 661691 4751361 1021 + 661691 4751391 1021 + 661691 4751421 1021 + 661691 4751451 1020 + 661691 4751481 1020 + 661691 4751511 1021 + 661691 4751541 1021 + 661691 4751571 1021 + 661691 4751601 1021 + 661691 4751631 1021 + 661691 4751661 1022 + 661691 4751691 1022 + 661691 4751721 1020 + 661691 4751751 1010 + 661691 4751781 998 + 661691 4751811 980 + 661691 4751841 967 + 661691 4751871 954 + 661691 4751901 946 + 661691 4751931 934 + 661691 4751961 922 + 661691 4751991 912 + 661691 4752021 903 + 661691 4752051 894 + 661691 4752081 888 + 661691 4752111 883 + 661691 4752141 879 + 661691 4752171 876 + 661691 4752201 873 + 661691 4752231 870 + 661691 4752261 868 + 661691 4752291 866 + 661691 4752321 863 + 661691 4752351 861 + 661691 4752381 862 + 661691 4752411 856 + 661691 4752441 853 + 661691 4752471 859 + 661691 4752501 864 + 661691 4752531 867 + 661691 4752561 866 + 661691 4752591 866 + 661691 4752621 866 + 661691 4752651 865 + 661691 4752681 864 + 661691 4752711 856 + 661691 4752741 838 + 661691 4752771 823 + 661691 4752801 813 + 661691 4752831 811 + 661691 4752861 818 + 661691 4752891 842 + 661691 4752921 859 + 661691 4752951 862 + 661691 4752981 864 + 661691 4753011 866 + 661691 4753041 867 + 661691 4753071 869 + 661691 4753101 869 + 661691 4753131 869 + 661691 4753161 869 + 661691 4753191 869 + 661691 4753221 869 + 661691 4753251 869 + 661691 4753281 869 + 661691 4753311 869 + 661691 4753341 869 + 661691 4753371 869 + 661691 4753401 870 + 661691 4753431 870 + 661691 4753461 870 + 661691 4753491 870 + 661691 4753521 863 + 661691 4753551 832 + 661691 4753581 809 + 661691 4753611 809 + 661691 4753641 809 + 661691 4753671 809 + 661691 4753701 820 + 661691 4753731 838 + 661691 4753761 862 + 661691 4753791 874 + 661691 4753821 877 + 661691 4753851 879 + 661691 4753881 880 + 661691 4753911 882 + 661691 4753941 883 + 661691 4753971 884 + 661691 4754001 885 + 661691 4754031 886 + 661691 4754061 901 + 661691 4754091 916 + 661691 4754121 948 + 661691 4754151 968 + 661691 4754181 968 + 661691 4754211 968 + 661691 4754241 968 + 661691 4754271 968 + 661691 4754301 968 + 661691 4754331 968 + 661691 4754361 968 + 661691 4754391 968 + 661691 4754421 968 + 661691 4754451 968 + 661691 4754481 968 + 661691 4754511 968 + 661691 4754541 968 + 661721 4751301 1021 + 661721 4751331 1021 + 661721 4751361 1021 + 661721 4751391 1021 + 661721 4751421 1021 + 661721 4751451 1021 + 661721 4751481 1021 + 661721 4751511 1021 + 661721 4751541 1021 + 661721 4751571 1021 + 661721 4751601 1021 + 661721 4751631 1021 + 661721 4751661 1021 + 661721 4751691 1022 + 661721 4751721 1021 + 661721 4751751 1014 + 661721 4751781 998 + 661721 4751811 980 + 661721 4751841 968 + 661721 4751871 958 + 661721 4751901 949 + 661721 4751931 936 + 661721 4751961 925 + 661721 4751991 914 + 661721 4752021 904 + 661721 4752051 893 + 661721 4752081 888 + 661721 4752111 883 + 661721 4752141 879 + 661721 4752171 876 + 661721 4752201 873 + 661721 4752231 871 + 661721 4752261 869 + 661721 4752291 867 + 661721 4752321 865 + 661721 4752351 864 + 661721 4752381 863 + 661721 4752411 861 + 661721 4752441 860 + 661721 4752471 862 + 661721 4752501 867 + 661721 4752531 867 + 661721 4752561 864 + 661721 4752591 862 + 661721 4752621 858 + 661721 4752651 854 + 661721 4752681 849 + 661721 4752711 839 + 661721 4752741 828 + 661721 4752771 814 + 661721 4752801 811 + 661721 4752831 813 + 661721 4752861 823 + 661721 4752891 844 + 661721 4752921 861 + 661721 4752951 863 + 661721 4752981 864 + 661721 4753011 866 + 661721 4753041 868 + 661721 4753071 869 + 661721 4753101 869 + 661721 4753131 869 + 661721 4753161 869 + 661721 4753191 869 + 661721 4753221 869 + 661721 4753251 869 + 661721 4753281 869 + 661721 4753311 869 + 661721 4753341 871 + 661721 4753371 870 + 661721 4753401 871 + 661721 4753431 871 + 661721 4753461 872 + 661721 4753491 872 + 661721 4753521 860 + 661721 4753551 838 + 661721 4753581 809 + 661721 4753611 809 + 661721 4753641 809 + 661721 4753671 809 + 661721 4753701 820 + 661721 4753731 838 + 661721 4753761 863 + 661721 4753791 875 + 661721 4753821 877 + 661721 4753851 879 + 661721 4753881 880 + 661721 4753911 882 + 661721 4753941 883 + 661721 4753971 886 + 661721 4754001 891 + 661721 4754031 896 + 661721 4754061 902 + 661721 4754091 917 + 661721 4754121 947 + 661721 4754151 968 + 661721 4754181 968 + 661721 4754211 968 + 661721 4754241 968 + 661721 4754271 968 + 661721 4754301 968 + 661721 4754331 969 + 661721 4754361 968 + 661721 4754391 968 + 661721 4754421 968 + 661721 4754451 968 + 661721 4754481 968 + 661721 4754511 968 + 661721 4754541 968 + 661751 4751301 1021 + 661751 4751331 1021 + 661751 4751361 1021 + 661751 4751391 1021 + 661751 4751421 1021 + 661751 4751451 1021 + 661751 4751481 1021 + 661751 4751511 1022 + 661751 4751541 1022 + 661751 4751571 1022 + 661751 4751601 1022 + 661751 4751631 1022 + 661751 4751661 1023 + 661751 4751691 1023 + 661751 4751721 1022 + 661751 4751751 1016 + 661751 4751781 1000 + 661751 4751811 986 + 661751 4751841 974 + 661751 4751871 962 + 661751 4751901 950 + 661751 4751931 939 + 661751 4751961 926 + 661751 4751991 913 + 661751 4752021 905 + 661751 4752051 896 + 661751 4752081 890 + 661751 4752111 883 + 661751 4752141 879 + 661751 4752171 876 + 661751 4752201 874 + 661751 4752231 871 + 661751 4752261 869 + 661751 4752291 867 + 661751 4752321 866 + 661751 4752351 865 + 661751 4752381 863 + 661751 4752411 862 + 661751 4752441 863 + 661751 4752471 865 + 661751 4752501 867 + 661751 4752531 862 + 661751 4752561 854 + 661751 4752591 850 + 661751 4752621 843 + 661751 4752651 835 + 661751 4752681 831 + 661751 4752711 824 + 661751 4752741 815 + 661751 4752771 811 + 661751 4752801 812 + 661751 4752831 818 + 661751 4752861 829 + 661751 4752891 843 + 661751 4752921 860 + 661751 4752951 862 + 661751 4752981 864 + 661751 4753011 866 + 661751 4753041 868 + 661751 4753071 869 + 661751 4753101 869 + 661751 4753131 869 + 661751 4753161 869 + 661751 4753191 869 + 661751 4753221 869 + 661751 4753251 869 + 661751 4753281 870 + 661751 4753311 870 + 661751 4753341 871 + 661751 4753371 870 + 661751 4753401 870 + 661751 4753431 870 + 661751 4753461 870 + 661751 4753491 870 + 661751 4753521 861 + 661751 4753551 844 + 661751 4753581 809 + 661751 4753611 809 + 661751 4753641 809 + 661751 4753671 809 + 661751 4753701 820 + 661751 4753731 837 + 661751 4753761 859 + 661751 4753791 872 + 661751 4753821 877 + 661751 4753851 878 + 661751 4753881 880 + 661751 4753911 882 + 661751 4753941 884 + 661751 4753971 889 + 661751 4754001 893 + 661751 4754031 897 + 661751 4754061 901 + 661751 4754091 917 + 661751 4754121 946 + 661751 4754151 968 + 661751 4754181 968 + 661751 4754211 968 + 661751 4754241 968 + 661751 4754271 969 + 661751 4754301 969 + 661751 4754331 969 + 661751 4754361 968 + 661751 4754391 968 + 661751 4754421 969 + 661751 4754451 969 + 661751 4754481 968 + 661751 4754511 968 + 661751 4754541 968 + 661781 4751301 1021 + 661781 4751331 1021 + 661781 4751361 1021 + 661781 4751391 1021 + 661781 4751421 1021 + 661781 4751451 1021 + 661781 4751481 1022 + 661781 4751511 1022 + 661781 4751541 1022 + 661781 4751571 1022 + 661781 4751601 1022 + 661781 4751631 1022 + 661781 4751661 1023 + 661781 4751691 1023 + 661781 4751721 1022 + 661781 4751751 1017 + 661781 4751781 1002 + 661781 4751811 988 + 661781 4751841 976 + 661781 4751871 963 + 661781 4751901 950 + 661781 4751931 937 + 661781 4751961 924 + 661781 4751991 913 + 661781 4752021 905 + 661781 4752051 897 + 661781 4752081 889 + 661781 4752111 883 + 661781 4752141 877 + 661781 4752171 875 + 661781 4752201 874 + 661781 4752231 872 + 661781 4752261 870 + 661781 4752291 868 + 661781 4752321 867 + 661781 4752351 865 + 661781 4752381 864 + 661781 4752411 863 + 661781 4752441 863 + 661781 4752471 862 + 661781 4752501 856 + 661781 4752531 851 + 661781 4752561 842 + 661781 4752591 833 + 661781 4752621 828 + 661781 4752651 820 + 661781 4752681 817 + 661781 4752711 812 + 661781 4752741 812 + 661781 4752771 813 + 661781 4752801 818 + 661781 4752831 824 + 661781 4752861 832 + 661781 4752891 843 + 661781 4752921 855 + 661781 4752951 862 + 661781 4752981 865 + 661781 4753011 867 + 661781 4753041 868 + 661781 4753071 869 + 661781 4753101 869 + 661781 4753131 869 + 661781 4753161 869 + 661781 4753191 869 + 661781 4753221 869 + 661781 4753251 869 + 661781 4753281 870 + 661781 4753311 870 + 661781 4753341 870 + 661781 4753371 871 + 661781 4753401 871 + 661781 4753431 871 + 661781 4753461 870 + 661781 4753491 870 + 661781 4753521 865 + 661781 4753551 844 + 661781 4753581 817 + 661781 4753611 809 + 661781 4753641 809 + 661781 4753671 809 + 661781 4753701 819 + 661781 4753731 834 + 661781 4753761 850 + 661781 4753791 870 + 661781 4753821 876 + 661781 4753851 878 + 661781 4753881 880 + 661781 4753911 882 + 661781 4753941 885 + 661781 4753971 887 + 661781 4754001 892 + 661781 4754031 897 + 661781 4754061 901 + 661781 4754091 916 + 661781 4754121 945 + 661781 4754151 968 + 661781 4754181 968 + 661781 4754211 968 + 661781 4754241 968 + 661781 4754271 969 + 661781 4754301 969 + 661781 4754331 968 + 661781 4754361 968 + 661781 4754391 969 + 661781 4754421 969 + 661781 4754451 969 + 661781 4754481 969 + 661781 4754511 968 + 661781 4754541 968 + 661811 4751301 1021 + 661811 4751331 1021 + 661811 4751361 1021 + 661811 4751391 1021 + 661811 4751421 1021 + 661811 4751451 1022 + 661811 4751481 1022 + 661811 4751511 1022 + 661811 4751541 1022 + 661811 4751571 1023 + 661811 4751601 1023 + 661811 4751631 1023 + 661811 4751661 1024 + 661811 4751691 1025 + 661811 4751721 1024 + 661811 4751751 1020 + 661811 4751781 1003 + 661811 4751811 990 + 661811 4751841 982 + 661811 4751871 968 + 661811 4751901 952 + 661811 4751931 936 + 661811 4751961 920 + 661811 4751991 909 + 661811 4752021 901 + 661811 4752051 893 + 661811 4752081 886 + 661811 4752111 882 + 661811 4752141 878 + 661811 4752171 876 + 661811 4752201 874 + 661811 4752231 872 + 661811 4752261 870 + 661811 4752291 868 + 661811 4752321 866 + 661811 4752351 864 + 661811 4752381 863 + 661811 4752411 862 + 661811 4752441 861 + 661811 4752471 852 + 661811 4752501 844 + 661811 4752531 839 + 661811 4752561 830 + 661811 4752591 821 + 661811 4752621 815 + 661811 4752651 812 + 661811 4752681 812 + 661811 4752711 812 + 661811 4752741 815 + 661811 4752771 822 + 661811 4752801 828 + 661811 4752831 833 + 661811 4752861 838 + 661811 4752891 848 + 661811 4752921 861 + 661811 4752951 863 + 661811 4752981 865 + 661811 4753011 867 + 661811 4753041 868 + 661811 4753071 869 + 661811 4753101 869 + 661811 4753131 869 + 661811 4753161 869 + 661811 4753191 869 + 661811 4753221 869 + 661811 4753251 869 + 661811 4753281 870 + 661811 4753311 871 + 661811 4753341 871 + 661811 4753371 872 + 661811 4753401 872 + 661811 4753431 872 + 661811 4753461 872 + 661811 4753491 870 + 661811 4753521 869 + 661811 4753551 849 + 661811 4753581 816 + 661811 4753611 809 + 661811 4753641 809 + 661811 4753671 809 + 661811 4753701 816 + 661811 4753731 832 + 661811 4753761 851 + 661811 4753791 870 + 661811 4753821 877 + 661811 4753851 878 + 661811 4753881 880 + 661811 4753911 882 + 661811 4753941 884 + 661811 4753971 885 + 661811 4754001 889 + 661811 4754031 896 + 661811 4754061 901 + 661811 4754091 914 + 661811 4754121 946 + 661811 4754151 968 + 661811 4754181 968 + 661811 4754211 968 + 661811 4754241 968 + 661811 4754271 969 + 661811 4754301 968 + 661811 4754331 968 + 661811 4754361 969 + 661811 4754391 969 + 661811 4754421 969 + 661811 4754451 969 + 661811 4754481 968 + 661811 4754511 968 + 661811 4754541 968 + 661841 4751301 1021 + 661841 4751331 1021 + 661841 4751361 1021 + 661841 4751391 1021 + 661841 4751421 1022 + 661841 4751451 1022 + 661841 4751481 1022 + 661841 4751511 1022 + 661841 4751541 1023 + 661841 4751571 1023 + 661841 4751601 1024 + 661841 4751631 1025 + 661841 4751661 1025 + 661841 4751691 1026 + 661841 4751721 1025 + 661841 4751751 1021 + 661841 4751781 1006 + 661841 4751811 991 + 661841 4751841 982 + 661841 4751871 966 + 661841 4751901 951 + 661841 4751931 934 + 661841 4751961 918 + 661841 4751991 907 + 661841 4752021 899 + 661841 4752051 894 + 661841 4752081 888 + 661841 4752111 883 + 661841 4752141 879 + 661841 4752171 876 + 661841 4752201 874 + 661841 4752231 872 + 661841 4752261 870 + 661841 4752291 868 + 661841 4752321 867 + 661841 4752351 862 + 661841 4752381 862 + 661841 4752411 861 + 661841 4752441 851 + 661841 4752471 841 + 661841 4752501 832 + 661841 4752531 825 + 661841 4752561 817 + 661841 4752591 812 + 661841 4752621 812 + 661841 4752651 812 + 661841 4752681 818 + 661841 4752711 822 + 661841 4752741 827 + 661841 4752771 834 + 661841 4752801 842 + 661841 4752831 846 + 661841 4752861 852 + 661841 4752891 859 + 661841 4752921 862 + 661841 4752951 863 + 661841 4752981 865 + 661841 4753011 867 + 661841 4753041 868 + 661841 4753071 869 + 661841 4753101 869 + 661841 4753131 869 + 661841 4753161 869 + 661841 4753191 869 + 661841 4753221 869 + 661841 4753251 869 + 661841 4753281 870 + 661841 4753311 870 + 661841 4753341 871 + 661841 4753371 872 + 661841 4753401 871 + 661841 4753431 872 + 661841 4753461 872 + 661841 4753491 871 + 661841 4753521 869 + 661841 4753551 853 + 661841 4753581 817 + 661841 4753611 809 + 661841 4753641 809 + 661841 4753671 809 + 661841 4753701 809 + 661841 4753731 831 + 661841 4753761 849 + 661841 4753791 869 + 661841 4753821 877 + 661841 4753851 878 + 661841 4753881 879 + 661841 4753911 881 + 661841 4753941 882 + 661841 4753971 883 + 661841 4754001 884 + 661841 4754031 884 + 661841 4754061 901 + 661841 4754091 914 + 661841 4754121 947 + 661841 4754151 968 + 661841 4754181 968 + 661841 4754211 968 + 661841 4754241 968 + 661841 4754271 968 + 661841 4754301 968 + 661841 4754331 968 + 661841 4754361 968 + 661841 4754391 969 + 661841 4754421 968 + 661841 4754451 968 + 661841 4754481 968 + 661841 4754511 968 + 661841 4754541 968 + 661871 4751301 1021 + 661871 4751331 1021 + 661871 4751361 1021 + 661871 4751391 1022 + 661871 4751421 1022 + 661871 4751451 1022 + 661871 4751481 1022 + 661871 4751511 1022 + 661871 4751541 1023 + 661871 4751571 1023 + 661871 4751601 1024 + 661871 4751631 1025 + 661871 4751661 1025 + 661871 4751691 1027 + 661871 4751721 1025 + 661871 4751751 1022 + 661871 4751781 1012 + 661871 4751811 994 + 661871 4751841 984 + 661871 4751871 967 + 661871 4751901 952 + 661871 4751931 938 + 661871 4751961 924 + 661871 4751991 911 + 661871 4752021 902 + 661871 4752051 894 + 661871 4752081 888 + 661871 4752111 883 + 661871 4752141 879 + 661871 4752171 876 + 661871 4752201 874 + 661871 4752231 872 + 661871 4752261 869 + 661871 4752291 868 + 661871 4752321 866 + 661871 4752351 863 + 661871 4752381 862 + 661871 4752411 862 + 661871 4752441 847 + 661871 4752471 831 + 661871 4752501 822 + 661871 4752531 814 + 661871 4752561 812 + 661871 4752591 812 + 661871 4752621 817 + 661871 4752651 824 + 661871 4752681 833 + 661871 4752711 837 + 661871 4752741 841 + 661871 4752771 845 + 661871 4752801 853 + 661871 4752831 860 + 661871 4752861 861 + 661871 4752891 862 + 661871 4752921 862 + 661871 4752951 864 + 661871 4752981 866 + 661871 4753011 867 + 661871 4753041 869 + 661871 4753071 869 + 661871 4753101 869 + 661871 4753131 868 + 661871 4753161 868 + 661871 4753191 869 + 661871 4753221 869 + 661871 4753251 869 + 661871 4753281 870 + 661871 4753311 870 + 661871 4753341 872 + 661871 4753371 871 + 661871 4753401 871 + 661871 4753431 872 + 661871 4753461 873 + 661871 4753491 874 + 661871 4753521 865 + 661871 4753551 845 + 661871 4753581 818 + 661871 4753611 809 + 661871 4753641 809 + 661871 4753671 809 + 661871 4753701 817 + 661871 4753731 831 + 661871 4753761 849 + 661871 4753791 868 + 661871 4753821 877 + 661871 4753851 878 + 661871 4753881 879 + 661871 4753911 881 + 661871 4753941 882 + 661871 4753971 882 + 661871 4754001 883 + 661871 4754031 884 + 661871 4754061 902 + 661871 4754091 919 + 661871 4754121 948 + 661871 4754151 968 + 661871 4754181 968 + 661871 4754211 968 + 661871 4754241 967 + 661871 4754271 968 + 661871 4754301 968 + 661871 4754331 968 + 661871 4754361 967 + 661871 4754391 968 + 661871 4754421 968 + 661871 4754451 968 + 661871 4754481 969 + 661871 4754511 969 + 661871 4754541 969 + 661901 4751301 1021 + 661901 4751331 1021 + 661901 4751361 1022 + 661901 4751391 1022 + 661901 4751421 1022 + 661901 4751451 1022 + 661901 4751481 1022 + 661901 4751511 1023 + 661901 4751541 1023 + 661901 4751571 1024 + 661901 4751601 1024 + 661901 4751631 1025 + 661901 4751661 1025 + 661901 4751691 1026 + 661901 4751721 1026 + 661901 4751751 1023 + 661901 4751781 1016 + 661901 4751811 997 + 661901 4751841 985 + 661901 4751871 968 + 661901 4751901 951 + 661901 4751931 935 + 661901 4751961 921 + 661901 4751991 911 + 661901 4752021 904 + 661901 4752051 896 + 661901 4752081 889 + 661901 4752111 884 + 661901 4752141 880 + 661901 4752171 877 + 661901 4752201 874 + 661901 4752231 872 + 661901 4752261 869 + 661901 4752291 867 + 661901 4752321 865 + 661901 4752351 864 + 661901 4752381 863 + 661901 4752411 860 + 661901 4752441 843 + 661901 4752471 825 + 661901 4752501 816 + 661901 4752531 812 + 661901 4752561 814 + 661901 4752591 820 + 661901 4752621 828 + 661901 4752651 835 + 661901 4752681 841 + 661901 4752711 851 + 661901 4752741 858 + 661901 4752771 855 + 661901 4752801 857 + 661901 4752831 861 + 661901 4752861 862 + 661901 4752891 862 + 661901 4752921 863 + 661901 4752951 864 + 661901 4752981 866 + 661901 4753011 868 + 661901 4753041 869 + 661901 4753071 869 + 661901 4753101 869 + 661901 4753131 868 + 661901 4753161 868 + 661901 4753191 869 + 661901 4753221 869 + 661901 4753251 869 + 661901 4753281 870 + 661901 4753311 870 + 661901 4753341 871 + 661901 4753371 871 + 661901 4753401 872 + 661901 4753431 871 + 661901 4753461 871 + 661901 4753491 872 + 661901 4753521 859 + 661901 4753551 835 + 661901 4753581 817 + 661901 4753611 809 + 661901 4753641 809 + 661901 4753671 809 + 661901 4753701 819 + 661901 4753731 834 + 661901 4753761 851 + 661901 4753791 870 + 661901 4753821 877 + 661901 4753851 878 + 661901 4753881 879 + 661901 4753911 879 + 661901 4753941 881 + 661901 4753971 882 + 661901 4754001 883 + 661901 4754031 886 + 661901 4754061 904 + 661901 4754091 926 + 661901 4754121 952 + 661901 4754151 968 + 661901 4754181 968 + 661901 4754211 967 + 661901 4754241 967 + 661901 4754271 968 + 661901 4754301 967 + 661901 4754331 968 + 661901 4754361 967 + 661901 4754391 968 + 661901 4754421 968 + 661901 4754451 970 + 661901 4754481 969 + 661901 4754511 969 + 661901 4754541 969 + 661931 4751301 1021 + 661931 4751331 1022 + 661931 4751361 1022 + 661931 4751391 1022 + 661931 4751421 1022 + 661931 4751451 1022 + 661931 4751481 1023 + 661931 4751511 1023 + 661931 4751541 1023 + 661931 4751571 1024 + 661931 4751601 1024 + 661931 4751631 1025 + 661931 4751661 1025 + 661931 4751691 1026 + 661931 4751721 1025 + 661931 4751751 1025 + 661931 4751781 1021 + 661931 4751811 1005 + 661931 4751841 985 + 661931 4751871 966 + 661931 4751901 950 + 661931 4751931 933 + 661931 4751961 916 + 661931 4751991 906 + 661931 4752021 900 + 661931 4752051 893 + 661931 4752081 889 + 661931 4752111 884 + 661931 4752141 880 + 661931 4752171 877 + 661931 4752201 874 + 661931 4752231 871 + 661931 4752261 869 + 661931 4752291 867 + 661931 4752321 864 + 661931 4752351 862 + 661931 4752381 862 + 661931 4752411 852 + 661931 4752441 838 + 661931 4752471 823 + 661931 4752501 815 + 661931 4752531 812 + 661931 4752561 817 + 661931 4752591 828 + 661931 4752621 835 + 661931 4752651 843 + 661931 4752681 853 + 661931 4752711 861 + 661931 4752741 862 + 661931 4752771 862 + 661931 4752801 861 + 661931 4752831 861 + 661931 4752861 862 + 661931 4752891 863 + 661931 4752921 863 + 661931 4752951 865 + 661931 4752981 866 + 661931 4753011 868 + 661931 4753041 868 + 661931 4753071 869 + 661931 4753101 868 + 661931 4753131 868 + 661931 4753161 868 + 661931 4753191 869 + 661931 4753221 869 + 661931 4753251 869 + 661931 4753281 870 + 661931 4753311 870 + 661931 4753341 870 + 661931 4753371 872 + 661931 4753401 872 + 661931 4753431 872 + 661931 4753461 870 + 661931 4753491 869 + 661931 4753521 846 + 661931 4753551 824 + 661931 4753581 809 + 661931 4753611 809 + 661931 4753641 809 + 661931 4753671 811 + 661931 4753701 821 + 661931 4753731 837 + 661931 4753761 854 + 661931 4753791 871 + 661931 4753821 877 + 661931 4753851 878 + 661931 4753881 879 + 661931 4753911 880 + 661931 4753941 881 + 661931 4753971 882 + 661931 4754001 883 + 661931 4754031 889 + 661931 4754061 906 + 661931 4754091 931 + 661931 4754121 957 + 661931 4754151 968 + 661931 4754181 967 + 661931 4754211 967 + 661931 4754241 966 + 661931 4754271 966 + 661931 4754301 967 + 661931 4754331 967 + 661931 4754361 968 + 661931 4754391 969 + 661931 4754421 969 + 661931 4754451 969 + 661931 4754481 970 + 661931 4754511 970 + 661931 4754541 970 + 661961 4751301 1022 + 661961 4751331 1021 + 661961 4751361 1022 + 661961 4751391 1022 + 661961 4751421 1022 + 661961 4751451 1022 + 661961 4751481 1022 + 661961 4751511 1022 + 661961 4751541 1022 + 661961 4751571 1023 + 661961 4751601 1023 + 661961 4751631 1023 + 661961 4751661 1024 + 661961 4751691 1024 + 661961 4751721 1024 + 661961 4751751 1025 + 661961 4751781 1024 + 661961 4751811 1002 + 661961 4751841 986 + 661961 4751871 968 + 661961 4751901 953 + 661961 4751931 933 + 661961 4751961 916 + 661961 4751991 907 + 661961 4752021 900 + 661961 4752051 891 + 661961 4752081 887 + 661961 4752111 883 + 661961 4752141 880 + 661961 4752171 877 + 661961 4752201 874 + 661961 4752231 871 + 661961 4752261 869 + 661961 4752291 867 + 661961 4752321 863 + 661961 4752351 862 + 661961 4752381 857 + 661961 4752411 844 + 661961 4752441 831 + 661961 4752471 821 + 661961 4752501 814 + 661961 4752531 812 + 661961 4752561 820 + 661961 4752591 832 + 661961 4752621 841 + 661961 4752651 852 + 661961 4752681 861 + 661961 4752711 862 + 661961 4752741 862 + 661961 4752771 862 + 661961 4752801 862 + 661961 4752831 862 + 661961 4752861 862 + 661961 4752891 863 + 661961 4752921 864 + 661961 4752951 865 + 661961 4752981 866 + 661961 4753011 867 + 661961 4753041 868 + 661961 4753071 867 + 661961 4753101 867 + 661961 4753131 868 + 661961 4753161 868 + 661961 4753191 869 + 661961 4753221 869 + 661961 4753251 869 + 661961 4753281 870 + 661961 4753311 870 + 661961 4753341 870 + 661961 4753371 870 + 661961 4753401 872 + 661961 4753431 872 + 661961 4753461 873 + 661961 4753491 859 + 661961 4753521 830 + 661961 4753551 809 + 661961 4753581 809 + 661961 4753611 809 + 661961 4753641 809 + 661961 4753671 815 + 661961 4753701 830 + 661961 4753731 842 + 661961 4753761 860 + 661961 4753791 875 + 661961 4753821 877 + 661961 4753851 878 + 661961 4753881 879 + 661961 4753911 880 + 661961 4753941 881 + 661961 4753971 882 + 661961 4754001 883 + 661961 4754031 892 + 661961 4754061 909 + 661961 4754091 937 + 661961 4754121 963 + 661961 4754151 967 + 661961 4754181 965 + 661961 4754211 966 + 661961 4754241 966 + 661961 4754271 966 + 661961 4754301 967 + 661961 4754331 967 + 661961 4754361 967 + 661961 4754391 969 + 661961 4754421 969 + 661961 4754451 969 + 661961 4754481 969 + 661961 4754511 970 + 661961 4754541 970 + 661991 4751301 1022 + 661991 4751331 1023 + 661991 4751361 1023 + 661991 4751391 1022 + 661991 4751421 1022 + 661991 4751451 1022 + 661991 4751481 1022 + 661991 4751511 1023 + 661991 4751541 1023 + 661991 4751571 1023 + 661991 4751601 1023 + 661991 4751631 1023 + 661991 4751661 1023 + 661991 4751691 1023 + 661991 4751721 1023 + 661991 4751751 1024 + 661991 4751781 1024 + 661991 4751811 1003 + 661991 4751841 986 + 661991 4751871 969 + 661991 4751901 951 + 661991 4751931 932 + 661991 4751961 914 + 661991 4751991 907 + 661991 4752021 897 + 661991 4752051 890 + 661991 4752081 887 + 661991 4752111 884 + 661991 4752141 880 + 661991 4752171 877 + 661991 4752201 874 + 661991 4752231 871 + 661991 4752261 868 + 661991 4752291 866 + 661991 4752321 862 + 661991 4752351 861 + 661991 4752381 857 + 661991 4752411 840 + 661991 4752441 829 + 661991 4752471 821 + 661991 4752501 815 + 661991 4752531 814 + 661991 4752561 821 + 661991 4752591 834 + 661991 4752621 842 + 661991 4752651 856 + 661991 4752681 862 + 661991 4752711 862 + 661991 4752741 862 + 661991 4752771 862 + 661991 4752801 862 + 661991 4752831 862 + 661991 4752861 863 + 661991 4752891 863 + 661991 4752921 864 + 661991 4752951 865 + 661991 4752981 866 + 661991 4753011 867 + 661991 4753041 867 + 661991 4753071 867 + 661991 4753101 867 + 661991 4753131 868 + 661991 4753161 868 + 661991 4753191 869 + 661991 4753221 869 + 661991 4753251 869 + 661991 4753281 870 + 661991 4753311 870 + 661991 4753341 870 + 661991 4753371 870 + 661991 4753401 870 + 661991 4753431 872 + 661991 4753461 871 + 661991 4753491 854 + 661991 4753521 809 + 661991 4753551 809 + 661991 4753581 809 + 661991 4753611 809 + 661991 4753641 813 + 661991 4753671 829 + 661991 4753701 841 + 661991 4753731 856 + 661991 4753761 871 + 661991 4753791 877 + 661991 4753821 878 + 661991 4753851 878 + 661991 4753881 879 + 661991 4753911 880 + 661991 4753941 881 + 661991 4753971 882 + 661991 4754001 884 + 661991 4754031 896 + 661991 4754061 912 + 661991 4754091 941 + 661991 4754121 967 + 661991 4754151 963 + 661991 4754181 963 + 661991 4754211 964 + 661991 4754241 964 + 661991 4754271 965 + 661991 4754301 966 + 661991 4754331 967 + 661991 4754361 967 + 661991 4754391 968 + 661991 4754421 968 + 661991 4754451 968 + 661991 4754481 968 + 661991 4754511 968 + 661991 4754541 968 + 662021 4751301 1023 + 662021 4751331 1023 + 662021 4751361 1023 + 662021 4751391 1023 + 662021 4751421 1022 + 662021 4751451 1022 + 662021 4751481 1022 + 662021 4751511 1023 + 662021 4751541 1023 + 662021 4751571 1023 + 662021 4751601 1023 + 662021 4751631 1023 + 662021 4751661 1023 + 662021 4751691 1024 + 662021 4751721 1023 + 662021 4751751 1023 + 662021 4751781 1022 + 662021 4751811 1001 + 662021 4751841 983 + 662021 4751871 965 + 662021 4751901 946 + 662021 4751931 930 + 662021 4751961 913 + 662021 4751991 905 + 662021 4752021 897 + 662021 4752051 890 + 662021 4752081 886 + 662021 4752111 883 + 662021 4752141 880 + 662021 4752171 877 + 662021 4752201 874 + 662021 4752231 870 + 662021 4752261 868 + 662021 4752291 866 + 662021 4752321 863 + 662021 4752351 863 + 662021 4752381 861 + 662021 4752411 843 + 662021 4752441 826 + 662021 4752471 820 + 662021 4752501 816 + 662021 4752531 814 + 662021 4752561 821 + 662021 4752591 833 + 662021 4752621 841 + 662021 4752651 852 + 662021 4752681 862 + 662021 4752711 861 + 662021 4752741 862 + 662021 4752771 863 + 662021 4752801 863 + 662021 4752831 863 + 662021 4752861 863 + 662021 4752891 864 + 662021 4752921 864 + 662021 4752951 865 + 662021 4752981 866 + 662021 4753011 866 + 662021 4753041 866 + 662021 4753071 867 + 662021 4753101 867 + 662021 4753131 868 + 662021 4753161 868 + 662021 4753191 869 + 662021 4753221 869 + 662021 4753251 869 + 662021 4753281 870 + 662021 4753311 870 + 662021 4753341 870 + 662021 4753371 870 + 662021 4753401 870 + 662021 4753431 870 + 662021 4753461 869 + 662021 4753491 838 + 662021 4753521 809 + 662021 4753551 809 + 662021 4753581 809 + 662021 4753611 809 + 662021 4753641 824 + 662021 4753671 838 + 662021 4753701 859 + 662021 4753731 868 + 662021 4753761 877 + 662021 4753791 877 + 662021 4753821 878 + 662021 4753851 878 + 662021 4753881 879 + 662021 4753911 880 + 662021 4753941 881 + 662021 4753971 882 + 662021 4754001 884 + 662021 4754031 899 + 662021 4754061 916 + 662021 4754091 944 + 662021 4754121 954 + 662021 4754151 960 + 662021 4754181 962 + 662021 4754211 964 + 662021 4754241 965 + 662021 4754271 965 + 662021 4754301 966 + 662021 4754331 967 + 662021 4754361 967 + 662021 4754391 968 + 662021 4754421 968 + 662021 4754451 968 + 662021 4754481 969 + 662021 4754511 969 + 662021 4754541 969 + 662051 4751301 1023 + 662051 4751331 1023 + 662051 4751361 1023 + 662051 4751391 1023 + 662051 4751421 1023 + 662051 4751451 1023 + 662051 4751481 1022 + 662051 4751511 1023 + 662051 4751541 1023 + 662051 4751571 1023 + 662051 4751601 1023 + 662051 4751631 1023 + 662051 4751661 1023 + 662051 4751691 1023 + 662051 4751721 1024 + 662051 4751751 1024 + 662051 4751781 1019 + 662051 4751811 999 + 662051 4751841 984 + 662051 4751871 966 + 662051 4751901 948 + 662051 4751931 930 + 662051 4751961 914 + 662051 4751991 904 + 662051 4752021 898 + 662051 4752051 889 + 662051 4752081 884 + 662051 4752111 881 + 662051 4752141 878 + 662051 4752171 876 + 662051 4752201 873 + 662051 4752231 870 + 662051 4752261 868 + 662051 4752291 866 + 662051 4752321 865 + 662051 4752351 863 + 662051 4752381 862 + 662051 4752411 853 + 662051 4752441 834 + 662051 4752471 822 + 662051 4752501 816 + 662051 4752531 814 + 662051 4752561 820 + 662051 4752591 832 + 662051 4752621 841 + 662051 4752651 850 + 662051 4752681 860 + 662051 4752711 861 + 662051 4752741 862 + 662051 4752771 863 + 662051 4752801 863 + 662051 4752831 863 + 662051 4752861 864 + 662051 4752891 864 + 662051 4752921 865 + 662051 4752951 865 + 662051 4752981 866 + 662051 4753011 866 + 662051 4753041 866 + 662051 4753071 867 + 662051 4753101 868 + 662051 4753131 868 + 662051 4753161 869 + 662051 4753191 869 + 662051 4753221 869 + 662051 4753251 870 + 662051 4753281 870 + 662051 4753311 870 + 662051 4753341 870 + 662051 4753371 870 + 662051 4753401 870 + 662051 4753431 869 + 662051 4753461 867 + 662051 4753491 809 + 662051 4753521 809 + 662051 4753551 809 + 662051 4753581 809 + 662051 4753611 809 + 662051 4753641 828 + 662051 4753671 846 + 662051 4753701 868 + 662051 4753731 876 + 662051 4753761 877 + 662051 4753791 878 + 662051 4753821 878 + 662051 4753851 879 + 662051 4753881 880 + 662051 4753911 881 + 662051 4753941 882 + 662051 4753971 883 + 662051 4754001 887 + 662051 4754031 905 + 662051 4754061 922 + 662051 4754091 948 + 662051 4754121 955 + 662051 4754151 958 + 662051 4754181 961 + 662051 4754211 963 + 662051 4754241 965 + 662051 4754271 965 + 662051 4754301 966 + 662051 4754331 967 + 662051 4754361 967 + 662051 4754391 968 + 662051 4754421 968 + 662051 4754451 968 + 662051 4754481 969 + 662051 4754511 969 + 662051 4754541 969 + 662081 4751301 1023 + 662081 4751331 1023 + 662081 4751361 1024 + 662081 4751391 1023 + 662081 4751421 1023 + 662081 4751451 1024 + 662081 4751481 1024 + 662081 4751511 1024 + 662081 4751541 1025 + 662081 4751571 1024 + 662081 4751601 1024 + 662081 4751631 1024 + 662081 4751661 1025 + 662081 4751691 1025 + 662081 4751721 1026 + 662081 4751751 1026 + 662081 4751781 1020 + 662081 4751811 999 + 662081 4751841 983 + 662081 4751871 965 + 662081 4751901 946 + 662081 4751931 933 + 662081 4751961 914 + 662081 4751991 906 + 662081 4752021 897 + 662081 4752051 889 + 662081 4752081 884 + 662081 4752111 879 + 662081 4752141 876 + 662081 4752171 874 + 662081 4752201 872 + 662081 4752231 869 + 662081 4752261 867 + 662081 4752291 865 + 662081 4752321 862 + 662081 4752351 863 + 662081 4752381 862 + 662081 4752411 853 + 662081 4752441 836 + 662081 4752471 823 + 662081 4752501 816 + 662081 4752531 814 + 662081 4752561 821 + 662081 4752591 835 + 662081 4752621 847 + 662081 4752651 860 + 662081 4752681 861 + 662081 4752711 862 + 662081 4752741 862 + 662081 4752771 863 + 662081 4752801 863 + 662081 4752831 864 + 662081 4752861 864 + 662081 4752891 864 + 662081 4752921 865 + 662081 4752951 866 + 662081 4752981 866 + 662081 4753011 866 + 662081 4753041 867 + 662081 4753071 867 + 662081 4753101 868 + 662081 4753131 868 + 662081 4753161 869 + 662081 4753191 869 + 662081 4753221 869 + 662081 4753251 869 + 662081 4753281 870 + 662081 4753311 870 + 662081 4753341 871 + 662081 4753371 870 + 662081 4753401 870 + 662081 4753431 870 + 662081 4753461 866 + 662081 4753491 809 + 662081 4753521 809 + 662081 4753551 809 + 662081 4753581 809 + 662081 4753611 809 + 662081 4753641 830 + 662081 4753671 847 + 662081 4753701 866 + 662081 4753731 876 + 662081 4753761 877 + 662081 4753791 878 + 662081 4753821 878 + 662081 4753851 879 + 662081 4753881 880 + 662081 4753911 880 + 662081 4753941 882 + 662081 4753971 883 + 662081 4754001 894 + 662081 4754031 910 + 662081 4754061 927 + 662081 4754091 952 + 662081 4754121 967 + 662081 4754151 960 + 662081 4754181 962 + 662081 4754211 964 + 662081 4754241 965 + 662081 4754271 965 + 662081 4754301 967 + 662081 4754331 967 + 662081 4754361 968 + 662081 4754391 968 + 662081 4754421 969 + 662081 4754451 969 + 662081 4754481 969 + 662081 4754511 970 + 662081 4754541 970 + 662111 4751301 1022 + 662111 4751331 1023 + 662111 4751361 1023 + 662111 4751391 1023 + 662111 4751421 1024 + 662111 4751451 1024 + 662111 4751481 1023 + 662111 4751511 1024 + 662111 4751541 1024 + 662111 4751571 1025 + 662111 4751601 1024 + 662111 4751631 1025 + 662111 4751661 1025 + 662111 4751691 1025 + 662111 4751721 1026 + 662111 4751751 1026 + 662111 4751781 1020 + 662111 4751811 1000 + 662111 4751841 985 + 662111 4751871 967 + 662111 4751901 949 + 662111 4751931 933 + 662111 4751961 916 + 662111 4751991 908 + 662111 4752021 899 + 662111 4752051 890 + 662111 4752081 884 + 662111 4752111 880 + 662111 4752141 877 + 662111 4752171 874 + 662111 4752201 871 + 662111 4752231 868 + 662111 4752261 864 + 662111 4752291 861 + 662111 4752321 862 + 662111 4752351 862 + 662111 4752381 861 + 662111 4752411 847 + 662111 4752441 831 + 662111 4752471 821 + 662111 4752501 817 + 662111 4752531 817 + 662111 4752561 825 + 662111 4752591 838 + 662111 4752621 850 + 662111 4752651 861 + 662111 4752681 862 + 662111 4752711 862 + 662111 4752741 863 + 662111 4752771 863 + 662111 4752801 864 + 662111 4752831 864 + 662111 4752861 864 + 662111 4752891 865 + 662111 4752921 865 + 662111 4752951 866 + 662111 4752981 866 + 662111 4753011 866 + 662111 4753041 867 + 662111 4753071 867 + 662111 4753101 868 + 662111 4753131 868 + 662111 4753161 868 + 662111 4753191 869 + 662111 4753221 869 + 662111 4753251 869 + 662111 4753281 870 + 662111 4753311 870 + 662111 4753341 871 + 662111 4753371 871 + 662111 4753401 871 + 662111 4753431 870 + 662111 4753461 859 + 662111 4753491 809 + 662111 4753521 809 + 662111 4753551 809 + 662111 4753581 809 + 662111 4753611 809 + 662111 4753641 830 + 662111 4753671 848 + 662111 4753701 868 + 662111 4753731 877 + 662111 4753761 877 + 662111 4753791 878 + 662111 4753821 878 + 662111 4753851 877 + 662111 4753881 878 + 662111 4753911 880 + 662111 4753941 882 + 662111 4753971 886 + 662111 4754001 901 + 662111 4754031 919 + 662111 4754061 937 + 662111 4754091 959 + 662111 4754121 968 + 662111 4754151 967 + 662111 4754181 965 + 662111 4754211 964 + 662111 4754241 965 + 662111 4754271 965 + 662111 4754301 966 + 662111 4754331 967 + 662111 4754361 968 + 662111 4754391 969 + 662111 4754421 969 + 662111 4754451 969 + 662111 4754481 969 + 662111 4754511 970 + 662111 4754541 971 + 662141 4751301 1022 + 662141 4751331 1022 + 662141 4751361 1023 + 662141 4751391 1023 + 662141 4751421 1023 + 662141 4751451 1023 + 662141 4751481 1024 + 662141 4751511 1024 + 662141 4751541 1024 + 662141 4751571 1025 + 662141 4751601 1025 + 662141 4751631 1026 + 662141 4751661 1026 + 662141 4751691 1026 + 662141 4751721 1026 + 662141 4751751 1025 + 662141 4751781 1019 + 662141 4751811 1001 + 662141 4751841 986 + 662141 4751871 968 + 662141 4751901 951 + 662141 4751931 932 + 662141 4751961 917 + 662141 4751991 908 + 662141 4752021 897 + 662141 4752051 890 + 662141 4752081 885 + 662141 4752111 882 + 662141 4752141 877 + 662141 4752171 875 + 662141 4752201 872 + 662141 4752231 869 + 662141 4752261 865 + 662141 4752291 862 + 662141 4752321 860 + 662141 4752351 860 + 662141 4752381 854 + 662141 4752411 842 + 662141 4752441 826 + 662141 4752471 818 + 662141 4752501 817 + 662141 4752531 817 + 662141 4752561 834 + 662141 4752591 846 + 662141 4752621 857 + 662141 4752651 861 + 662141 4752681 862 + 662141 4752711 862 + 662141 4752741 863 + 662141 4752771 863 + 662141 4752801 864 + 662141 4752831 864 + 662141 4752861 865 + 662141 4752891 865 + 662141 4752921 865 + 662141 4752951 866 + 662141 4752981 866 + 662141 4753011 866 + 662141 4753041 867 + 662141 4753071 867 + 662141 4753101 867 + 662141 4753131 868 + 662141 4753161 868 + 662141 4753191 868 + 662141 4753221 869 + 662141 4753251 869 + 662141 4753281 870 + 662141 4753311 870 + 662141 4753341 871 + 662141 4753371 870 + 662141 4753401 871 + 662141 4753431 868 + 662141 4753461 846 + 662141 4753491 809 + 662141 4753521 809 + 662141 4753551 809 + 662141 4753581 809 + 662141 4753611 809 + 662141 4753641 831 + 662141 4753671 849 + 662141 4753701 865 + 662141 4753731 877 + 662141 4753761 877 + 662141 4753791 877 + 662141 4753821 876 + 662141 4753851 876 + 662141 4753881 877 + 662141 4753911 880 + 662141 4753941 883 + 662141 4753971 893 + 662141 4754001 905 + 662141 4754031 924 + 662141 4754061 944 + 662141 4754091 968 + 662141 4754121 968 + 662141 4754151 967 + 662141 4754181 967 + 662141 4754211 966 + 662141 4754241 966 + 662141 4754271 966 + 662141 4754301 967 + 662141 4754331 967 + 662141 4754361 968 + 662141 4754391 968 + 662141 4754421 969 + 662141 4754451 969 + 662141 4754481 970 + 662141 4754511 971 + 662141 4754541 970 + 662171 4751301 1021 + 662171 4751331 1022 + 662171 4751361 1022 + 662171 4751391 1023 + 662171 4751421 1023 + 662171 4751451 1023 + 662171 4751481 1023 + 662171 4751511 1023 + 662171 4751541 1024 + 662171 4751571 1025 + 662171 4751601 1024 + 662171 4751631 1025 + 662171 4751661 1026 + 662171 4751691 1025 + 662171 4751721 1024 + 662171 4751751 1023 + 662171 4751781 1015 + 662171 4751811 1001 + 662171 4751841 984 + 662171 4751871 966 + 662171 4751901 946 + 662171 4751931 930 + 662171 4751961 913 + 662171 4751991 904 + 662171 4752021 897 + 662171 4752051 892 + 662171 4752081 888 + 662171 4752111 884 + 662171 4752141 878 + 662171 4752171 876 + 662171 4752201 876 + 662171 4752231 871 + 662171 4752261 867 + 662171 4752291 864 + 662171 4752321 862 + 662171 4752351 863 + 662171 4752381 862 + 662171 4752411 846 + 662171 4752441 825 + 662171 4752471 818 + 662171 4752501 817 + 662171 4752531 826 + 662171 4752561 840 + 662171 4752591 854 + 662171 4752621 861 + 662171 4752651 862 + 662171 4752681 862 + 662171 4752711 863 + 662171 4752741 863 + 662171 4752771 863 + 662171 4752801 864 + 662171 4752831 864 + 662171 4752861 865 + 662171 4752891 865 + 662171 4752921 866 + 662171 4752951 866 + 662171 4752981 866 + 662171 4753011 866 + 662171 4753041 867 + 662171 4753071 867 + 662171 4753101 867 + 662171 4753131 868 + 662171 4753161 868 + 662171 4753191 869 + 662171 4753221 869 + 662171 4753251 869 + 662171 4753281 870 + 662171 4753311 870 + 662171 4753341 870 + 662171 4753371 871 + 662171 4753401 871 + 662171 4753431 861 + 662171 4753461 828 + 662171 4753491 809 + 662171 4753521 809 + 662171 4753551 809 + 662171 4753581 809 + 662171 4753611 819 + 662171 4753641 838 + 662171 4753671 854 + 662171 4753701 869 + 662171 4753731 877 + 662171 4753761 877 + 662171 4753791 877 + 662171 4753821 876 + 662171 4753851 876 + 662171 4753881 877 + 662171 4753911 881 + 662171 4753941 884 + 662171 4753971 898 + 662171 4754001 916 + 662171 4754031 931 + 662171 4754061 951 + 662171 4754091 968 + 662171 4754121 968 + 662171 4754151 968 + 662171 4754181 967 + 662171 4754211 968 + 662171 4754241 966 + 662171 4754271 967 + 662171 4754301 968 + 662171 4754331 967 + 662171 4754361 968 + 662171 4754391 968 + 662171 4754421 969 + 662171 4754451 970 + 662171 4754481 969 + 662171 4754511 971 + 662171 4754541 971 + 662201 4751301 1020 + 662201 4751331 1021 + 662201 4751361 1021 + 662201 4751391 1022 + 662201 4751421 1022 + 662201 4751451 1022 + 662201 4751481 1023 + 662201 4751511 1023 + 662201 4751541 1023 + 662201 4751571 1024 + 662201 4751601 1024 + 662201 4751631 1024 + 662201 4751661 1026 + 662201 4751691 1025 + 662201 4751721 1023 + 662201 4751751 1019 + 662201 4751781 1011 + 662201 4751811 999 + 662201 4751841 981 + 662201 4751871 963 + 662201 4751901 943 + 662201 4751931 928 + 662201 4751961 913 + 662201 4751991 901 + 662201 4752021 896 + 662201 4752051 893 + 662201 4752081 888 + 662201 4752111 884 + 662201 4752141 881 + 662201 4752171 880 + 662201 4752201 877 + 662201 4752231 873 + 662201 4752261 869 + 662201 4752291 867 + 662201 4752321 865 + 662201 4752351 863 + 662201 4752381 859 + 662201 4752411 841 + 662201 4752441 823 + 662201 4752471 818 + 662201 4752501 817 + 662201 4752531 828 + 662201 4752561 839 + 662201 4752591 848 + 662201 4752621 860 + 662201 4752651 862 + 662201 4752681 862 + 662201 4752711 863 + 662201 4752741 863 + 662201 4752771 863 + 662201 4752801 864 + 662201 4752831 865 + 662201 4752861 865 + 662201 4752891 866 + 662201 4752921 866 + 662201 4752951 866 + 662201 4752981 866 + 662201 4753011 867 + 662201 4753041 867 + 662201 4753071 867 + 662201 4753101 868 + 662201 4753131 868 + 662201 4753161 868 + 662201 4753191 869 + 662201 4753221 869 + 662201 4753251 869 + 662201 4753281 870 + 662201 4753311 871 + 662201 4753341 870 + 662201 4753371 870 + 662201 4753401 871 + 662201 4753431 855 + 662201 4753461 820 + 662201 4753491 809 + 662201 4753521 809 + 662201 4753551 809 + 662201 4753581 809 + 662201 4753611 828 + 662201 4753641 844 + 662201 4753671 862 + 662201 4753701 874 + 662201 4753731 877 + 662201 4753761 877 + 662201 4753791 876 + 662201 4753821 875 + 662201 4753851 876 + 662201 4753881 878 + 662201 4753911 881 + 662201 4753941 888 + 662201 4753971 903 + 662201 4754001 923 + 662201 4754031 939 + 662201 4754061 963 + 662201 4754091 968 + 662201 4754121 968 + 662201 4754151 969 + 662201 4754181 967 + 662201 4754211 968 + 662201 4754241 968 + 662201 4754271 967 + 662201 4754301 968 + 662201 4754331 969 + 662201 4754361 969 + 662201 4754391 969 + 662201 4754421 969 + 662201 4754451 969 + 662201 4754481 970 + 662201 4754511 970 + 662201 4754541 971 + 662231 4751301 1019 + 662231 4751331 1020 + 662231 4751361 1020 + 662231 4751391 1021 + 662231 4751421 1021 + 662231 4751451 1022 + 662231 4751481 1022 + 662231 4751511 1022 + 662231 4751541 1023 + 662231 4751571 1023 + 662231 4751601 1023 + 662231 4751631 1023 + 662231 4751661 1025 + 662231 4751691 1024 + 662231 4751721 1021 + 662231 4751751 1015 + 662231 4751781 1008 + 662231 4751811 994 + 662231 4751841 974 + 662231 4751871 958 + 662231 4751901 944 + 662231 4751931 924 + 662231 4751961 908 + 662231 4751991 899 + 662231 4752021 896 + 662231 4752051 892 + 662231 4752081 889 + 662231 4752111 886 + 662231 4752141 885 + 662231 4752171 883 + 662231 4752201 878 + 662231 4752231 874 + 662231 4752261 871 + 662231 4752291 868 + 662231 4752321 866 + 662231 4752351 862 + 662231 4752381 848 + 662231 4752411 832 + 662231 4752441 820 + 662231 4752471 817 + 662231 4752501 820 + 662231 4752531 829 + 662231 4752561 839 + 662231 4752591 848 + 662231 4752621 860 + 662231 4752651 862 + 662231 4752681 862 + 662231 4752711 863 + 662231 4752741 863 + 662231 4752771 864 + 662231 4752801 864 + 662231 4752831 865 + 662231 4752861 866 + 662231 4752891 867 + 662231 4752921 867 + 662231 4752951 866 + 662231 4752981 866 + 662231 4753011 867 + 662231 4753041 867 + 662231 4753071 868 + 662231 4753101 868 + 662231 4753131 868 + 662231 4753161 868 + 662231 4753191 869 + 662231 4753221 869 + 662231 4753251 869 + 662231 4753281 870 + 662231 4753311 870 + 662231 4753341 871 + 662231 4753371 870 + 662231 4753401 858 + 662231 4753431 831 + 662231 4753461 809 + 662231 4753491 809 + 662231 4753521 809 + 662231 4753551 809 + 662231 4753581 820 + 662231 4753611 838 + 662231 4753641 853 + 662231 4753671 869 + 662231 4753701 873 + 662231 4753731 876 + 662231 4753761 876 + 662231 4753791 876 + 662231 4753821 875 + 662231 4753851 876 + 662231 4753881 878 + 662231 4753911 882 + 662231 4753941 891 + 662231 4753971 909 + 662231 4754001 927 + 662231 4754031 950 + 662231 4754061 968 + 662231 4754091 968 + 662231 4754121 968 + 662231 4754151 969 + 662231 4754181 969 + 662231 4754211 968 + 662231 4754241 969 + 662231 4754271 969 + 662231 4754301 968 + 662231 4754331 968 + 662231 4754361 969 + 662231 4754391 970 + 662231 4754421 971 + 662231 4754451 970 + 662231 4754481 970 + 662231 4754511 970 + 662231 4754541 970 + 662261 4751301 1017 + 662261 4751331 1018 + 662261 4751361 1019 + 662261 4751391 1020 + 662261 4751421 1020 + 662261 4751451 1021 + 662261 4751481 1021 + 662261 4751511 1022 + 662261 4751541 1023 + 662261 4751571 1023 + 662261 4751601 1023 + 662261 4751631 1023 + 662261 4751661 1023 + 662261 4751691 1023 + 662261 4751721 1019 + 662261 4751751 1013 + 662261 4751781 1005 + 662261 4751811 991 + 662261 4751841 971 + 662261 4751871 952 + 662261 4751901 936 + 662261 4751931 923 + 662261 4751961 909 + 662261 4751991 900 + 662261 4752021 896 + 662261 4752051 893 + 662261 4752081 890 + 662261 4752111 888 + 662261 4752141 887 + 662261 4752171 885 + 662261 4752201 878 + 662261 4752231 874 + 662261 4752261 871 + 662261 4752291 868 + 662261 4752321 866 + 662261 4752351 861 + 662261 4752381 844 + 662261 4752411 829 + 662261 4752441 819 + 662261 4752471 817 + 662261 4752501 822 + 662261 4752531 832 + 662261 4752561 841 + 662261 4752591 849 + 662261 4752621 859 + 662261 4752651 862 + 662261 4752681 862 + 662261 4752711 863 + 662261 4752741 863 + 662261 4752771 864 + 662261 4752801 865 + 662261 4752831 866 + 662261 4752861 867 + 662261 4752891 867 + 662261 4752921 868 + 662261 4752951 867 + 662261 4752981 867 + 662261 4753011 867 + 662261 4753041 867 + 662261 4753071 868 + 662261 4753101 869 + 662261 4753131 869 + 662261 4753161 868 + 662261 4753191 869 + 662261 4753221 869 + 662261 4753251 869 + 662261 4753281 870 + 662261 4753311 870 + 662261 4753341 870 + 662261 4753371 861 + 662261 4753401 831 + 662261 4753431 814 + 662261 4753461 809 + 662261 4753491 809 + 662261 4753521 809 + 662261 4753551 809 + 662261 4753581 828 + 662261 4753611 846 + 662261 4753641 862 + 662261 4753671 870 + 662261 4753701 872 + 662261 4753731 875 + 662261 4753761 876 + 662261 4753791 875 + 662261 4753821 875 + 662261 4753851 876 + 662261 4753881 879 + 662261 4753911 883 + 662261 4753941 897 + 662261 4753971 915 + 662261 4754001 938 + 662261 4754031 964 + 662261 4754061 968 + 662261 4754091 968 + 662261 4754121 969 + 662261 4754151 969 + 662261 4754181 969 + 662261 4754211 968 + 662261 4754241 968 + 662261 4754271 970 + 662261 4754301 969 + 662261 4754331 969 + 662261 4754361 969 + 662261 4754391 970 + 662261 4754421 971 + 662261 4754451 972 + 662261 4754481 972 + 662261 4754511 971 + 662261 4754541 971 + 662291 4751301 1016 + 662291 4751331 1017 + 662291 4751361 1017 + 662291 4751391 1018 + 662291 4751421 1019 + 662291 4751451 1020 + 662291 4751481 1021 + 662291 4751511 1022 + 662291 4751541 1022 + 662291 4751571 1023 + 662291 4751601 1023 + 662291 4751631 1022 + 662291 4751661 1022 + 662291 4751691 1022 + 662291 4751721 1019 + 662291 4751751 1012 + 662291 4751781 1004 + 662291 4751811 991 + 662291 4751841 968 + 662291 4751871 947 + 662291 4751901 932 + 662291 4751931 914 + 662291 4751961 906 + 662291 4751991 898 + 662291 4752021 896 + 662291 4752051 894 + 662291 4752081 891 + 662291 4752111 889 + 662291 4752141 886 + 662291 4752171 884 + 662291 4752201 877 + 662291 4752231 874 + 662291 4752261 872 + 662291 4752291 869 + 662291 4752321 866 + 662291 4752351 862 + 662291 4752381 848 + 662291 4752411 834 + 662291 4752441 819 + 662291 4752471 817 + 662291 4752501 823 + 662291 4752531 832 + 662291 4752561 838 + 662291 4752591 848 + 662291 4752621 859 + 662291 4752651 861 + 662291 4752681 862 + 662291 4752711 863 + 662291 4752741 863 + 662291 4752771 864 + 662291 4752801 864 + 662291 4752831 866 + 662291 4752861 867 + 662291 4752891 868 + 662291 4752921 868 + 662291 4752951 869 + 662291 4752981 868 + 662291 4753011 867 + 662291 4753041 867 + 662291 4753071 868 + 662291 4753101 868 + 662291 4753131 869 + 662291 4753161 869 + 662291 4753191 869 + 662291 4753221 869 + 662291 4753251 869 + 662291 4753281 870 + 662291 4753311 870 + 662291 4753341 866 + 662291 4753371 840 + 662291 4753401 814 + 662291 4753431 809 + 662291 4753461 809 + 662291 4753491 809 + 662291 4753521 809 + 662291 4753551 822 + 662291 4753581 842 + 662291 4753611 856 + 662291 4753641 870 + 662291 4753671 874 + 662291 4753701 872 + 662291 4753731 875 + 662291 4753761 875 + 662291 4753791 874 + 662291 4753821 875 + 662291 4753851 876 + 662291 4753881 880 + 662291 4753911 887 + 662291 4753941 902 + 662291 4753971 922 + 662291 4754001 944 + 662291 4754031 968 + 662291 4754061 968 + 662291 4754091 969 + 662291 4754121 969 + 662291 4754151 969 + 662291 4754181 969 + 662291 4754211 970 + 662291 4754241 969 + 662291 4754271 970 + 662291 4754301 971 + 662291 4754331 971 + 662291 4754361 970 + 662291 4754391 970 + 662291 4754421 971 + 662291 4754451 972 + 662291 4754481 972 + 662291 4754511 972 + 662291 4754541 972 + 662321 4751301 1014 + 662321 4751331 1015 + 662321 4751361 1016 + 662321 4751391 1016 + 662321 4751421 1017 + 662321 4751451 1019 + 662321 4751481 1020 + 662321 4751511 1021 + 662321 4751541 1022 + 662321 4751571 1023 + 662321 4751601 1024 + 662321 4751631 1024 + 662321 4751661 1023 + 662321 4751691 1021 + 662321 4751721 1016 + 662321 4751751 1010 + 662321 4751781 1001 + 662321 4751811 982 + 662321 4751841 966 + 662321 4751871 945 + 662321 4751901 931 + 662321 4751931 915 + 662321 4751961 905 + 662321 4751991 898 + 662321 4752021 896 + 662321 4752051 894 + 662321 4752081 892 + 662321 4752111 889 + 662321 4752141 885 + 662321 4752171 883 + 662321 4752201 878 + 662321 4752231 875 + 662321 4752261 872 + 662321 4752291 870 + 662321 4752321 867 + 662321 4752351 863 + 662321 4752381 852 + 662321 4752411 839 + 662321 4752441 820 + 662321 4752471 817 + 662321 4752501 823 + 662321 4752531 830 + 662321 4752561 839 + 662321 4752591 849 + 662321 4752621 860 + 662321 4752651 862 + 662321 4752681 862 + 662321 4752711 863 + 662321 4752741 863 + 662321 4752771 864 + 662321 4752801 865 + 662321 4752831 866 + 662321 4752861 867 + 662321 4752891 868 + 662321 4752921 869 + 662321 4752951 869 + 662321 4752981 869 + 662321 4753011 868 + 662321 4753041 868 + 662321 4753071 868 + 662321 4753101 868 + 662321 4753131 868 + 662321 4753161 868 + 662321 4753191 869 + 662321 4753221 869 + 662321 4753251 870 + 662321 4753281 870 + 662321 4753311 870 + 662321 4753341 858 + 662321 4753371 820 + 662321 4753401 809 + 662321 4753431 809 + 662321 4753461 809 + 662321 4753491 809 + 662321 4753521 809 + 662321 4753551 838 + 662321 4753581 854 + 662321 4753611 868 + 662321 4753641 876 + 662321 4753671 876 + 662321 4753701 873 + 662321 4753731 873 + 662321 4753761 873 + 662321 4753791 874 + 662321 4753821 875 + 662321 4753851 878 + 662321 4753881 882 + 662321 4753911 893 + 662321 4753941 907 + 662321 4753971 926 + 662321 4754001 952 + 662321 4754031 968 + 662321 4754061 968 + 662321 4754091 969 + 662321 4754121 969 + 662321 4754151 969 + 662321 4754181 969 + 662321 4754211 970 + 662321 4754241 969 + 662321 4754271 970 + 662321 4754301 971 + 662321 4754331 971 + 662321 4754361 972 + 662321 4754391 971 + 662321 4754421 971 + 662321 4754451 972 + 662321 4754481 972 + 662321 4754511 972 + 662321 4754541 972 + 662351 4751301 1013 + 662351 4751331 1013 + 662351 4751361 1014 + 662351 4751391 1015 + 662351 4751421 1015 + 662351 4751451 1016 + 662351 4751481 1018 + 662351 4751511 1020 + 662351 4751541 1021 + 662351 4751571 1022 + 662351 4751601 1023 + 662351 4751631 1023 + 662351 4751661 1023 + 662351 4751691 1019 + 662351 4751721 1014 + 662351 4751751 1007 + 662351 4751781 995 + 662351 4751811 976 + 662351 4751841 963 + 662351 4751871 947 + 662351 4751901 928 + 662351 4751931 911 + 662351 4751961 902 + 662351 4751991 898 + 662351 4752021 896 + 662351 4752051 894 + 662351 4752081 892 + 662351 4752111 889 + 662351 4752141 885 + 662351 4752171 885 + 662351 4752201 881 + 662351 4752231 875 + 662351 4752261 873 + 662351 4752291 871 + 662351 4752321 867 + 662351 4752351 864 + 662351 4752381 853 + 662351 4752411 840 + 662351 4752441 823 + 662351 4752471 817 + 662351 4752501 823 + 662351 4752531 833 + 662351 4752561 839 + 662351 4752591 846 + 662351 4752621 857 + 662351 4752651 861 + 662351 4752681 862 + 662351 4752711 863 + 662351 4752741 864 + 662351 4752771 864 + 662351 4752801 865 + 662351 4752831 866 + 662351 4752861 867 + 662351 4752891 868 + 662351 4752921 868 + 662351 4752951 869 + 662351 4752981 869 + 662351 4753011 869 + 662351 4753041 868 + 662351 4753071 868 + 662351 4753101 868 + 662351 4753131 868 + 662351 4753161 868 + 662351 4753191 869 + 662351 4753221 869 + 662351 4753251 870 + 662351 4753281 870 + 662351 4753311 867 + 662351 4753341 839 + 662351 4753371 809 + 662351 4753401 809 + 662351 4753431 809 + 662351 4753461 809 + 662351 4753491 809 + 662351 4753521 835 + 662351 4753551 852 + 662351 4753581 866 + 662351 4753611 870 + 662351 4753641 873 + 662351 4753671 873 + 662351 4753701 871 + 662351 4753731 871 + 662351 4753761 873 + 662351 4753791 874 + 662351 4753821 876 + 662351 4753851 879 + 662351 4753881 886 + 662351 4753911 900 + 662351 4753941 915 + 662351 4753971 932 + 662351 4754001 964 + 662351 4754031 968 + 662351 4754061 968 + 662351 4754091 969 + 662351 4754121 969 + 662351 4754151 970 + 662351 4754181 970 + 662351 4754211 970 + 662351 4754241 970 + 662351 4754271 970 + 662351 4754301 972 + 662351 4754331 972 + 662351 4754361 972 + 662351 4754391 972 + 662351 4754421 972 + 662351 4754451 972 + 662351 4754481 973 + 662351 4754511 973 + 662351 4754541 973 + 662381 4751301 1011 + 662381 4751331 1012 + 662381 4751361 1012 + 662381 4751391 1013 + 662381 4751421 1013 + 662381 4751451 1014 + 662381 4751481 1016 + 662381 4751511 1018 + 662381 4751541 1020 + 662381 4751571 1021 + 662381 4751601 1022 + 662381 4751631 1022 + 662381 4751661 1022 + 662381 4751691 1018 + 662381 4751721 1013 + 662381 4751751 1006 + 662381 4751781 991 + 662381 4751811 974 + 662381 4751841 961 + 662381 4751871 944 + 662381 4751901 929 + 662381 4751931 912 + 662381 4751961 903 + 662381 4751991 898 + 662381 4752021 896 + 662381 4752051 893 + 662381 4752081 891 + 662381 4752111 889 + 662381 4752141 887 + 662381 4752171 886 + 662381 4752201 882 + 662381 4752231 876 + 662381 4752261 874 + 662381 4752291 871 + 662381 4752321 867 + 662381 4752351 865 + 662381 4752381 860 + 662381 4752411 845 + 662381 4752441 827 + 662381 4752471 817 + 662381 4752501 822 + 662381 4752531 835 + 662381 4752561 845 + 662381 4752591 848 + 662381 4752621 857 + 662381 4752651 861 + 662381 4752681 862 + 662381 4752711 862 + 662381 4752741 864 + 662381 4752771 865 + 662381 4752801 865 + 662381 4752831 866 + 662381 4752861 867 + 662381 4752891 868 + 662381 4752921 868 + 662381 4752951 869 + 662381 4752981 869 + 662381 4753011 869 + 662381 4753041 869 + 662381 4753071 869 + 662381 4753101 869 + 662381 4753131 869 + 662381 4753161 868 + 662381 4753191 869 + 662381 4753221 869 + 662381 4753251 869 + 662381 4753281 870 + 662381 4753311 860 + 662381 4753341 822 + 662381 4753371 809 + 662381 4753401 809 + 662381 4753431 809 + 662381 4753461 818 + 662381 4753491 831 + 662381 4753521 848 + 662381 4753551 865 + 662381 4753581 871 + 662381 4753611 871 + 662381 4753641 869 + 662381 4753671 869 + 662381 4753701 870 + 662381 4753731 870 + 662381 4753761 872 + 662381 4753791 874 + 662381 4753821 876 + 662381 4753851 882 + 662381 4753881 894 + 662381 4753911 909 + 662381 4753941 923 + 662381 4753971 936 + 662381 4754001 967 + 662381 4754031 968 + 662381 4754061 968 + 662381 4754091 969 + 662381 4754121 969 + 662381 4754151 970 + 662381 4754181 970 + 662381 4754211 971 + 662381 4754241 970 + 662381 4754271 970 + 662381 4754301 971 + 662381 4754331 972 + 662381 4754361 973 + 662381 4754391 973 + 662381 4754421 973 + 662381 4754451 973 + 662381 4754481 972 + 662381 4754511 973 + 662381 4754541 973 diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz new file mode 100644 index 0000000000000000000000000000000000000000..5262e4745c4c016ff8a807160f7a11ac10487e0c Binary files /dev/null and b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/constant/triSurface/AcrossRiver.stl.gz differ diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict new file mode 100644 index 0000000000000000000000000000000000000000..195bead7baea5d18eb7d18ceae29684416c71a65 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict @@ -0,0 +1,56 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object controlDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +application icoFoam; + +startFrom startTime; + +startTime 0; + +stopAt endTime; + +endTime 25; + +deltaT 1; + +writeControl timeStep; + +writeInterval 5; + +purgeWrite 0; + +writeFormat ascii; + +writePrecision 6; + +writeCompression uncompressed; + +timeFormat general; + +timePrecision 6; + +runTimeModifiable yes; + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict new file mode 100644 index 0000000000000000000000000000000000000000..441595307a666b321687565d5b91940861cc1178 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/decomposeParDict @@ -0,0 +1,72 @@ +/*-------------------------------*- C++ -*---------------------------------*\ +| ========= | +| \\ / OpenFOAM | +| \\ / | +| \\ / The Open Source CFD Toolbox | +| \\/ http://www.OpenFOAM.org | +\*-------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + note "mesh decomposition control dictionary"; + location "system"; + object decomposeParDict; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +numberOfSubdomains 2; + +// preservePatches (inlet); +// preserveFaceZones (heater solid1 solid3); + +// method simple; +method hierarchical; +// method metis; +// method manual; + +simpleCoeffs +{ + n (2 2 1); + delta 0.001; +} + +hierarchicalCoeffs +{ + n (2 1 1); + delta 0.001; + order xyz; +} + +metisCoeffs +{ + /* + processorWeights + ( + 1 + 1 + 1 + 1 + ); + */ +} + +manualCoeffs +{ + dataFile "decompositionData"; +} + + +//// Is the case distributed +//distributed yes; +//// Per slave (so nProcs-1 entries) the directory above the case. +//roots +//( +// "/tmp" +// "/tmp" +//); + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes new file mode 100644 index 0000000000000000000000000000000000000000..ebcd68557528c297120d8e5e1e9ee43f0b933650 --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSchemes @@ -0,0 +1,69 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object fvSchemes; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +ddtSchemes +{ + default Euler; +} + +gradSchemes +{ + default Gauss linear; + grad(p) Gauss linear; +} + +divSchemes +{ + default none; + div(phi,U) Gauss linear; +} + +laplacianSchemes +{ + default none; + laplacian(nu,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(diffusivity,cellDisplacement) Gauss linear corrected; + laplacian(diffusivity,cellMotionU) Gauss linear corrected; +} + +interpolationSchemes +{ + default linear; + interpolate(HbyA) linear; +} + +snGradSchemes +{ + default corrected; +} + +fluxRequired +{ + default no; + p; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution new file mode 100644 index 0000000000000000000000000000000000000000..9fff602af62a0a26a5ab6375eda77db671abcf3f --- /dev/null +++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/fvSolution @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.4 | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object fvSolution; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +solvers +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-06; + relTol 0; + }; + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0; + }; + cellDisplacement + { + solver GAMG; + tolerance 1e-8; + relTol 0; + smoother GaussSeidel; + cacheAgglomeration true; + nCellsInCoarsestLevel 10; + agglomerator faceAreaPair; + mergeLevels 1; + }; + cellMotionU + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0; + }; + cellMotionUz + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0; + }; +} + +//PISO +//{ +// nCorrectors 2; +// nNonOrthogonalCorrectors 2; +// pRefCell 0; +// pRefValue 0; +//} +// +//relaxationFactors +//{ +//} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/T b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/T new file mode 100644 index 0000000000000000000000000000000000000000..2f930360fd37896b527889abe6270f3643cca6e6 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/T @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object T; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 0 1 0 0 0]; + +internalField uniform 265; + +boundaryField +{ + ground + { + type fixedValue; + value uniform 265; + } + + igloo_region0 + { + type fixedValue; + value uniform 265; + } + + twoFridgeFreezers_seal_0 + { + type fixedValue; + value uniform 303; + } + + twoFridgeFreezers_herring_1 + { + type fixedValue; + value uniform 303; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/U b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/U new file mode 100644 index 0000000000000000000000000000000000000000..5d70f2a9c021a7c55ded01f6296f0113bb31029b --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/U @@ -0,0 +1,48 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volVectorField; + object U; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 1 -1 0 0 0 0]; + +internalField uniform (0 0 0); + +boundaryField +{ + ground + { + type fixedValue; + value uniform (0 0 0); + } + + igloo_region0 + { + type fixedValue; + value uniform (0 0 0); + } + + twoFridgeFreezers_seal_0 + { + type fixedValue; + value uniform (0 0 0); + } + + twoFridgeFreezers_herring_1 + { + type fixedValue; + value uniform (0 0 0); + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/alphat b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/alphat new file mode 100644 index 0000000000000000000000000000000000000000..acdcda178a7d947cf732c6668ddf055b5bc51d05 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/alphat @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type alphatWallFunction; + value uniform 0; + } + + igloo_region0 + { + type alphatWallFunction; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type alphatWallFunction; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/epsilon b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/epsilon new file mode 100644 index 0000000000000000000000000000000000000000..0fa9bf60f265f63d0b0c957fc39f70ec920c8323 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/epsilon @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object epsilon; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -3 0 0 0 0]; + +internalField uniform 0.01; + +boundaryField +{ + ground + { + type epsilonWallFunction; + value uniform 0.01; + } + + igloo_region0 + { + type epsilonWallFunction; + value uniform 0.01; + } + + twoFridgeFreezers_seal_0 + { + type epsilonWallFunction; + value uniform 0.01; + } + + twoFridgeFreezers_herring_1 + { + type epsilonWallFunction; + value uniform 0.01; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/k b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/k new file mode 100644 index 0000000000000000000000000000000000000000..bd0cf46f0db295c3f0170202b33472417c20bca3 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/k @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object k; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0.1; + +boundaryField +{ + ground + { + type kQRWallFunction; + value uniform 0.1; + } + + igloo_region0 + { + type kQRWallFunction; + value uniform 0.1; + } + + twoFridgeFreezers_seal_0 + { + type kQRWallFunction; + value uniform 0.1; + } + + twoFridgeFreezers_herring_1 + { + type kQRWallFunction; + value uniform 0.1; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/nut b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/nut new file mode 100644 index 0000000000000000000000000000000000000000..e9e5f16e555dccc27b4fd7c11b0b4877afc1bb4f --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/nut @@ -0,0 +1,50 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type nutWallFunction; + value uniform 0; + } + + igloo_region0 + { + type nutWallFunction; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type nutWallFunction; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type nutWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/p b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/p new file mode 100644 index 0000000000000000000000000000000000000000..2b90b18e74e8b30535be502ed783da524727c7df --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/0/p @@ -0,0 +1,52 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: http://www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + object p; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -2 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + ground + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + igloo_region0 + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + twoFridgeFreezers_seal_0 + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } + + twoFridgeFreezers_herring_1 + { + type fixedFluxBuoyantPressure; + rho rhok; + value uniform 0; + } +} + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/Allrun b/tutorials/mesh/snappyHexMesh/iglooWithFridges/Allrun new file mode 100755 index 0000000000000000000000000000000000000000..79dc3f4b95e1f1dff9646fd6dd1ba9fa3bbae4ac --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/Allrun @@ -0,0 +1,9 @@ +#!/bin/sh +# Source tutorial run functions +. $WM_PROJECT_DIR/bin/tools/RunFunctions + +runApplication blockMesh +runApplication snappyHexMesh -overwrite +runApplication setFields +runApplication buoyantBoussinesqSimpleFoam + diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/RASProperties b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/RASProperties new file mode 100644 index 0000000000000000000000000000000000000000..35b5a409f230c180f07469bfe0679cdf00cb419d --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/RASProperties @@ -0,0 +1,100 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RASModel kEpsilon; + +turbulence on; + +printCoeffs on; + +laminarCoeffs +{ +} + +kEpsilonCoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0.85; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +RNGkEpsilonCoeffs +{ + Cmu 0.0845; + C1 1.42; + C2 1.68; + C3 -0.33; + alphah 1; + alphak 1.39; + alphaEps 1.39; + eta0 4.38; + beta 0.012; +} + +LaunderSharmaKECoeffs +{ + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 -0.33; + alphah 1; + alphak 1; + alphaEps 0.76923; +} + +LRRCoeffs +{ + Cmu 0.09; + Clrr1 1.8; + Clrr2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +LaunderGibsonRSTMCoeffs +{ + Cmu 0.09; + Clg1 1.8; + Clg2 0.6; + C1 1.44; + C2 1.92; + alphah 1; + C1Ref 0.5; + C2Ref 0.3; + Cs 0.25; + Ceps 0.15; + alphaR 1; + alphaEps 0.76923; +} + +wallFunctionCoeffs +{ + kappa 0.4187; + E 9; +} + + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/environmentalProperties b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/environmentalProperties new file mode 100644 index 0000000000000000000000000000000000000000..8ecb2a440203a35f242328826e7484e672012712 --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/environmentalProperties @@ -0,0 +1,20 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object environmentalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +g g [0 1 -2 0 0 0 0] (0 0 -9.81); + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict index d97dbb8e268c425f32326827a59e880e05e07eda..39d94d804fadab1df4f1ac72260fbd477d5f9204 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/polyMesh/blockMeshDict @@ -40,27 +40,32 @@ edges patches ( - patch maxY + empty maxY ( (3 7 6 2) ) - patch minX + + empty minX ( (0 4 7 3) ) - patch maxX + + empty maxX ( (2 6 5 1) ) - patch minY + + empty minY ( (1 5 4 0) ) - patch minZ + + wall ground ( (0 3 2 1) ) - patch maxZ + + empty maxZ ( (4 5 6 7) ) diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/transportProperties b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/transportProperties new file mode 100644 index 0000000000000000000000000000000000000000..f48fda19ccac705f76f1573b7ba40cce45abfd5b --- /dev/null +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/constant/transportProperties @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 1.5.x | +| \\ / A nd | Web: http://www.openfoam.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ + +FoamFile +{ + version 2.0; + format ascii; + + root ""; + case ""; + instance ""; + local ""; + + class dictionary; + object transportProperties; +} + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +transportModel Newtonian; + +// Laminar viscosity +nu nu [0 2 -1 0 0 0 0] 1e-05; + +// Thermal expansion coefficient +beta beta [0 0 0 -1 0 0 0] 3e-03; + +// Reference temperature +TRef TRef [0 0 0 1 0 0 0] 300; + +// Laminar Prandtl number +Pr Pr [0 0 0 0 0 0 0] 0.9; + +// Turbulent Prandtl number +Prt Prt [0 0 0 0 0 0 0] 0.7; + +// ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict index ef80311ee11931792c1d637b6d45c5a9b75c24de..46e7cd00c334efd3d10a44f4e932cef57ccff22d 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/controlDict @@ -15,25 +15,25 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -startFrom latestTime; +startFrom startTime; startTime 0; stopAt endTime; -endTime 100; +endTime 1000; deltaT 1; writeControl timeStep; -writeInterval 1; +writeInterval 100; purgeWrite 0; writeFormat ascii; -writePrecision 7; +writePrecision 6; writeCompression uncompressed; diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes index 2fa85964b7e2113902ff5be6f03334f6777d84b6..b54bb8631600a594830b214816d8a858bcf83a02 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSchemes @@ -17,33 +17,40 @@ FoamFile ddtSchemes { - default Euler; + default steadyState; } gradSchemes { default Gauss linear; - grad(p) Gauss linear; } divSchemes { default none; - div(phi,U) Gauss linear; + div(phi,U) Gauss upwind; + div(phi,T) Gauss upwind; + div(phi,k) Gauss upwind; + div(phi,epsilon) Gauss upwind; + div(phi,R) Gauss upwind; + div(R) Gauss linear; + div((nuEff*dev(grad(U).T()))) Gauss linear; } laplacianSchemes { default none; - laplacian(nu,U) Gauss linear corrected; - laplacian(1|A(U),p) Gauss linear corrected; - laplacian(diffusivity,cellMotionU) Gauss linear uncorrected; + laplacian(nuEff,U) Gauss linear corrected; + laplacian((1|A(U)),p) Gauss linear corrected; + laplacian(kappaEff,T) Gauss linear corrected; + laplacian(DkEff,k) Gauss linear corrected; + laplacian(DepsilonEff,epsilon) Gauss linear corrected; + laplacian(DREff,R) Gauss linear corrected; } interpolationSchemes { default linear; - interpolate(HbyA) linear; } snGradSchemes diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution index 876c8c233f9dece81ca38c9186f66b783bae4ec9..c2053ee47d6e6890ba5dc9b2e9041cdd7eb269d5 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/fvSolution @@ -16,15 +16,73 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // solvers -{} +{ + p + { + solver PCG; + preconditioner DIC; + tolerance 1e-08; + relTol 0.01; + } + + U + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + T + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + k + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } + + epsilon + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } -PISO + R + { + solver PBiCG; + preconditioner DILU; + tolerance 1e-05; + relTol 0.1; + } +} + +SIMPLE { - nCorrectors 2; nNonOrthogonalCorrectors 0; pRefCell 0; pRefValue 0; } +relaxationFactors +{ + rho 1; + p 0.3; + U 0.7; + T 0.7; + k 0.7; + epsilon 0.7; + R 0.7; +} + // ************************************************************************* // diff --git a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict index 30da45333116a695a3d463d85d30aa98babc1b38..d31010ace7ef8ced9166f5e0bd4e2ec0ad4c347c 100644 --- a/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict +++ b/tutorials/mesh/snappyHexMesh/iglooWithFridges/system/snappyHexMeshDict @@ -42,12 +42,13 @@ geometry min (0 0 0); max (1 1 1); } + fridgeFreezer { type searchableSurfaceCollection; mergeSubRegions true; - + freezer { surface box1; @@ -73,16 +74,17 @@ geometry } } } + twoFridgeFreezers { type searchableSurfaceCollection; - + mergeSubRegions true; - + seal { - surface fridgeFreezer; - scale (1.0 1.0 1.0); + surface box1; + scale (1.0 1.0 2.1); transform { type cartesian; @@ -93,8 +95,8 @@ geometry } herring { - surface fridgeFreezer; - scale (1.0 1.0 1.0); + surface box1; + scale (1.0 1.0 2.1); transform { type cartesian; diff --git a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines b/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines deleted file mode 100644 index 4b24efafd5ca1ad451a6018d16f638079b1a4f8b..0000000000000000000000000000000000000000 --- a/tutorials/multiphase/compressibleInterFoam/les/depthCharge3D/system/machines +++ /dev/null @@ -1 +0,0 @@ -noisy diff --git a/tutorials/multiphase/interFoam/ras/Allclean b/tutorials/multiphase/interFoam/ras/Allclean index 62275784712aebe76b90f3356879dce098912e1e..6ad97e1a0bd7ffd8f0073bb9a1f9f9d3391d7c6b 100755 --- a/tutorials/multiphase/interFoam/ras/Allclean +++ b/tutorials/multiphase/interFoam/ras/Allclean @@ -12,7 +12,7 @@ do if [ "$case" = "damBreak" ] then - cp $case/0/gamma.org $case/0/gamma + cp $case/0/alpha1.org $case/0/alpha1 fi done