diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H index 8a83efdd86bb743fb2835f4ae5c3a30c9e166c89..c6096d743d93a414c979823037c4753428691860 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/pEqn.H @@ -7,7 +7,7 @@ volScalarField rAU(1.0/UEqn().A()); volScalarField rAtU(1.0/(1.0/rAU - UEqn().H1())); volVectorField HbyA("HbyA", U); -HbyA = rAU*(UEqn() == fvOptions(rho, U))().H(); +HbyA = rAU*UEqn().H(); if (pimple.nCorrPIMPLE() <= 1) { diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H index 9398c3e8d03d7a74826a6712ece620f5f6851dcf..b4c7207138d34b2138a329176444e1ee7b7f2711 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/UEqn.H @@ -4,12 +4,12 @@ ( fvm::div(phi, U) + turbulence->divDevRhoReff(U) + == + fvOptions(rho, U) ); UEqn().relax(); - mrfZones.addCoriolis(rho, UEqn()); - // Include the porous media resistance and solve the momentum equation // either implicit in the tensorial resistance or transport using by // including the spherical part of the resistance in the momentum diagonal @@ -30,7 +30,7 @@ for (int UCorr=0; UCorr<nUCorr; UCorr++) { - U = trTU() & ((UEqn() == fvOptions(rho, U))().H() - gradp); + U = trTU() & (UEqn().H() - gradp); } U.correctBoundaryConditions(); @@ -42,7 +42,7 @@ fvOptions.constrain(UEqn()); - solve(UEqn() == -fvc::grad(p) + fvOptions(rho, U)); + solve(UEqn() == -fvc::grad(p)); fvOptions.correct(U); diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H index 614460f82bbc395c3f6022118604ae0adbefd590..fe3d1186087af2b57fcfaa1268b5c5c00676c115 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/createZones.H @@ -1,6 +1,3 @@ - IOMRFZoneList mrfZones(mesh); - mrfZones.correctBoundaryVelocity(U); - IOporosityModelList pZones(mesh); Switch pressureImplicitPorosity(false); diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H index dd9723b9db1c6d94c9c07e6032c677a22a232325..57ce92a0cdd932ab6fb3d6228157b80243790b11 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/pEqn.H @@ -10,11 +10,11 @@ if (pressureImplicitPorosity) { - HbyA = trTU() & (UEqn() == fvOptions(rho, U))().H(); + HbyA = trTU() & UEqn().H(); } else { - HbyA = trAU()*(UEqn() == fvOptions(rho, U))().H(); + HbyA = trAU()*UEqn().H(); } UEqn.clear(); @@ -27,7 +27,7 @@ fvc::interpolate(rho*HbyA) & mesh.Sf() ); - mrfZones.relativeFlux(fvc::interpolate(rho), phiHbyA); + fvOptions.relativeFlux(fvc::interpolate(rho), phiHbyA); closedVolume = adjustPhi(phiHbyA, U, p); diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C index 628c1cabe4b6d917114a66326e0277d2a190fa5a..fd30404ae6b3c7dbffcb1e9b73c58de8f312faf6 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C @@ -27,14 +27,13 @@ Application Description Steady-state solver for turbulent flow of compressible fluids with RANS turbulence modelling, implicit or explicit porosity treatment - and MRF for HVAC and similar applications. + and run-time selectable finite volume sources. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" #include "rhoThermo.H" #include "RASModel.H" -#include "IOMRFZoneList.H" #include "fvIOoptionList.H" #include "IOporosityModelList.H" #include "simpleControl.H" diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H index 3ff183f5671992fae3d18ca257e10e6a593d65a6..4ea15b94465647bd2faa4b3dfb39f62ba9c2f5bb 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/pEqn.H @@ -7,7 +7,7 @@ volScalarField rAU(1.0/UEqn().A()); volScalarField rAtU(1.0/(1.0/rAU - UEqn().H1())); volVectorField HbyA("HbyA", U); -HbyA = rAU*(UEqn() == fvOptions(rho, U))().H(); +HbyA = rAU*UEqn().H(); UEqn.clear(); diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options index cadaf0850daaa9242d22a22b7b5276a6f9751f6e..365e64d1b131efbad40267c5bfa19437e3a3c3a6 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options @@ -4,11 +4,13 @@ EXE_INC = \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ -lincompressibleTurbulenceModel \ -lincompressibleRASModels \ - -lincompressibleTransportModels + -lincompressibleTransportModels \ + -lradiationModels diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/TEqn.H b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/TEqn.H index dbfc61739f7d21e2d095ae55181831345fc05a75..708d968d6c6df30a9521a9c5e1c3a70471155fb4 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/TEqn.H +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/TEqn.H @@ -9,10 +9,14 @@ fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(kappaEff, T) + == + radiation->ST(rhoCpRef, T) ); TEqn.relax(); TEqn.solve(); + radiation->correct(); + rhok = 1.0 - beta*(T - TRef); } diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C index 126e10b3376db7ed71df101e5bb395241434ada8..65dda0653e0917f509c141bb2ca45938d046a508 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C @@ -49,6 +49,7 @@ Description #include "singlePhaseTransportModel.H" #include "RASModel.H" #include "pimpleControl.H" +#include "radiationModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -59,6 +60,7 @@ int main(int argc, char *argv[]) #include "createMesh.H" #include "readGravitationalAcceleration.H" #include "createFields.H" + #include "createIncompressibleRadiationModel.H" #include "initContinuityErrs.H" #include "readTimeControls.H" #include "CourantNo.H" diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H b/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H index ee2a95f2082b2a298e2ac4a53ae7d307191f1e2d..b6cf96b5b0d368cd9ba5d2882587afaf6fb78e05 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/EEqn.H @@ -17,7 +17,8 @@ ) - fvm::laplacian(turbulence->alphaEff(), he) == - fvOptions(rho, he) + radiation->Sh(thermo) + + fvOptions(rho, he) ); EEqn.relax(); @@ -29,4 +30,5 @@ fvOptions.correct(he); thermo.correct(); + radiation->correct(); } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index 48b28a07e491f777ee2c718757f28dd3e4d28107..5297be327f2d6fe69f8725f0987f51a1b4c0f4aa 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -40,13 +40,14 @@ Description #include "rhoThermo.H" #include "turbulenceModel.H" #include "fixedGradientFvPatchFields.H" +#include "zeroGradientFvPatchFields.H" #include "regionProperties.H" #include "compressibleCourantNo.H" #include "solidRegionDiffNo.H" #include "solidThermo.H" #include "radiationModel.H" #include "fvIOoptionList.H" - +#include "coordinateSystem.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index d076652a1dd2b9759add875df934b731a11b3145..a3615c4309ad487272c631ce96d2c81a9834e0f8 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -37,6 +37,7 @@ Description #include "solidThermo.H" #include "radiationModel.H" #include "fvIOoptionList.H" +#include "coordinateSystem.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H index 7573002af52e47423c72abede50f870fa812cdcf..93f7146730fb5180b92f1396fa4bf12698d052e3 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/solid/solveSolid.H @@ -3,7 +3,9 @@ { fvScalarMatrix hEqn ( - - fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)") + thermo.isotropic() + ? -fvm::laplacian(betav*thermo.alpha(), h, "laplacian(alpha,h)") + : -fvm::laplacian(betav*tAnialpha(), h, "laplacian(alpha,h)") + fvOptions(rho, h) ); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H index df3915980b546d54504a774b894929a170db062d..703ed6e4c2cde1456c96ebda5b01920793298c81 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/createSolidFields.H @@ -1,4 +1,5 @@ // Initialise solid field pointer lists + PtrList<coordinateSystem> coordinates(solidRegions.size()); PtrList<solidThermo> thermos(solidRegions.size()); PtrList<radiation::radiationModel> radiations(solidRegions.size()); PtrList<fv::IOoptionList> solidHeatSources(solidRegions.size()); @@ -23,6 +24,16 @@ new fv::IOoptionList(solidRegions[i]) ); + if (!thermos[i].isotropic()) + { + Info<< " Adding coordinateSystems\n" << endl; + coordinates.set + ( + i, + coordinateSystem::New(solidRegions[i], thermos[i]) + ); + } + IOobject betavSolidIO ( "betavSolid", diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H index ad8894a631552af47a127e7fbcaabc62b36f588a..a36fa7e98fcb163da272d8defcd3206033b79e9a 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H @@ -8,10 +8,36 @@ tmp<volScalarField> tcp = thermo.Cp(); const volScalarField& cp = tcp(); - tmp<volScalarField> talpha = thermo.alpha(); - const volScalarField& alpha = talpha(); - tmp<volScalarField> tkappa = thermo.kappa(); - const volScalarField& kappa = tkappa(); + tmp<volSymmTensorField> tAnialpha; + + if (!thermo.isotropic()) + { + tmp<volVectorField> tkappaCp = thermo.Kappa()/cp; + + const coordinateSystem& coodSys = coordinates[i]; + tAnialpha = + tmp<volSymmTensorField> + ( + new volSymmTensorField + ( + IOobject + ( + "Anialpha", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh, + tkappaCp().dimensions(), + zeroGradientFvPatchVectorField::typeName + ) + ); + + volSymmTensorField& Anialpha = tAnialpha(); + Anialpha.internalField() = coodSys.R().transformVector(tkappaCp()); + Anialpha.correctBoundaryConditions(); + } volScalarField& h = thermo.he(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C index 437ea78327462d81682bd59c630399111835002f..9ec57f2f92fad8c27b2bbec760753fc0788bdcfe 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -56,38 +56,4 @@ Foam::scalar Foam::solidRegionDiffNo return DiNum; } - -Foam::scalar Foam::solidRegionDiffNo -( - const fvMesh& mesh, - const Time& runTime, - const volScalarField& Cprho, - const volSymmTensorField& kappadirectional -) -{ - scalar DiNum = 0.0; - scalar meanDiNum = 0.0; - - volScalarField kappa(mag(kappadirectional)); - - //- Take care: can have fluid domains with 0 cells so do not test for - // zero internal faces. - surfaceScalarField kapparhoCpbyDelta - ( - mesh.surfaceInterpolation::deltaCoeffs() - * fvc::interpolate(kappa) - / fvc::interpolate(Cprho) - ); - - DiNum = gMax(kapparhoCpbyDelta.internalField())*runTime.deltaT().value(); - - meanDiNum = (average(kapparhoCpbyDelta)).value()*runTime.deltaT().value(); - - Info<< "Region: " << mesh.name() << " Diffusion Number mean: " << meanDiNum - << " max: " << DiNum << endl; - - return DiNum; -} - - // ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H index cb4dd30b6a3801b7674abfe4a17c27e516a819e6..77eda7c843551345d460e98f5d371b3972df5217 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffNo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,15 +41,6 @@ namespace Foam const volScalarField& Cprho, const volScalarField& kappa ); - - scalar solidRegionDiffNo - ( - const fvMesh& mesh, - const Time& runTime, - const volScalarField& Cprho, - const volSymmTensorField& kappa - ); - } #endif diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H index 878780baf1df939beceb7efde5ff738d5da93d84..a7a65b17bd4c9863a23d0749d64e3cbcb5af5348 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solidRegionDiffusionNo.H @@ -1,18 +1,29 @@ - scalar DiNum = -GREAT; +scalar DiNum = -GREAT; - forAll(solidRegions, i) +forAll(solidRegions, i) +{ + #include "setRegionSolidFields.H" + + tmp<volScalarField> magKappa; + if (thermo.isotropic()) + { + magKappa = thermo.kappa(); + } + else { - #include "setRegionSolidFields.H" + magKappa = mag(thermo.Kappa()); + } - DiNum = max + DiNum = max + ( + solidRegionDiffNo ( - solidRegionDiffNo - ( - solidRegions[i], - runTime, - rho*cp, - kappa - ), - DiNum - ); - } + solidRegions[i], + runTime, + rho*cp, + magKappa() + ), + DiNum + ); + +} diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H index 86f23292e37445c2cddc27fe4c651290e4cd9e1d..7bf7562d9b6736cff2e9c81cffdfe71a8b89f570 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/solveSolid.H @@ -9,7 +9,11 @@ if (finalIter) tmp<fvScalarMatrix> hEqn ( fvm::ddt(betav*rho, h) - - fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)") + - ( + thermo.isotropic() + ? fvm::laplacian(betav*thermo.alpha(), h, "laplacian(alpha,h)") + : fvm::laplacian(betav*tAnialpha(), h, "laplacian(alpha,h)") + ) == fvOptions(rho, h) ); diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/UrelEqn.H b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/UrelEqn.H index 6750d98f36053a91c04c557fcb136a1e5ac9ed4c..5aa6cef0b147a6126a32a94c420f4bceb88d9ccd 100644 --- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/UrelEqn.H +++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/UrelEqn.H @@ -5,12 +5,14 @@ + fvm::div(phi, Urel) + turbulence->divDevReff(Urel) + SRF->Su() + == + fvOptions(Urel) ); UrelEqn().relax(); fvOptions.constrain(UrelEqn()); - solve(UrelEqn() == -fvc::grad(p) + fvOptions(Urel)); + solve(UrelEqn() == -fvc::grad(p)); fvOptions.correct(Urel); diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/pEqn.H b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/pEqn.H index 9b5b1a89a4d43e94cbb70961099eb00a2f98eab5..8aa20cd151820ef2aac265387efacce7cac58798 100644 --- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/pEqn.H +++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/pEqn.H @@ -1,6 +1,6 @@ volScalarField rAUrel(1.0/UrelEqn().A()); volVectorField HbyA("HbyA", Urel); -HbyA = rAUrel*(UrelEqn() == fvOptions(Urel))().H(); +HbyA = rAUrel*UrelEqn().H(); if (pimple.nCorrPISO() <= 1) { diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/UEqn.H b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/UEqn.H index 7a7d604b4845a1de98438c770c5c880626e0a103..430e60c8482ea288a734f51f5a35dcf434dde0bf 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/UEqn.H +++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/UEqn.H @@ -5,6 +5,8 @@ tmp<fvVectorMatrix> UEqn fvm::ddt(U) + fvm::div(phi, U) + turbulence->divDevReff(U) + == + fvOptions(U) ); UEqn().relax(); diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pEqn.H b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pEqn.H index 217304168b44ff7732acab44781c0186166d9ace..4c48bb2a183583040188c1e320cddd1e0fba1878 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pEqn.H +++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pEqn.H @@ -1,5 +1,5 @@ volVectorField HbyA("HbyA", U); -HbyA = rAU*(UEqn() == fvOptions(U))().H(); +HbyA = rAU*UEqn().H(); if (pimple.nCorrPISO() <= 1) { diff --git a/applications/solvers/incompressible/potentialFreeSurfaceFoam/UEqn.H b/applications/solvers/incompressible/potentialFreeSurfaceFoam/UEqn.H index 4c84e256c0dba8b472beb901eceece3d1a93fbd4..69a95ab712a4be9076de49c4ffc5012b8d4a2d2f 100644 --- a/applications/solvers/incompressible/potentialFreeSurfaceFoam/UEqn.H +++ b/applications/solvers/incompressible/potentialFreeSurfaceFoam/UEqn.H @@ -3,6 +3,8 @@ tmp<fvVectorMatrix> UEqn fvm::ddt(U) + fvm::div(phi, U) + turbulence->divDevReff(U) + == + fvOptions(U) ); @@ -12,7 +14,7 @@ fvOptions.constrain(UEqn()); if (pimple.momentumPredictor()) { - solve(UEqn() == -fvc::grad(p_gh) + fvOptions(U)); + solve(UEqn() == -fvc::grad(p_gh)); fvOptions.correct(U); } diff --git a/applications/solvers/incompressible/potentialFreeSurfaceFoam/pEqn.H b/applications/solvers/incompressible/potentialFreeSurfaceFoam/pEqn.H index 780bb2802246ad7adcdd9c0f0313570308d3fc87..6f6b9834e4098417c774a2439228917fcbeb55fd 100644 --- a/applications/solvers/incompressible/potentialFreeSurfaceFoam/pEqn.H +++ b/applications/solvers/incompressible/potentialFreeSurfaceFoam/pEqn.H @@ -2,7 +2,7 @@ volScalarField rAU(1.0/UEqn().A()); surfaceScalarField rAUf("Dp", fvc::interpolate(rAU)); volVectorField HbyA("HbyA", U); -HbyA = rAU*(UEqn() == fvOptions(U))().H(); +HbyA = rAU*UEqn().H(); if (pimple.nCorrPISO() <= 1) { @@ -18,6 +18,7 @@ surfaceScalarField phiHbyA adjustPhi(phiHbyA, U, p_gh); +fvOptions.relativeFlux(phiHbyA); // Non-orthogonal pressure corrector loop while (pimple.correctNonOrthogonal()) diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C index c4503cc10119f5dddb0e7d86179fafd042790706..1425a3e5f2b516d709e2b2e72b19303622e6d956 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C @@ -36,7 +36,6 @@ Description #include "basicReactingMultiphaseCloud.H" #include "rhoCombustionModel.H" #include "radiationModel.H" -#include "IOporosityModelList.H" #include "fvIOoptionList.H" #include "SLGThermo.H" #include "pimpleControl.H" diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options index 688b9364b63c3840446bc89927e9c8718fc7975f..7cd8f48ee4bb5632913fa492abcce2a26b9522dd 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options +++ b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options @@ -1,4 +1,4 @@ -EXE_INC = -g \ +EXE_INC = \ -IphaseModel/lnInclude \ -ImultiphaseSystem/lnInclude \ -ImultiphaseFixedFluxPressure \ diff --git a/applications/test/PatchTools/Make/files b/applications/test/PatchTools/Make/files new file mode 100644 index 0000000000000000000000000000000000000000..d148320dc59930d5d7a5428af43acb1a2ce70dc2 --- /dev/null +++ b/applications/test/PatchTools/Make/files @@ -0,0 +1,3 @@ +Test-PatchTools.C + +EXE = $(FOAM_USER_APPBIN)/Test-PatchTools diff --git a/applications/test/PatchTools/Make/options b/applications/test/PatchTools/Make/options new file mode 100644 index 0000000000000000000000000000000000000000..3d00e249a66f6ee6588d843f9f96365eb695e931 --- /dev/null +++ b/applications/test/PatchTools/Make/options @@ -0,0 +1,7 @@ +EXE_INC = \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/surfMesh/lnInclude + +EXE_LIBS = \ + -lfiniteVolume diff --git a/applications/test/PatchTools/Test-PatchTools.C b/applications/test/PatchTools/Test-PatchTools.C new file mode 100644 index 0000000000000000000000000000000000000000..4cf3eb0a0bf1adce5d52223349e10b8b7d3f6651 --- /dev/null +++ b/applications/test/PatchTools/Test-PatchTools.C @@ -0,0 +1,297 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Application + testPatchTools + +Description + Test app for PatchTools functionality + +\*---------------------------------------------------------------------------*/ + +#include "PatchTools.H" +#include "argList.H" +#include "fvMesh.H" +#include "volFields.H" +#include "Time.H" +#include "OBJstream.H" + +using namespace Foam; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +//template<class PatchType> +//Foam::tmp<Foam::pointField> +//areaPointNormals +//( +// const polyMesh& mesh, +// const PatchType& p, +// const labelList& meshFaces +//) +//{ +// // Assume patch is smaller than the globalData().coupledPatch() (?) so +// // loop over patch meshPoints. +// +// const labelList& meshPoints = p.meshPoints(); +// +// const globalMeshData& globalData = mesh.globalData(); +// const indirectPrimitivePatch& coupledPatch = globalData.coupledPatch(); +// const Map<label>& coupledPatchMP = coupledPatch.meshPointMap(); +// const mapDistribute& map = globalData.globalPointSlavesMap(); +// const globalIndexAndTransform& transforms = +// globalData.globalTransforms(); +// +// +// // 1. Start off with local (area-weighted) normals +// // (note:without calculating pointNormals +// // to avoid them being stored) +// +// tmp<pointField> textrudeN(new pointField(p.nPoints(), vector::zero)); +// pointField& extrudeN = textrudeN(); +// { +// const faceList& localFaces = p.localFaces(); +// const vectorField& faceAreas = mesh.faceAreas(); +// +// forAll(localFaces, faceI) +// { +// const face& f = localFaces[faceI]; +// const vector& n = faceAreas[meshFaces[faceI]]; +// forAll(f, fp) +// { +// extrudeN[f[fp]] += n; +// } +// } +// } +// +// +// // Collect local pointFaces +// List<List<point> > pointFaceNormals(map.constructSize()); +// { +// const vectorField& faceAreas = mesh.faceAreas(); +// +// forAll(meshPoints, patchPointI) +// { +// label meshPointI = meshPoints[patchPointI]; +// Map<label>::const_iterator fnd = coupledPatchMP.find(meshPointI); +// if (fnd != coupledPatchMP.end()) +// { +// label coupledPointI = fnd(); +// +// List<point>& pNormals = pointFaceNormals[coupledPointI]; +// const labelList& pFaces = p.pointFaces()[patchPointI]; +// pNormals.setSize(pFaces.size()); +// forAll(pFaces, i) +// { +// pNormals[i] = faceAreas[meshFaces[pFaces[i]]]; +// } +// } +// } +// } +// +// // Pull remote data into local slots +// map.distribute +// ( +// transforms, +// pointFaceNormals, +// listTransform() +// ); +// +// +// // Combine normals +// const labelListList& slaves = globalData.globalPointSlaves(); +// const labelListList& transformedSlaves = +// globalData.globalPointTransformedSlaves(); +// +// +// pointField coupledPointNormals(map.constructSize(), vector::zero); +// +// forAll(meshPoints, patchPointI) +// { +// label meshPointI = meshPoints[patchPointI]; +// Map<label>::const_iterator fnd = coupledPatchMP.find(meshPointI); +// if (fnd != coupledPatchMP.end()) +// { +// label coupledPointI = fnd(); +// const labelList& slaveSlots = slaves[coupledPointI]; +// const labelList& transformedSlaveSlots = +// transformedSlaves[coupledPointI]; +// +// label nFaces = slaveSlots.size()+transformedSlaveSlots.size(); +// if (nFaces > 0) +// { +// // Combine +// point& n = coupledPointNormals[coupledPointI]; +// +// n += sum(pointFaceNormals[coupledPointI]); +// +// forAll(slaveSlots, i) +// { +// n += sum(pointFaceNormals[slaveSlots[i]]); +// } +// forAll(transformedSlaveSlots, i) +// { +// n += sum(pointFaceNormals[transformedSlaveSlots[i]]); +// } +// +// // Put back into slave slots +// forAll(slaveSlots, i) +// { +// coupledPointNormals[slaveSlots[i]] = n; +// } +// forAll(transformedSlaveSlots, i) +// { +// coupledPointNormals[transformedSlaveSlots[i]] = n; +// } +// } +// } +// } +// +// +// // Send back +// map.reverseDistribute +// ( +// transforms, +// coupledPointNormals.size(), +// coupledPointNormals, +// mapDistribute::transform() +// ); +// +// +// // Override patch normals +// forAll(meshPoints, patchPointI) +// { +// label meshPointI = meshPoints[patchPointI]; +// Map<label>::const_iterator fnd = coupledPatchMP.find(meshPointI); +// if (fnd != coupledPatchMP.end()) +// { +// label coupledPointI = fnd(); +// extrudeN[patchPointI] = coupledPointNormals[coupledPointI]; +// } +// } +// +// extrudeN /= mag(extrudeN)+VSMALL; +// +// return textrudeN; +//} + + + +// Main program: + +int main(int argc, char *argv[]) +{ +# include "addTimeOptions.H" + argList::validArgs.append("patch"); +# include "setRootCase.H" +# include "createTime.H" + +# include "createMesh.H" + + const word patchName = args[1]; + label patchI = mesh.boundaryMesh().findPatchID(patchName); + const polyPatch& pp = mesh.boundaryMesh()[patchI]; + + const indirectPrimitivePatch& cpp = mesh.globalData().coupledPatch(); + + { + OBJstream str(runTime.path()/"edgePatchNormals.obj"); + + labelList patchEdges; + labelList coupledEdges; + PackedBoolList sameEdgeOrientation; + PatchTools::matchEdges + ( + pp, + cpp, + patchEdges, + coupledEdges, + sameEdgeOrientation + ); + + const pointField en + ( + PatchTools::edgeNormals + ( + mesh, + pp, + patchEdges, + coupledEdges + ) + ); + + forAll(en, patchEdgeI) + { + const edge& patchE = pp.edges()[patchEdgeI]; + //str.write(pp.localPoints()[pointI], en[pointI]); + const point pt = patchE.centre(pp.localPoints()); + str.write(linePointRef(pt, pt + 0.1*en[patchEdgeI])); + } + } + + + return 0; + + +// { +// OBJstream str(runTime.path()/"unweightedPatchNormals.obj"); +// +// const pointField pn +// ( +// PatchTools::pointNormals +// ( +// mesh, +// pp, +// identity(pp.size())+pp.start() +// ) +// ); +// forAll(pn, pointI) +// { +// str.write(linePointRef(pp.localPoints()[pointI], pn[pointI])); +// } +// } +// { +// OBJstream str(runTime.path()/"areaWeightedPatchNormals.obj"); +// +// const pointField pn +// ( +// areaPointNormals +// ( +// mesh, +// pp, +// identity(pp.size())+pp.start() +// ) +// ); +// forAll(pn, pointI) +// { +// str.write(linePointRef(pp.localPoints()[pointI], pn[pointI])); +// } +// } + + + Pout<< "End\n" << endl; + + return 0; +} + + +// ************************************************************************* // diff --git a/applications/utilities/mesh/advanced/collapseEdges/collapseDict b/applications/utilities/mesh/advanced/collapseEdges/collapseDict index 340c33049f621562390996a879b93070aa684186..170a0a890d8d77e83657930849a7eb2c418af67f 100644 --- a/applications/utilities/mesh/advanced/collapseEdges/collapseDict +++ b/applications/utilities/mesh/advanced/collapseEdges/collapseDict @@ -14,6 +14,11 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// If on, after collapsing check the quality of the mesh. If bad faces are +// generated then redo the collapsing with stricter filtering. +controlMeshQuality on; + + collapseEdgesCoeffs { // Edges shorter than this absolute value will be merged @@ -22,21 +27,13 @@ collapseEdgesCoeffs // The maximum angle between two edges that share a point attached to // no other edges maximumMergeAngle 30; - - // The amount that minimumEdgeLength will be reduced by for each - // edge if that edge's collapse generates a poor quality face - reductionFactor 0.5; } collapseFacesCoeffs { // The initial face length factor - initialFaceLengthFactor 0.5; - - // The amount that initialFaceLengthFactor will be reduced by for each - // face if its collapse generates a poor quality face - reductionFactor $initialFaceLengthFactor; + initialFaceLengthFactor 0.5; // If the face can't be collapsed to an edge, and it has a span less than // the target face length multiplied by this coefficient, collapse it @@ -63,12 +60,20 @@ collapseFacesCoeffs } -meshQualityCoeffs +controlMeshQualityCoeffs { // Name of the dictionary that has the mesh quality coefficients used // by motionSmoother::checkMesh #include "meshQualityDict"; + // The amount that minimumEdgeLength will be reduced by for each + // edge if that edge's collapse generates a poor quality face + edgeReductionFactor 0.5; + + // The amount that initialFaceLengthFactor will be reduced by for each + // face if its collapse generates a poor quality face + faceReductionFactor $initialFaceLengthFactor; + // Maximum number of smoothing iterations for the reductionFactors maximumSmoothingIterations 2; diff --git a/applications/utilities/miscellaneous/foamHelp/Allwclean b/applications/utilities/miscellaneous/foamHelp/Allwclean new file mode 100755 index 0000000000000000000000000000000000000000..9dca480e2ec1907c6f27fb2e9b1eac70843a4b38 --- /dev/null +++ b/applications/utilities/miscellaneous/foamHelp/Allwclean @@ -0,0 +1,8 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # run from this directory + +wclean libso helpTypes +wclean + + +# ----------------------------------------------------------------- end-of-file diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.C index acf9a72d2406dcfa843de9092ba8885e21952ab7..ac9c639c497956968433375dc05fc8123f71c9a3 100644 --- a/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.C +++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -176,46 +176,40 @@ Foam::doxygenXmlParser::doxygenXmlParser // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::doxygenXmlParser::skipBlock(IFstream& is, const word blockName) const +void Foam::doxygenXmlParser::skipBlock +( + IFstream& is, + const word& blockName +) const { // recurse to move forward in 'is' until come across </blockName> - string closeName = ""; - // fast-forward until we reach a '<' char c; - while (is.get(c) && c != '<') - {} - - // check to see if this is a closing block - if (is.get(c) && c == '/') + while (is.good() && (closeName != blockName)) { - while (is.get(c) && c != '>') - { - closeName += c; - } + // fast-forward until we reach a '<' + while (is.get(c) && c != '<') + {} - if (closeName == blockName) + // check to see if this is a closing block + if (is.get(c) && c == '/') { - // finished reading block - return; - } - else - { - skipBlock(is, blockName); + closeName = ""; + + while (is.get(c) && c != '>') + { + closeName += c; + } } } - else - { - skipBlock(is, blockName); - } } void Foam::doxygenXmlParser::skipForward ( IFstream& is, - const word blockName + const word& blockName ) const { // recurse to move forward in 'is' until come across <blockName> diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.H b/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.H index f2abdaee8d4f6c9f9e071b807f80e4e5b92663cf..9853589fa3e3b688a55b9923bddece682b8e188b 100644 --- a/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.H +++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/doxygenXmlParser/doxygenXmlParser.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,8 +25,10 @@ Class Foam::doxygenXmlParser Description + Parser for doxygen XML SourceFiles + doxygenXmlParser.C \*---------------------------------------------------------------------------*/ @@ -65,10 +67,10 @@ public: // Member functions //- Skip past a block - void skipBlock(IFstream& is, const word blockName) const; + void skipBlock(IFstream& is, const word& blockName) const; //- Skip forward to block - void skipForward(IFstream& is, const word blockName) const; + void skipForward(IFstream& is, const word& blockName) const; //- Return the entry template<class Type> diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpType/helpType.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpType/helpType.C index 0b982e76a7e03a466df79b076609b570ba810060..29ad9ddbde30963b7001891fd3c5127612ac81cb 100644 --- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpType/helpType.C +++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpType/helpType.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -148,7 +148,12 @@ void Foam::helpType::displayDoc { FatalErrorIn ( - "void Foam::helpType::displayDoc(const word, const string)" + "void Foam::helpType::displayDoc" + "(" + "const word&, " + "const string&, " + "const bool" + ")" ) << "No help for type " << className << " found." << " Valid options include:" << SortableList<word>(parser.toc()) diff --git a/etc/codeTemplates/source/_Template.C b/etc/codeTemplates/source/_Template.C index db0fb9ba1afe9e8c4e25f8626982fdf2b61879e4..d34155cec46b009656ec1e78bc2049cba15c5865 100644 --- a/etc/codeTemplates/source/_Template.C +++ b/etc/codeTemplates/source/_Template.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/etc/codeTemplates/source/_Template.H b/etc/codeTemplates/source/_Template.H index 1226ef835c0ff1514cc2cc48cc61e28164c538db..2f7c479705e296e796573c0de7ce184873ebefe5 100644 --- a/etc/codeTemplates/source/_Template.H +++ b/etc/codeTemplates/source/_Template.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/etc/codeTemplates/source/_TemplateApp.C b/etc/codeTemplates/source/_TemplateApp.C index 070100f96e6dcaefdf21a146b6e8c6fc7093a9de..602a0c44a75a00d819dbaeaba65fb665e44f4943 100644 --- a/etc/codeTemplates/source/_TemplateApp.C +++ b/etc/codeTemplates/source/_TemplateApp.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/etc/codeTemplates/source/_TemplateI.H b/etc/codeTemplates/source/_TemplateI.H index 8de09a51e1848a6fe80ad91172d539194fd9b1f5..7e5c62ed284f15daa51cc45feffc33c018aabc20 100644 --- a/etc/codeTemplates/source/_TemplateI.H +++ b/etc/codeTemplates/source/_TemplateI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/etc/codeTemplates/source/_TemplateIO.C b/etc/codeTemplates/source/_TemplateIO.C index bb2972330be0573d75699f879d187f0e909074e8..0427c8a3c69d2c43bf1e02c6be0f9fb0a896b008 100644 --- a/etc/codeTemplates/source/_TemplateIO.C +++ b/etc/codeTemplates/source/_TemplateIO.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/etc/controlDict b/etc/controlDict index 8d67716f3ccfbe54064e84d4f52c29e8e3de629d..b9c41cb3a432c8e9842c4fa5ea9f4968a612ce19 100644 --- a/etc/controlDict +++ b/etc/controlDict @@ -46,6 +46,8 @@ InfoSwitches OptimisationSwitches { + // On NFS mounted file system: maximum wait for files to appear/get + // updated. Set to 0 on distributed case. fileModificationSkew 10; //- Modification checking: @@ -1005,6 +1007,22 @@ DimensionSets // but not scaled (only supported for dimensionedScalar, etc) //writeUnits (kg m s K mol A Cd); } + + USCSCoeffs + { + // Basic units + lb lb [ 1 0 0 0 0 0 0 ] 1.0; + ft ft [ 0 1 0 0 0 0 0 ] 1.0; + s s [ 0 0 1 0 0 0 0 ] 1.0; + R R [ 0 0 0 1 0 0 0 ] 1.0; + mol mol [ 0 0 0 0 1 0 0 ] 1.0; + A A [ 0 0 0 0 0 1 0 ] 1.0; + Cd Cd [ 0 0 0 0 0 0 1 ] 1.0; + + // Set of units used for printing. Can be any basic or derived + // but not scaled (only supported for dimensionedScalar, etc) + //writeUnits (lb ft s R mol A Cd); + } } diff --git a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C index b30adee72ac286174bd3048c6aadcb8d8fff989b..41f0ff99166416a885652f11cfbeac5f5bc7940d 100644 --- a/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C +++ b/src/OpenFOAM/db/IOobject/IOobjectReadHeader.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -86,7 +86,7 @@ bool Foam::IOobject::readHeader(Istream& is) } else { - SeriousIOErrorIn("IOobject::readHeader(Istream&)", is) + IOWarningIn("IOobject::readHeader(Istream&)", is) << "First token could not be read or is not the keyword 'FoamFile'" << nl << nl << "Check header is of the form:" << nl << endl; diff --git a/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntry.C b/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntry.C index 4dce3b20280fd4c3fa262d38702f53de1e0e5a54..26a6a45f5755d528a0705a5896bafce5cb253425 100644 --- a/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntry.C +++ b/src/OpenFOAM/db/dictionary/dictionaryEntry/dictionaryEntry.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,6 +64,7 @@ Foam::label Foam::dictionaryEntry::startLineNumber() const } } + Foam::label Foam::dictionaryEntry::endLineNumber() const { if (size()) diff --git a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C index cfe9de327350bb6180104bb15450141ad607e51c..8a12740cb6c9fefd3ed4f4b6f419e5a181d6875f 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,16 +27,9 @@ License #include "addToMemberFunctionSelectionTable.H" #include "IStringStream.H" #include "OStringStream.H" -#include "IOstreams.H" -#include "stringOps.H" #include "dynamicCode.H" #include "dynamicCodeContext.H" -#include "dlLibraryTable.H" -#include "OSspecific.H" #include "Time.H" -#include "PstreamReduceOps.H" - -#include "long.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -149,7 +142,9 @@ Foam::functionEntries::codeStream::getFunction // create library if required if (!lib) { - bool create = Pstream::master(); + bool create = + Pstream::master() + || (regIOobject::fileModificationSkew <= 0); // not NFS if (create) { @@ -196,9 +191,52 @@ Foam::functionEntries::codeStream::getFunction //- Only block if we're not doing master-only reading. (flag set by // regIOobject::read, IOdictionary constructor) - if (!regIOobject::masterOnlyReading) + if + ( + !regIOobject::masterOnlyReading + && regIOobject::fileModificationSkew > 0 + ) { - reduce(create, orOp<bool>()); + //- Since the library has only been compiled on the master the + // other nodes need to pick this library up through NFS + // We do this by just polling a few times using the + // fileModificationSkew. + + off_t mySize = Foam::fileSize(libPath); + off_t masterSize = mySize; + Pstream::scatter(masterSize); + + if (mySize < masterSize) + { + Pout<< "Local file " << libPath + << " not of same size (" << mySize + << ") as master (" + << masterSize << "). Waiting for " + << regIOobject::fileModificationSkew + << " seconds." << endl; + Foam::sleep(regIOobject::fileModificationSkew); + + // Recheck local size + mySize = Foam::fileSize(libPath); + + if (mySize < masterSize) + { + FatalIOErrorIn + ( + "functionEntries::codeStream::execute(..)", + parentDict + ) << "Cannot read (NFS mounted) library " << nl + << libPath << nl + << "on processor " << Pstream::myProcNo() + << " detected size " << mySize + << " whereas master size is " << masterSize + << " bytes." << nl + << "If your case is not NFS mounted" + << " (so distributed) set fileModificationSkew" + << " to 0" + << exit(FatalIOError); + } + } } if (isA<IOdictionary>(topDict(parentDict))) diff --git a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchTools.H b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchTools.H index 968b0b52441cf3898afbd93a340ddf25559d3071..439c120b450df4b5c3247089086e9fc4562275c5 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchTools.H +++ b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchTools.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -221,8 +221,7 @@ public: ); - //- Return parallel consistent point normals for patches (on boundary faces) - // using mesh points. + //- Return parallel consistent point normals for patches using mesh points. template < class Face, @@ -231,10 +230,27 @@ public: class PointType > static tmp<pointField> pointNormals + ( + const polyMesh&, + const PrimitivePatch<Face, FaceList, PointField, PointType>& + ); + + + //- Return parallel consistent edge normals for patches using mesh points. + // Supply with patch matching info from matchEdges. + template + < + class Face, + template<class> class FaceList, + class PointField, + class PointType + > + static tmp<pointField> edgeNormals ( const polyMesh&, const PrimitivePatch<Face, FaceList, PointField, PointType>&, - const labelList& meshFaces + const labelList& patchEdges, + const labelList& coupledEdges ); diff --git a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsNormals.C b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsNormals.C index 02707b9cc58e4dcb3c5ce6c2812ff1b7072f749d..a5cb7fdbb982c4a7d8eae8d1be45bf09d378e8a0 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsNormals.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsNormals.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -79,8 +79,7 @@ Foam::tmp<Foam::pointField> Foam::PatchTools::pointNormals ( const polyMesh& mesh, - const PrimitivePatch<Face, FaceList, PointField, PointType>& p, - const labelList& meshFaces + const PrimitivePatch<Face, FaceList, PointField, PointType>& p ) { // Assume patch is smaller than the globalData().coupledPatch() (?) so @@ -224,4 +223,90 @@ Foam::PatchTools::pointNormals } +template +< + class Face, + template<class> class FaceList, + class PointField, + class PointType +> + +Foam::tmp<Foam::pointField> +Foam::PatchTools::edgeNormals +( + const polyMesh& mesh, + const PrimitivePatch<Face, FaceList, PointField, PointType>& p, + const labelList& patchEdges, + const labelList& coupledEdges +) +{ + // 1. Start off with local normals + + tmp<pointField> tedgeNormals(new pointField(p.nEdges(), vector::zero)); + pointField& edgeNormals = tedgeNormals(); + { + const labelListList& edgeFaces = p.edgeFaces(); + const vectorField& faceNormals = p.faceNormals(); + + forAll(edgeFaces, edgeI) + { + const labelList& eFaces = edgeFaces[edgeI]; + forAll(eFaces, i) + { + edgeNormals[edgeI] += faceNormals[eFaces[i]]; + } + } + edgeNormals /= mag(edgeNormals)+VSMALL; + } + + + + const globalMeshData& globalData = mesh.globalData(); + const mapDistribute& map = globalData.globalEdgeSlavesMap(); + + + // Convert patch-edge data into cpp-edge data + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + //- Construct with all data in consistent orientation + pointField cppEdgeData(map.constructSize(), vector::zero); + + forAll(patchEdges, i) + { + label patchEdgeI = patchEdges[i]; + label coupledEdgeI = coupledEdges[i]; + cppEdgeData[coupledEdgeI] = edgeNormals[patchEdgeI]; + } + + + // Synchronise + // ~~~~~~~~~~~ + + globalData.syncData + ( + cppEdgeData, + globalData.globalEdgeSlaves(), + globalData.globalEdgeTransformedSlaves(), + map, + globalData.globalTransforms(), + plusEqOp<point>(), // add since normalised later on + mapDistribute::transform() + ); + cppEdgeData /= mag(cppEdgeData)+VSMALL; + + + // Back from cpp-edge to patch-edge data + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + forAll(patchEdges, i) + { + label patchEdgeI = patchEdges[i]; + label coupledEdgeI = coupledEdges[i]; + edgeNormals[patchEdgeI] = cppEdgeData[coupledEdgeI]; + } + + return tedgeNormals; +} + + // ************************************************************************* // diff --git a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C index 9b184f994e6488086322e6e93fec8fd87f9adb52..a1cfc83aebe47fd7c87ece182fc09465df179594 100644 --- a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C +++ b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.C @@ -427,9 +427,13 @@ Foam::polyMeshFilter::polyMeshFilter(const fvMesh& mesh) IOobject::NO_WRITE ) ), + controlMeshQuality_ + ( + dict_.lookupOrDefault<Switch>("controlMeshQuality", false) + ), collapseEdgesCoeffDict_(dict_.subDict("collapseEdgesCoeffs")), - collapseFacesCoeffDict_(dict_.subDict("collapseFacesCoeffs")), - meshQualityCoeffDict_(dict_.subDict("meshQualityCoeffs")), + collapseFacesCoeffDict_(dict_.subOrEmptyDict("collapseFacesCoeffs")), + meshQualityCoeffDict_(dict_.subOrEmptyDict("controlMeshQualityCoeffs")), minLen_(readScalar(collapseEdgesCoeffDict_.lookup("minimumEdgeLength"))), maxCos_ ( @@ -443,27 +447,39 @@ Foam::polyMeshFilter::polyMeshFilter(const fvMesh& mesh) ), edgeReductionFactor_ ( - readScalar(collapseEdgesCoeffDict_.lookup("reductionFactor")) + meshQualityCoeffDict_.lookupOrDefault<scalar>("edgeReductionFactor", -1) ), maxIterations_ ( - readLabel(meshQualityCoeffDict_.lookup("maximumIterations")) + meshQualityCoeffDict_.lookupOrAddDefault<label>("maximumIterations", 1) ), maxSmoothIters_ ( - readLabel(meshQualityCoeffDict_.lookup("maximumSmoothingIterations")) + meshQualityCoeffDict_.lookupOrAddDefault<label> + ( + "maximumSmoothingIterations", + 0 + ) ), initialFaceLengthFactor_ ( - readScalar(collapseFacesCoeffDict_.lookup("initialFaceLengthFactor")) + collapseFacesCoeffDict_.lookupOrAddDefault<scalar> + ( + "initialFaceLengthFactor", + -1 + ) ), faceReductionFactor_ ( - readScalar(collapseFacesCoeffDict_.lookup("reductionFactor")) + meshQualityCoeffDict_.lookupOrAddDefault<scalar> + ( + "faceReductionFactor", + -1 + ) ), maxPointErrorCount_ ( - readLabel(meshQualityCoeffDict_.lookup("maxPointErrorCount")) + meshQualityCoeffDict_.lookupOrAddDefault<label>("maxPointErrorCount", 0) ), minEdgeLen_(), faceFilterFactor_() @@ -547,23 +563,10 @@ Foam::label Foam::polyMeshFilter::filter(const label nOriginalBadFaces) Map<point> collapsePointToLocation(newMesh.nPoints()); // Mark points on boundary - const labelList boundaryPoint = findBoundaryPoints - ( - newMesh//, - // boundaryIOPts - ); + const labelList boundaryPoint = findBoundaryPoints(newMesh); edgeCollapser collapser(newMesh, collapseFacesCoeffDict_); - // Per face collapse status: - // -1 : not collapsed - // >= 0 : index of point in face to collapse to - List<Map<point> > faceCollapseToPoints - ( - newMesh.nFaces(), - Map<point>() - ); - { // Collapse faces labelPair nCollapsedPtEdge = collapser.markSmallSliverFaces @@ -832,41 +835,48 @@ Foam::label Foam::polyMeshFilter::filter(const label nOriginalBadFaces) // Do not allow collapses in regions of error. // Updates minEdgeLen, nRelaxedEdges - PackedBoolList isErrorPoint(newMesh.nPoints()); - nBadFaces = edgeCollapser::checkMeshQuality - ( - newMesh, - meshQualityCoeffDict_, - isErrorPoint - ); + if (controlMeshQuality_) + { + PackedBoolList isErrorPoint(newMesh.nPoints()); + nBadFaces = edgeCollapser::checkMeshQuality + ( + newMesh, + meshQualityCoeffDict_, + isErrorPoint + ); - Info<< nl << " Number of bad faces : " << nBadFaces << nl - << " Number of marked points : " - << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) - << endl; + Info<< nl << " Number of bad faces : " << nBadFaces << nl + << " Number of marked points : " + << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) + << endl; - updatePointErrorCount - ( - isErrorPoint, - origToCurrentPointMap, - pointErrorCount - ); + updatePointErrorCount + ( + isErrorPoint, + origToCurrentPointMap, + pointErrorCount + ); - checkMeshEdgesAndRelaxEdges - ( - newMesh, - origToCurrentPointMap, - isErrorPoint, - pointErrorCount - ); + checkMeshEdgesAndRelaxEdges + ( + newMesh, + origToCurrentPointMap, + isErrorPoint, + pointErrorCount + ); - checkMeshFacesAndRelaxEdges - ( - newMesh, - origToCurrentPointMap, - isErrorPoint, - pointErrorCount - ); + checkMeshFacesAndRelaxEdges + ( + newMesh, + origToCurrentPointMap, + isErrorPoint, + pointErrorCount + ); + } + else + { + return -1; + } } return nBadFaces; @@ -931,11 +941,7 @@ Foam::label Foam::polyMeshFilter::filterEdges Map<point> collapsePointToLocation(newMesh.nPoints()); // Mark points on boundary - const labelList boundaryPoint = findBoundaryPoints - ( - newMesh//, -// boundaryIOPts - ); + const labelList boundaryPoint = findBoundaryPoints(newMesh); edgeCollapser collapser(newMesh, collapseFacesCoeffDict_); @@ -1059,33 +1065,40 @@ Foam::label Foam::polyMeshFilter::filterEdges // Do not allow collapses in regions of error. // Updates minEdgeLen, nRelaxedEdges - PackedBoolList isErrorPoint(newMesh.nPoints()); - nBadFaces = edgeCollapser::checkMeshQuality - ( - newMesh, - meshQualityCoeffDict_, - isErrorPoint - ); + if (controlMeshQuality_) + { + PackedBoolList isErrorPoint(newMesh.nPoints()); + nBadFaces = edgeCollapser::checkMeshQuality + ( + newMesh, + meshQualityCoeffDict_, + isErrorPoint + ); - Info<< nl << " Number of bad faces : " << nBadFaces << nl - << " Number of marked points : " - << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) - << endl; + Info<< nl << " Number of bad faces : " << nBadFaces << nl + << " Number of marked points : " + << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) + << endl; - updatePointErrorCount - ( - isErrorPoint, - origToCurrentPointMap, - pointErrorCount - ); + updatePointErrorCount + ( + isErrorPoint, + origToCurrentPointMap, + pointErrorCount + ); - checkMeshEdgesAndRelaxEdges - ( - newMesh, - origToCurrentPointMap, - isErrorPoint, - pointErrorCount - ); + checkMeshEdgesAndRelaxEdges + ( + newMesh, + origToCurrentPointMap, + isErrorPoint, + pointErrorCount + ); + } + else + { + return -1; + } } return nBadFaces; @@ -1174,18 +1187,21 @@ Foam::label Foam::polyMeshFilter::filterIndirectPatchFaces() // Do not allow collapses in regions of error. // Updates minEdgeLen, nRelaxedEdges - PackedBoolList isErrorPoint(newMesh.nPoints()); - nBadFaces = edgeCollapser::checkMeshQuality - ( - newMesh, - meshQualityCoeffDict_, - isErrorPoint - ); + if (controlMeshQuality_) + { + PackedBoolList isErrorPoint(newMesh.nPoints()); + nBadFaces = edgeCollapser::checkMeshQuality + ( + newMesh, + meshQualityCoeffDict_, + isErrorPoint + ); - Info<< nl << " Number of bad faces : " << nBadFaces << nl - << " Number of marked points : " - << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) - << endl; + Info<< nl << " Number of bad faces : " << nBadFaces << nl + << " Number of marked points : " + << returnReduce(isErrorPoint.count(), sumOp<unsigned int>()) + << endl; + } } return nBadFaces; diff --git a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.H b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.H index 28aaf7ea06a955739902de94063d2968ece0b7cf..5c4ba9e963bc406fc1d4d8e78942b121b409a724 100644 --- a/src/dynamicMesh/polyMeshFilter/polyMeshFilter.H +++ b/src/dynamicMesh/polyMeshFilter/polyMeshFilter.H @@ -70,14 +70,18 @@ class polyMeshFilter //- Dictionary containing the coefficient sub-dictionaries const IOdictionary dict_; + //- After collapsing, check the mesh quality and redo the collapsing + // iteration if there are too many bad faces in the mesh + Switch controlMeshQuality_; + //- Coefficients for collapsing edges const dictionary& collapseEdgesCoeffDict_; //- Coefficients for collapsing faces - const dictionary& collapseFacesCoeffDict_; + dictionary collapseFacesCoeffDict_; //- Coefficients for controlling the mesh quality - const dictionary& meshQualityCoeffDict_; + dictionary meshQualityCoeffDict_; //- Remove edges shorter than this length const scalar minLen_; diff --git a/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C b/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C index f6c35df41e7a3c2c85d2f3c03668831f2da0cf83..f503a35ae35aa4a331f5c1eb2ccb990a1aae1810 100644 --- a/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C +++ b/src/dynamicMesh/polyTopoChange/polyTopoChange/edgeCollapser.C @@ -1226,10 +1226,13 @@ Foam::edgeCollapser::edgeCollapser ) : mesh_(mesh), - guardFraction_(readScalar(dict.lookup("guardFraction"))), + guardFraction_ + ( + dict.lookupOrDefault<scalar>("guardFraction", 0) + ), maxCollapseFaceToPointSideLengthCoeff_ ( - readScalar(dict.lookup("maxCollapseFaceToPointSideLengthCoeff")) + dict.lookupOrDefault<scalar>("maxCollapseFaceToPointSideLengthCoeff", 0) ), allowEarlyCollapseToPoint_ ( @@ -1237,7 +1240,7 @@ Foam::edgeCollapser::edgeCollapser ), allowEarlyCollapseCoeff_ ( - readScalar(dict.lookup("allowEarlyCollapseCoeff")) + dict.lookupOrDefault<scalar>("allowEarlyCollapseCoeff", 0) ) {} diff --git a/src/engine/enginePiston/enginePiston.C b/src/engine/enginePiston/enginePiston.C index deac506a02f9e1766891da78516c203abbda26a9..68be48ec087718d67c21051c8aec3cef43c945da 100644 --- a/src/engine/enginePiston/enginePiston.C +++ b/src/engine/enginePiston/enginePiston.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -63,7 +63,7 @@ Foam::enginePiston::enginePiston ( coordinateSystem::New ( - "coordinateSystem", + mesh_, dict.subDict("coordinateSystem") ) ), diff --git a/src/engine/engineValve/engineValve.C b/src/engine/engineValve/engineValve.C index 6b130711a3fa3e3f659a9512736e5dec9f3db570..0be19c39f28fdec6f6972f80354f05224c8e1b2e 100644 --- a/src/engine/engineValve/engineValve.C +++ b/src/engine/engineValve/engineValve.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -125,7 +125,7 @@ Foam::engineValve::engineValve ( coordinateSystem::New ( - "coordinateSystem", + mesh_, dict.subDict("coordinateSystem") ) ), diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 063b6fc04cbbdc08c2258c1de97000659c43ca71..47bdb976b3f4d6800b47156a3ec7cc2a5348a2ea 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -381,8 +381,8 @@ $(porosity)/porosityModel/porosityModelNew.C $(porosity)/porosityModel/porosityModelList.C $(porosity)/porosityModel/IOporosityModelList.C $(porosity)/DarcyForchheimer/DarcyForchheimer.C -$(porosity)/powerLaw/powerLaw.C $(porosity)/fixedCoeff/fixedCoeff.C +$(porosity)/powerLaw/powerLaw.C MRF = $(general)/MRF $(MRF)/MRFZone.C diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C index b0857fa78ed849978a61a5133c035dedf5352296..3806c56fec1228835edd790f1c75959540c87c65 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,66 +52,65 @@ Foam::porosityModels::DarcyForchheimer::DarcyForchheimer ) : porosityModel(name, modelType, mesh, dict, cellZoneName), - coordSys_(coeffs_, mesh), - D_("D", dimless/sqr(dimLength), tensor::zero), - F_("F", dimless/dimLength, tensor::zero), + D_(cellZoneIds_.size()), + F_(cellZoneIds_.size()), rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho")), muName_(coeffs_.lookupOrDefault<word>("mu", "thermo:mu")), nuName_(coeffs_.lookupOrDefault<word>("nu", "nu")) { - // local-to-global transformation tensor - const tensor& E = coordSys_.R(); dimensionedVector d(coeffs_.lookup("d")); - if (D_.dimensions() != d.dimensions()) - { - FatalIOErrorIn - ( - "Foam::porosityModels::DarcyForchheimer::DarcyForchheimer" - "(" - "const word&, " - "const word&, " - "const fvMesh&, " - "const dictionary&" - ")", - coeffs_ - ) << "incorrect dimensions for d: " << d.dimensions() - << " should be " << D_.dimensions() - << exit(FatalIOError); - } + dimensionedVector f(coeffs_.lookup("f")); adjustNegativeResistance(d); + adjustNegativeResistance(f); - D_.value().xx() = d.value().x(); - D_.value().yy() = d.value().y(); - D_.value().zz() = d.value().z(); - D_.value() = (E & D_ & E.T()).value(); - - dimensionedVector f(coeffs_.lookup("f")); - if (F_.dimensions() != f.dimensions()) + if (coordSys_.R().uniform()) { - FatalIOErrorIn - ( - "Foam::porosityModels::DarcyForchheimer::DarcyForchheimer" - "(" - "const word&, " - "const word&, " - "const fvMesh&, " - "const dictionary&" - ")", - coeffs_ - ) << "incorrect dimensions for f: " << f.dimensions() - << " should be " << F_.dimensions() - << exit(FatalIOError); - } + forAll (cellZoneIds_, zoneI) + { + D_[zoneI].setSize(1, tensor::zero); + F_[zoneI].setSize(1, tensor::zero); - adjustNegativeResistance(f); + D_[zoneI][0].xx() = d.value().x(); + D_[zoneI][0].yy() = d.value().y(); + D_[zoneI][0].zz() = d.value().z(); + + D_[zoneI][0] = coordSys_.R().transformTensor(D_[zoneI][0]); - // leading 0.5 is from 1/2*rho - F_.value().xx() = 0.5*f.value().x(); - F_.value().yy() = 0.5*f.value().y(); - F_.value().zz() = 0.5*f.value().z(); - F_.value() = (E & F_ & E.T()).value(); + // leading 0.5 is from 1/2*rho + F_[zoneI][0].xx() = 0.5*f.value().x(); + F_[zoneI][0].yy() = 0.5*f.value().y(); + F_[zoneI][0].zz() = 0.5*f.value().z(); + + F_[zoneI][0] = coordSys_.R().transformTensor(F_[zoneI][0]); + } + + } + else + { + forAll(cellZoneIds_, zoneI) + { + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; + + D_[zoneI].setSize(cells.size(), tensor::zero); + F_[zoneI].setSize(cells.size(), tensor::zero); + + forAll(cells, i) + { + D_[zoneI][i].xx() = d.value().x(); + D_[zoneI][i].yy() = d.value().y(); + D_[zoneI][i].zz() = d.value().z(); + + F_[zoneI][i].xx() = f.value().x(); + F_[zoneI][i].yy() = f.value().y(); + F_[zoneI][i].zz() = f.value().z(); + } + + D_[zoneI] = coordSys_.R().transformTensor(D_[zoneI], cells); + F_[zoneI] = coordSys_.R().transformTensor(F_[zoneI], cells); + } + } } @@ -132,7 +131,7 @@ void Foam::porosityModels::DarcyForchheimer::correct const scalarField& V = mesh_.V(); scalarField& Udiag = UEqn.diag(); vectorField& Usource = UEqn.source(); - + if (UEqn.dimensions() == dimForce) { const volScalarField& rho = @@ -163,7 +162,7 @@ void Foam::porosityModels::DarcyForchheimer::correct const scalarField& V = mesh_.V(); scalarField& Udiag = UEqn.diag(); vectorField& Usource = UEqn.source(); - + apply(Udiag, Usource, V, rho, mu, U); } diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H index ab3007d204df0675ba4eb60e35a0b2d3540f2ad6..5648fb09001a2f3b969720c0da350d75f1766743 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimer.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,7 +53,6 @@ SourceFiles #define DarcyForchheimer_H #include "porosityModel.H" -#include "coordinateSystem.H" #include "dimensionedTensor.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -75,14 +74,12 @@ private: // Private data - //- Local co-ordinate system - coordinateSystem coordSys_; //- Darcy coefficient [1/m2] - dimensionedTensor D_; + List<tensorField> D_; //- Forchheimer coefficient [1/m] - dimensionedTensor F_; + List<tensorField> F_; //- Name of density field word rhoName_; @@ -161,7 +158,7 @@ public: virtual void correct ( const fvVectorMatrix& UEqn, - volTensorField& AU + volTensorField& AU ) const; diff --git a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimerTemplates.C b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimerTemplates.C index 184206a010dccd166878507f0b002e1e8d35f9b9..f785f673450b98b6afb57bc899c085ca08439f82 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimerTemplates.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/DarcyForchheimer/DarcyForchheimerTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,18 +36,19 @@ void Foam::porosityModels::DarcyForchheimer::apply const vectorField& U ) const { - const tensor& D = D_.value(); - const tensor& F = F_.value(); - forAll(cellZoneIds_, zoneI) { + const tensorField& dZones = D_[zoneI]; + const tensorField& fZones = F_[zoneI]; + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; forAll(cells, i) { const label cellI = cells[i]; - - const tensor Cd = mu[cellI]*D + (rho[cellI]*mag(U[cellI]))*F; + const label j = this->fieldIndex(i); + const tensor Cd = + mu[cellI]*dZones[j] + (rho[cellI]*mag(U[cellI]))*fZones[j]; const scalar isoCd = tr(Cd); @@ -67,16 +68,20 @@ void Foam::porosityModels::DarcyForchheimer::apply const vectorField& U ) const { - const tensor& D = D_.value(); - const tensor& F = F_.value(); - forAll(cellZoneIds_, zoneI) { + const tensorField& dZones = D_[zoneI]; + const tensorField& fZones = F_[zoneI]; + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; forAll(cells, i) { const label cellI = cells[i]; + const label j = this->fieldIndex(i); + const tensor D = dZones[j]; + const tensor F = fZones[j]; + AU[cellI] += mu[cellI]*D + (rho[cellI]*mag(U[cellI]))*F; } } diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C index 59cef7436869d4761b80f3a424b91db80c648da3..2ba2d99b55fa4e60eff1c3fb94103f8fb8bc69f1 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,19 +50,18 @@ void Foam::porosityModels::fixedCoeff::apply const scalar rho ) const { - const tensor& alpha = alpha_.value(); - const tensor& beta = beta_.value(); - forAll(cellZoneIds_, zoneI) { + const tensorField& alphaZones = alpha_[zoneI]; + const tensorField& betaZones = beta_[zoneI]; + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; forAll(cells, i) { const label cellI = cells[i]; - - const tensor Cd = rho*(alpha + beta*mag(U[cellI])); - + const label j = fieldIndex(i); + const tensor Cd = rho*(alphaZones[j] + betaZones[j]*mag(U[cellI])); const scalar isoCd = tr(Cd); Udiag[cellI] += V[cellI]*isoCd; @@ -79,16 +78,21 @@ void Foam::porosityModels::fixedCoeff::apply const scalar rho ) const { - const tensor& alpha = alpha_.value(); - const tensor& beta = beta_.value(); forAll(cellZoneIds_, zoneI) { + const tensorField& alphaZones = alpha_[zoneI]; + const tensorField& betaZones = beta_[zoneI]; + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; forAll(cells, i) { const label cellI = cells[i]; + const label j = fieldIndex(i); + const tensor alpha = alphaZones[j]; + const tensor beta = betaZones[j]; + AU[cellI] += rho*(alpha + beta*mag(U[cellI])); } } @@ -107,62 +111,59 @@ Foam::porosityModels::fixedCoeff::fixedCoeff ) : porosityModel(name, modelType, mesh, dict, cellZoneName), - coordSys_(coeffs_, mesh), - alpha_("alpha", dimless/dimTime, tensor::zero), - beta_("beta", dimless/dimLength, tensor::zero) + alpha_(cellZoneIds_.size()), + beta_(cellZoneIds_.size()) { - // local-to-global transformation tensor - const tensor& E = coordSys_.R(); - dimensionedVector alpha(coeffs_.lookup("alpha")); - if (alpha_.dimensions() != alpha.dimensions()) - { - FatalIOErrorIn - ( - "Foam::porosityModels::fixedCoeff::fixedCoeff" - "(" - "const word&, " - "const word&, " - "const fvMesh&, " - "const dictionary&" - ")", - coeffs_ - ) << "incorrect dimensions for alpha: " << alpha.dimensions() - << " should be " << alpha_.dimensions() - << exit(FatalIOError); - } + dimensionedVector beta(coeffs_.lookup("beta")); adjustNegativeResistance(alpha); + adjustNegativeResistance(beta); - alpha_.value().xx() = alpha.value().x(); - alpha_.value().yy() = alpha.value().y(); - alpha_.value().zz() = alpha.value().z(); - alpha_.value() = (E & alpha_ & E.T()).value(); - - dimensionedVector beta(coeffs_.lookup("beta")); - if (beta_.dimensions() != beta.dimensions()) + if (coordSys_.R().uniform()) { - FatalIOErrorIn - ( - "Foam::porosityModels::fixedCoeff::fixedCoeff" - "(" - "const word&, " - "const word&, " - "const fvMesh&, " - "const dictionary&" - ")", - coeffs_ - ) << "incorrect dimensions for beta: " << beta.dimensions() - << " should be " << beta_.dimensions() - << exit(FatalIOError); + forAll (cellZoneIds_, zoneI) + { + alpha_[zoneI].setSize(1, tensor::zero); + beta_[zoneI].setSize(1, tensor::zero); + + alpha_[zoneI][0].xx() = alpha.value().x(); + alpha_[zoneI][0].yy() = alpha.value().y(); + alpha_[zoneI][0].zz() = alpha.value().z(); + alpha_[zoneI][0] = coordSys_.R().transformTensor(alpha_[zoneI][0]); + + beta_[zoneI][0].xx() = beta.value().x(); + beta_[zoneI][0].yy() = beta.value().y(); + beta_[zoneI][0].zz() = beta.value().z(); + beta_[zoneI][0] = coordSys_.R().transformTensor(beta_[zoneI][0]); + } } + else + { + forAll(cellZoneIds_, zoneI) + { + const labelList& cells = mesh_.cellZones()[cellZoneIds_[zoneI]]; - adjustNegativeResistance(beta); + alpha_[zoneI].setSize(cells.size(), tensor::zero); + beta_[zoneI].setSize(cells.size(), tensor::zero); + + forAll(cells, i) + { + alpha_[zoneI][i].xx() = alpha.value().x(); + alpha_[zoneI][i].yy() = alpha.value().y(); + alpha_[zoneI][i].zz() = alpha.value().z(); - beta_.value().xx() = beta.value().x(); - beta_.value().yy() = beta.value().y(); - beta_.value().zz() = beta.value().z(); - beta_.value() = (E & beta_ & E.T()).value(); + beta_[zoneI][i].xx() = beta.value().x(); + beta_[zoneI][i].yy() = beta.value().y(); + beta_[zoneI][i].zz() = beta.value().z(); + } + + alpha_[zoneI] = + coordSys_.R().transformTensor(alpha_[zoneI], cells); + + beta_[zoneI] = coordSys_.R().transformTensor(beta_[zoneI], cells); + } + } } @@ -183,7 +184,7 @@ void Foam::porosityModels::fixedCoeff::correct const scalarField& V = mesh_.V(); scalarField& Udiag = UEqn.diag(); vectorField& Usource = UEqn.source(); - + scalar rho = 1.0; if (UEqn.dimensions() == dimForce) { @@ -211,7 +212,7 @@ void Foam::porosityModels::fixedCoeff::correct { coeffs_.lookup("rhoRef") >> rho; } - + apply(Udiag, Usource, V, U, rho); } diff --git a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H index 61f4c36224db92adf8065daec6835f0703a0f424..ad00c5ff8c1fd8531070183d7a980aac1034380c 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/fixedCoeff/fixedCoeff.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,7 +43,6 @@ SourceFiles #define fixedCoeff_H #include "porosityModel.H" -#include "coordinateSystem.H" #include "dimensionedTensor.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -65,14 +64,11 @@ private: // Private data - //- Local co-ordinate system - coordinateSystem coordSys_; - //- Model alpha coefficient [1/s] - dimensionedTensor alpha_; + List<tensorField> alpha_; //- Model beta coefficient [1/m] - dimensionedTensor beta_; + List<tensorField> beta_; // Private Member Functions @@ -138,7 +134,7 @@ public: virtual void correct ( const fvVectorMatrix& UEqn, - volTensorField& AU + volTensorField& AU ) const; diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C index 77de5b1ffecd0ada7aa9ff1e50801b48f8d130e4..56395ee245573e2a0efc085a50c228c61b1a95d9 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -66,6 +66,17 @@ void Foam::porosityModel::adjustNegativeResistance(dimensionedVector& resist) } +Foam::label Foam::porosityModel::fieldIndex(const label i) const +{ + label index = 0; + if (!coordSys_.R().uniform()) + { + index = i; + } + return index; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::porosityModel::porosityModel @@ -83,7 +94,8 @@ Foam::porosityModel::porosityModel coeffs_(dict.subDict(modelType + "Coeffs")), active_(true), zoneName_(cellZoneName), - cellZoneIds_() + cellZoneIds_(), + coordSys_(coordinateSystem::New(mesh, coeffs_)) { if (zoneName_ == word::null) { @@ -158,7 +170,7 @@ void Foam::porosityModel::porosityModel::addResistance ( const fvVectorMatrix& UEqn, volTensorField& AU, - bool correctAUprocBC + bool correctAUprocBC ) const { if (cellZoneIds_.empty()) diff --git a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H index 1c61e29f1812f77ed002260ce8db43e43aecb9f0..0217ebd5848829e686fa22eebf292fdccbe1d9cb 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/porosityModel/porosityModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,6 +40,7 @@ SourceFiles #include "dictionary.H" #include "fvMatricesFwd.H" #include "runTimeSelectionTables.H" +#include "coordinateSystem.H" #include "dimensionedVector.H" #include "keyType.H" @@ -90,6 +91,9 @@ protected: //- Cell zone Ids labelList cellZoneIds_; + //- Local co-ordinate system + coordinateSystem coordSys_; + // Protected Member Functions @@ -111,6 +115,9 @@ protected: volTensorField& AU ) const = 0; + //- Return label index + label fieldIndex(const label index) const; + public: diff --git a/src/fvOptions/include/createFvOptions.H b/src/fvOptions/include/createFvOptions.H index 3b190c2459b831930bee1ae87c52201e1b30262e..a4882baac19e32d33d6ceef0586882f5f29251c8 100644 --- a/src/fvOptions/include/createFvOptions.H +++ b/src/fvOptions/include/createFvOptions.H @@ -1,2 +1 @@ -Info<< "Creating finite volume options" << endl; fv::IOoptionList fvOptions(mesh); diff --git a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C index 070ce02518dd6f14cdff2e90d840969fdb80a45a..7896ae5dda5d69fe7467cf5d4388d82e19c51427 100644 --- a/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C +++ b/src/fvOptions/sources/derived/rotorDiskSource/rotorDiskSource.C @@ -92,7 +92,7 @@ void Foam::fv::rotorDiskSource::checkData() ( readScalar(coeffs_.lookup("inletNormalVelocity")) ); - inletVelocity_ = -coordSys_.e3()*UIn; + inletVelocity_ = -coordSys_.R().e3()*UIn; break; } case ifLocal: @@ -345,9 +345,9 @@ void Foam::fv::rotorDiskSource::createCoordinateSystem() << " - disk diameter = " << diameter << nl << " - disk area = " << sumArea << nl << " - origin = " << coordSys_.origin() << nl - << " - r-axis = " << coordSys_.e1() << nl - << " - psi-axis = " << coordSys_.e2() << nl - << " - z-axis = " << coordSys_.e3() << endl; + << " - r-axis = " << coordSys_.R().e1() << nl + << " - psi-axis = " << coordSys_.R().e2() << nl + << " - z-axis = " << coordSys_.R().e3() << endl; } diff --git a/src/fvOptions/sources/derived/rotorDiskSource/trimModel/targetCoeff/targetCoeffTrim.C b/src/fvOptions/sources/derived/rotorDiskSource/trimModel/targetCoeff/targetCoeffTrim.C index 8ee53bad24986f4e4d319d40c14b1c3ae6c267e2..4de719b1f60911aefba93f2f3537bff7979d4db1 100644 --- a/src/fvOptions/sources/derived/rotorDiskSource/trimModel/targetCoeff/targetCoeffTrim.C +++ b/src/fvOptions/sources/derived/rotorDiskSource/trimModel/targetCoeff/targetCoeffTrim.C @@ -59,9 +59,9 @@ Foam::vector Foam::targetCoeffTrim::calcCoeffs const List<point>& x = rotor_.x(); const vector& origin = rotor_.coordSys().origin(); - const vector& rollAxis = rotor_.coordSys().e1(); - const vector& pitchAxis = rotor_.coordSys().e2(); - const vector& yawAxis = rotor_.coordSys().e3(); + const vector& rollAxis = rotor_.coordSys().R().e1(); + const vector& pitchAxis = rotor_.coordSys().R().e2(); + const vector& yawAxis = rotor_.coordSys().R().e3(); scalar coeff1 = alpha_*sqr(rotor_.omega())*mathematical::pi; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index 29e696dc81a734dd6b14150203d9dc6ff6425bc1..7cf68d8d5be1d80a0730b5c2a44a4d475fd61826 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -471,7 +471,7 @@ public: inline scalar rotationalKineticEnergyOfSystem() const; //- Penetration for fraction [0-1] of the current total mass - inline scalar penetration(const scalar& fraction) const; + inline scalar penetration(const scalar fraction) const; //- Mean diameter Dij inline scalar Dij(const label i, const label j) const; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H index e1c4cf4198404f8601e7572acddc3105e91e7021..be67f1829268a8dd7519f182512d64179bcdca32 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -344,7 +344,7 @@ inline Foam::scalar Foam::KinematicCloud<CloudType>::Dmax() const template<class CloudType> inline Foam::scalar Foam::KinematicCloud<CloudType>::penetration ( - const scalar& fraction + const scalar fraction ) const { if ((fraction < 0) || (fraction > 1)) @@ -353,7 +353,7 @@ inline Foam::scalar Foam::KinematicCloud<CloudType>::penetration ( "inline Foam::scalar Foam::KinematicCloud<CloudType>::penetration" "(" - "const scalar&" + "const scalar" ") const" ) << "fraction should be in the range 0 < fraction < 1" diff --git a/src/lagrangian/spray/submodels/BreakupModel/PilchErdman/PilchErdman.C b/src/lagrangian/spray/submodels/BreakupModel/PilchErdman/PilchErdman.C index d900260410f2762bca73ed3d7c018ad1a844cdfa..2aca8ae5ad602142514d3aa82afea261a21adadf 100644 --- a/src/lagrangian/spray/submodels/BreakupModel/PilchErdman/PilchErdman.C +++ b/src/lagrangian/spray/submodels/BreakupModel/PilchErdman/PilchErdman.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -127,10 +127,10 @@ bool Foam::PilchErdman<CloudType>::update scalar rho12 = sqrt(rhoc/rho); - scalar Vd = Urmag*rho12*(B1_*taubBar * B2_*taubBar*taubBar); + scalar Vd = Urmag*rho12*(B1_*taubBar + B2_*taubBar*taubBar); scalar Vd1 = sqr(1.0 - Vd/Urmag); Vd1 = max(Vd1, SMALL); - scalar Ds = 2.0*Wec*sigma*Vd1/(Vd1*rhoc*sqr(Urmag)); + scalar Ds = 2.0*Wec*sigma/(Vd1*rhoc*sqr(Urmag)); scalar A = Urmag*rho12/d; scalar taub = taubBar/A; diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C index b224ef609d8ec8448bff2192dbda73517c1cc296..3eb051006f8f1b9c3fef79f2cc47f6ee1afe91a8 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C @@ -1464,15 +1464,7 @@ void Foam::autoLayerDriver::getPatchDisplacement // Determine pointNormal // ~~~~~~~~~~~~~~~~~~~~~ - pointField pointNormals - ( - PatchTools::pointNormals - ( - mesh, - pp, - pp.addressing() - ) - ); + pointField pointNormals(PatchTools::pointNormals(mesh, pp)); // Determine local length scale on patch diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C index bf25526141c8bc6043add647bdb8a4a8c1f60bf2..d6556a95083f401061c99db53c78fdc4f74b9f3e 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C @@ -826,15 +826,7 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo // Determine pointNormal // ~~~~~~~~~~~~~~~~~~~~~ - pointField pointNormals - ( - PatchTools::pointNormals - ( - mesh, - pp, - pp.addressing() - ) - ); + pointField pointNormals(PatchTools::pointNormals(mesh, pp)); // pointNormals if (debug&meshRefinement::MESH || debug&meshRefinement::LAYERINFO) @@ -1074,15 +1066,7 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo << featureAngle << " degrees." << endl; scalar featureAngleCos = Foam::cos(degToRad(featureAngle)); - pointField pointNormals - ( - PatchTools::pointNormals - ( - mesh, - pp, - identity(pp.size())+pp.start() - ) - ); + pointField pointNormals(PatchTools::pointNormals(mesh, pp)); forAll(meshPoints, i) { diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index 401d14a38367addbbc15e06a15be110ec0dcef80..dbed9146d33499774583e979eae88d8799650304 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -14,12 +14,13 @@ $(csys)/coordinateSystem.C $(csys)/coordinateSystemNew.C $(csys)/coordinateSystems.C $(csys)/cylindricalCS.C -$(csys)/sphericalCS.C -$(csys)/parabolicCylindricalCS.C -$(csys)/toroidalCS.C +$(csys)/cartesianCS.C +$(csys)/coordinateRotation/axesRotation.C $(csys)/coordinateRotation/coordinateRotation.C +$(csys)/coordinateRotation/coordinateRotationNew.C $(csys)/coordinateRotation/EulerCoordinateRotation.C $(csys)/coordinateRotation/STARCDCoordinateRotation.C +$(csys)/coordinateRotation/localAxesRotation.C edgeFaceCirculator/edgeFaceCirculator.C @@ -187,6 +188,9 @@ mappedPatches/mappedPolyPatch/mappedVariableThicknessWallPolyPatch.C mappedPatches/mappedPointPatch/mappedPointPatch.C mappedPatches/mappedPointPatch/mappedWallPointPatch.C +meshStructure/meshStructure.C +meshStructure/topoDistanceData.C +meshStructure/pointTopoDistanceData.C regionCoupled/patches/regionCoupledPolyPatch/regionCoupledBase.C regionCoupled/patches/regionCoupledPolyPatch/regionCoupledPolyPatch.C diff --git a/src/meshTools/coordinateSystems/cartesianCS.C b/src/meshTools/coordinateSystems/cartesianCS.C new file mode 100644 index 0000000000000000000000000000000000000000..b80a69f5b15f7ca23a5b9b9bdd2d043883b0578d --- /dev/null +++ b/src/meshTools/coordinateSystems/cartesianCS.C @@ -0,0 +1,162 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "cartesianCS.H" + +#include "one.H" +#include "mathematicalConstants.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(cartesianCS, 0); + addToRunTimeSelectionTable(coordinateSystem, cartesianCS, dictionary); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::cartesianCS::cartesianCS() +: + coordinateSystem() +{} + + +Foam::cartesianCS::cartesianCS +( + const coordinateSystem& cs +) +: + coordinateSystem(cs) +{} + + +Foam::cartesianCS::cartesianCS +( + const word& name, + const coordinateSystem& cs +) +: + coordinateSystem(name, cs) +{} + + +Foam::cartesianCS::cartesianCS +( + const word& name, + const point& origin, + const coordinateRotation& cr +) +: + coordinateSystem(name, origin, cr) +{} + + +Foam::cartesianCS::cartesianCS +( + const word& name, + const point& origin, + const vector& axis, + const vector& dirn +) +: + coordinateSystem(name, origin, axis, dirn) +{} + + +Foam::cartesianCS::cartesianCS +( + const word& name, + const dictionary& dict +) +: + coordinateSystem(name, dict) +{} + + +Foam::cartesianCS::cartesianCS +( + const objectRegistry& obr, + const dictionary& dict +) +: + coordinateSystem(obr, dict) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::cartesianCS::~cartesianCS() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + + +Foam::vector Foam::cartesianCS::localToGlobal +( + const vector& local, + bool translate +) const +{ + return coordinateSystem::localToGlobal(local, translate); +} + + +Foam::tmp<Foam::vectorField> Foam::cartesianCS::localToGlobal +( + const vectorField& local, + bool translate +) const +{ + return coordinateSystem::localToGlobal(local, translate); +} + + +Foam::vector Foam::cartesianCS::globalToLocal +( + const vector& global, + bool translate +) const +{ + return coordinateSystem::globalToLocal(global, translate); +} + + +Foam::tmp<Foam::vectorField> Foam::cartesianCS::globalToLocal +( + const vectorField& global, + bool translate +) const +{ + return coordinateSystem::globalToLocal(global, translate); +} + + + + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/sphericalCS.H b/src/meshTools/coordinateSystems/cartesianCS.H similarity index 76% rename from src/meshTools/coordinateSystems/sphericalCS.H rename to src/meshTools/coordinateSystems/cartesianCS.H index f8565bb76f206ead54343506e78674027354607e..cdfafc52e4b81e3185a900a09f195f07e9705255 100644 --- a/src/meshTools/coordinateSystems/sphericalCS.H +++ b/src/meshTools/coordinateSystems/cartesianCS.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,20 +22,21 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::sphericalCS + Foam::cartesianCS Description - Spherical coordinate system + Cylindrical coordinate system SourceFiles - sphericalCS.C + cartesianCS.C \*---------------------------------------------------------------------------*/ -#ifndef sphericalCS_H -#define sphericalCS_H +#ifndef cartesianCS_H +#define cartesianCS_H #include "coordinateSystem.H" +#include "typeInfo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -43,23 +44,18 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class sphericalCS Declaration + Class cartesianCS Declaration \*---------------------------------------------------------------------------*/ -class sphericalCS +class cartesianCS : public coordinateSystem { - // Private data members - - //- Are angles in degrees? (default = true) - bool inDegrees_; - - protected: // Protected Member Functions + //- Convert from local coordinate system to the global Cartesian system // with optional translation for the origin virtual vector localToGlobal(const vector&, bool translate) const; @@ -88,61 +84,58 @@ protected: public: //- Runtime type information - TypeName("spherical"); + TypeName("cartesian"); // Constructors //- Construct null - sphericalCS(const bool inDegrees=true); + cartesianCS(); //- Construct copy - sphericalCS + cartesianCS ( - const coordinateSystem&, - const bool inDegrees=true + const coordinateSystem& ); //- Construct copy with a different name - sphericalCS + cartesianCS ( const word& name, - const coordinateSystem&, - const bool inDegrees=true + const coordinateSystem& ); //- Construct from origin and rotation - sphericalCS + cartesianCS ( const word& name, const point& origin, - const coordinateRotation&, - const bool inDegrees=true + const coordinateRotation& ); //- Construct from origin and 2 axes - sphericalCS + cartesianCS ( const word& name, const point& origin, const vector& axis, - const vector& dirn, - const bool inDegrees=true + const vector& dirn ); //- Construct from dictionary - sphericalCS(const word& name, const dictionary&); + cartesianCS(const word&, const dictionary&); + + //- Construct from dictionary and objectRegistry + cartesianCS(const objectRegistry&, const dictionary&); - // Member Functions - //- Are angles in degrees? - bool inDegrees() const; + //- Destructor + virtual ~cartesianCS(); - //- Non-const access to inDegrees - bool& inDegrees(); }; + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.C index c79697eec9057e25f8af924880e5ef5833dcc80a..a21e24e607b7561dc974b5721fe3e1b014b4e678 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.C +++ b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,8 +39,134 @@ namespace Foam EulerCoordinateRotation, dictionary ); + addToRunTimeSelectionTable + ( + coordinateRotation, + EulerCoordinateRotation, + objectRegistry + ); +} + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::vector Foam::EulerCoordinateRotation::transform(const vector& st) const +{ + return (R_ & st); +} + + +Foam::vector Foam::EulerCoordinateRotation::invTransform +( + const vector& st +) const +{ + return (Rtr_ & st); +} + + +Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::transform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::EulerCoordinateRotation:: " + "transform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); +} + + +Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::invTransform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::EulerCoordinateRotation::" + "invTransform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); +} + + +const Foam::tensorField& Foam::EulerCoordinateRotation::Tr() const +{ + notImplemented + ( + "const tensorField& EulerCoordinateRotation::Tr() const" + ); + return *reinterpret_cast<const tensorField*>(0); +} + + +Foam::tmp<Foam::tensorField> Foam::EulerCoordinateRotation::transformTensor +( + const tensorField& st +) const +{ + notImplemented + ( + "const tensorField& EulerCoordinateRotation::transformTensor() const" + ); + return tmp<tensorField>(NULL); +} + + +Foam::tensor Foam::EulerCoordinateRotation::transformTensor +( + const tensor& st +) const +{ + return (R_ & st & Rtr_); +} + + +Foam::tmp<Foam::tensorField> Foam::EulerCoordinateRotation::transformTensor +( + const tensorField& st, + const labelList& cellMap +) const +{ + notImplemented + ( + "tmp<Foam::tensorField> EulerCoordinateRotation::transformTensor " + " const tensorField& st," + " const labelList& cellMap " + ") const" + ); + return tmp<tensorField>(NULL); +} + + +Foam::tmp<Foam::symmTensorField> Foam::EulerCoordinateRotation:: +transformVector +( + const vectorField& st +) const +{ + tmp<symmTensorField> tfld(new symmTensorField(st.size())); + symmTensorField& fld = tfld(); + + forAll(fld, i) + { + fld[i] = transformPrincipal(R_, st[i]); + } + return tfld; +} + + +Foam::symmTensor Foam::EulerCoordinateRotation::transformVector +( + const vector& st +) const +{ + return transformPrincipal(R_, st); } + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::EulerCoordinateRotation::calcTransform @@ -62,7 +188,7 @@ void Foam::EulerCoordinateRotation::calcTransform psi *= constant::mathematical::pi/180.0; } - tensor::operator= + R_ = ( tensor ( @@ -79,6 +205,8 @@ void Foam::EulerCoordinateRotation::calcTransform cos(theta) ) ); + + Rtr_ = R_.T(); } @@ -86,7 +214,8 @@ void Foam::EulerCoordinateRotation::calcTransform Foam::EulerCoordinateRotation::EulerCoordinateRotation() : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) {} @@ -96,7 +225,8 @@ Foam::EulerCoordinateRotation::EulerCoordinateRotation const bool inDegrees ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) { calcTransform ( @@ -116,7 +246,8 @@ Foam::EulerCoordinateRotation::EulerCoordinateRotation const bool inDegrees ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) { calcTransform(phiAngle, thetaAngle, psiAngle, inDegrees); } @@ -127,7 +258,29 @@ Foam::EulerCoordinateRotation::EulerCoordinateRotation const dictionary& dict ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) +{ + vector rotation(dict.lookup("rotation")); + + calcTransform + ( + rotation.component(vector::X), + rotation.component(vector::Y), + rotation.component(vector::Z), + dict.lookupOrDefault("degrees", true) + ); +} + + +Foam::EulerCoordinateRotation::EulerCoordinateRotation +( + const dictionary& dict, + const objectRegistry& +) +: + R_(sphericalTensor::I), + Rtr_(R_) { vector rotation(dict.lookup("rotation")); @@ -141,4 +294,11 @@ Foam::EulerCoordinateRotation::EulerCoordinateRotation } +void Foam::EulerCoordinateRotation::write(Ostream& os) const +{ + os.writeKeyword("e1") << e1() << token::END_STATEMENT << nl; + os.writeKeyword("e2") << e2() << token::END_STATEMENT << nl; + os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl; +} + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H index b8936975ea68b37393dd8193c963bc7ac68a1b2b..a0be41ccf247279e3c367b6620b0f8a319abe4fa 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H +++ b/src/meshTools/coordinateSystems/coordinateRotation/EulerCoordinateRotation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,6 +65,16 @@ class EulerCoordinateRotation : public coordinateRotation { + + // Private Member Data + + //- Local-to-global transformation tensor + tensor R_; + + //- Global-to-Local transformation tensor + tensor Rtr_; + + // Private Member Functions //- Calculate transformation tensor @@ -107,6 +117,93 @@ public: //- Construct from dictionary EulerCoordinateRotation(const dictionary&); + //- Construct from dictionary and mesh + EulerCoordinateRotation(const dictionary&, const objectRegistry&); + + + // Member Functions + + //- Reset rotation to an identity rotation + virtual void clear() + { + R_ = sphericalTensor::I; + Rtr_ = sphericalTensor::I; + } + + //- Return local-to-global transformation tensor + virtual const tensor& R() const + { + return R_; + } + + //- Return global-to-local transformation tensor + virtual const tensor& Rtr() const + { + return Rtr_; + }; + + //- Return local Cartesian x-axis + virtual const vector e1() const + { + return R_.x(); + } + + //- Return local Cartesian y-axis + virtual const vector e2() const + { + return R_.y(); + } + + //- Return local Cartesian z-axis + virtual const vector e3() const + { + return R_.z(); + } + + //- Return transformation tensor field + virtual const tensorField& Tr() const; + + //- Transform vectorField using transformation tensor field + virtual tmp<vectorField> transform(const vectorField& st) const; + + //- Transform vector using transformation tensor + virtual vector transform(const vector& st) const; + + //- Inverse transform vectorField using transformation tensor field + virtual tmp<vectorField> invTransform(const vectorField& st) const; + + //- Inverse transform vector using transformation tensor + virtual vector invTransform(const vector& st) const; + + //- Transform tensor field using transformation tensorField + virtual tmp<tensorField> transformTensor(const tensorField& st) const; + + //- Transform tensor using transformation tensorField + virtual tensor transformTensor(const tensor& st) const; + + //- Transform tensor sub-field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st, + const labelList& cellMap + ) const; + + //- Transform vectorField using transformation tensorField and return + // symmetrical tensorField + virtual tmp<symmTensorField> transformVector + ( + const vectorField& st + ) const; + + //- Transform vector using transformation tensor and return + // symmetrical tensor + virtual symmTensor transformVector(const vector& st) const; + + + // Write + + //- Write + virtual void write(Ostream&) const; }; diff --git a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C index ab2c77ae94324030823c86a6d61a3424111bd111..a8ba4651912828bc5007f953ee729de073521f1e 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C +++ b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,9 +39,134 @@ namespace Foam STARCDCoordinateRotation, dictionary ); + addToRunTimeSelectionTable + ( + coordinateRotation, + STARCDCoordinateRotation, + objectRegistry + ); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::vector Foam::STARCDCoordinateRotation::transform(const vector& st) const +{ + return (R_ & st); +} + + +Foam::vector Foam::STARCDCoordinateRotation::invTransform +( + const vector& st +) const +{ + return (Rtr_ & st); +} + + +Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::transform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::STARCDCoordinateRotation:: " + "transform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); } +Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::invTransform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::STARCDCoordinateRotation::" + "invTransform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); +} + + +const Foam::tensorField& Foam::STARCDCoordinateRotation::Tr() const +{ + notImplemented + ( + "const tensorField& STARCDCoordinateRotatio::Tr() const" + ); + return *reinterpret_cast<const tensorField*>(0); +} + + +Foam::tmp<Foam::tensorField> Foam::STARCDCoordinateRotation::transformTensor +( + const tensorField& st +) const +{ + notImplemented + ( + "tmp<Foam::tensorField> STARCDCoordinateRotation::transformTensor()" + ); + return tmp<tensorField>(NULL); +} + + +Foam::tensor Foam::STARCDCoordinateRotation::transformTensor +( + const tensor& st +) const +{ + return (R_ & st & Rtr_); +} + + +Foam::tmp<Foam::tensorField> Foam::STARCDCoordinateRotation::transformTensor +( + const tensorField& st, + const labelList& cellMap +) const +{ + notImplemented + ( + "tmp<Foam::tensorField> STARCDCoordinateRotation::transformTensor " + " const tensorField& st," + " const labelList& cellMap " + ") const" + ); + return tmp<tensorField>(NULL); +} + + +Foam::tmp<Foam::symmTensorField> Foam::STARCDCoordinateRotation:: +transformVector +( + const vectorField& st +) const +{ + tmp<symmTensorField> tfld(new symmTensorField(st.size())); + symmTensorField& fld = tfld(); + + forAll(fld, i) + { + fld[i] = transformPrincipal(R_, st[i]); + } + return tfld; +} + + +Foam::symmTensor Foam::STARCDCoordinateRotation::transformVector +( + const vector& st +) const +{ + return transformPrincipal(R_, st); +} + // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::STARCDCoordinateRotation::calcTransform @@ -63,7 +188,7 @@ void Foam::STARCDCoordinateRotation::calcTransform z *= constant::mathematical::pi/180.0; } - tensor::operator= + R_ = ( tensor ( @@ -80,6 +205,8 @@ void Foam::STARCDCoordinateRotation::calcTransform cos(x)*cos(y) ) ); + + Rtr_ = R_.T(); } @@ -87,7 +214,8 @@ void Foam::STARCDCoordinateRotation::calcTransform Foam::STARCDCoordinateRotation::STARCDCoordinateRotation() : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) {} @@ -97,7 +225,8 @@ Foam::STARCDCoordinateRotation::STARCDCoordinateRotation const bool inDegrees ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) { calcTransform ( @@ -117,7 +246,8 @@ Foam::STARCDCoordinateRotation::STARCDCoordinateRotation const bool inDegrees ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) { calcTransform(rotZ, rotX, rotY, inDegrees); } @@ -128,7 +258,8 @@ Foam::STARCDCoordinateRotation::STARCDCoordinateRotation const dictionary& dict ) : - coordinateRotation() + R_(sphericalTensor::I), + Rtr_(R_) { vector rotation(dict.lookup("rotation")); @@ -141,4 +272,30 @@ Foam::STARCDCoordinateRotation::STARCDCoordinateRotation ); } + +Foam::STARCDCoordinateRotation::STARCDCoordinateRotation +( + const dictionary& dict, + const objectRegistry& +) +{ + vector rotation(dict.lookup("rotation")); + + calcTransform + ( + rotation.component(vector::X), + rotation.component(vector::Y), + rotation.component(vector::Z), + dict.lookupOrDefault("degrees", true) + ); +} + + +void Foam::STARCDCoordinateRotation::write(Ostream& os) const +{ + os.writeKeyword("e1") << e1() << token::END_STATEMENT << nl; + os.writeKeyword("e2") << e2() << token::END_STATEMENT << nl; + os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl; +} + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H index f3286d80ffdeec06872348193b9e291606f01305..e034517c78d1d95a0855030737c9985c301a2c3d 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H +++ b/src/meshTools/coordinateSystems/coordinateRotation/STARCDCoordinateRotation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -62,6 +62,16 @@ class STARCDCoordinateRotation : public coordinateRotation { + + // Private Member Data + + //- Local-to-Global transformation tensor + tensor R_; + + //- Global-to-Local transformation tensor + tensor Rtr_; + + // Private Member Functions //- Calculate transformation tensor @@ -104,6 +114,92 @@ public: //- Construct from dictionary STARCDCoordinateRotation(const dictionary&); + //- Construct from dictionary and mesh + STARCDCoordinateRotation(const dictionary&, const objectRegistry&); + + // Member Functions + + //- Reset rotation to an identity rotation + virtual void clear() + { + R_ = sphericalTensor::I; + Rtr_ = sphericalTensor::I; + } + + //- Return local-to-global transformation tensor + virtual const tensor& R() const + { + return R_; + } + + //- Return global-to-local transformation tensor + virtual const tensor& Rtr() const + { + return Rtr_; + }; + + //- Return local Cartesian x-axis + virtual const vector e1() const + { + return R_.x(); + } + + //- Return local Cartesian y-axis + virtual const vector e2() const + { + return R_.y(); + } + + //- Return local Cartesian z-axis + virtual const vector e3() const + { + return R_.z(); + } + + //- Return transformation tensor field + virtual const tensorField& Tr() const; + + //- Transform vectorField using transformation tensor field + virtual tmp<vectorField> transform(const vectorField& st) const; + + //- Transform vector using transformation tensor + virtual vector transform(const vector& st) const; + + //- Inverse transform vectorField using transformation tensor field + virtual tmp<vectorField> invTransform(const vectorField& st) const; + + //- Inverse transform vector using transformation tensor + virtual vector invTransform(const vector& st) const; + + //- Transform tensor field using transformation tensorField + virtual tmp<tensorField> transformTensor(const tensorField& st) const; + + //- Transform tensor using transformation tensorField + virtual tensor transformTensor(const tensor& st) const; + + //- Transform tensor sub-field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st, + const labelList& cellMap + ) const; + + //- Transform vectorField using transformation tensorField and return + // symmetrical tensorField + virtual tmp<symmTensorField> transformVector + ( + const vectorField& st + ) const; + + //- Transform vector using transformation tensor and return + // symmetrical tensor + virtual symmTensor transformVector(const vector& st) const; + + + // Write + + //- Write + virtual void write(Ostream&) const; }; diff --git a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C new file mode 100644 index 0000000000000000000000000000000000000000..039e3fb2533849e36872836efe3c5d19d55a6de6 --- /dev/null +++ b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.C @@ -0,0 +1,324 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "axesRotation.H" +#include "dictionary.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(axesRotation, 0); + addToRunTimeSelectionTable(coordinateRotation, axesRotation, dictionary); + addToRunTimeSelectionTable + ( + coordinateRotation, + axesRotation, + objectRegistry + ); +} + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::axesRotation::calcTransform +( + const vector& axis1, + const vector& axis2, + const axisOrder& order +) +{ + vector a = axis1 / mag(axis1); + vector b = axis2; + + // Absorb minor nonorthogonality into axis2 + b = b - (b & a)*a; + + if (mag(b) < SMALL) + { + FatalErrorIn("axesRotation::calcTransform()") + << "axis1, axis2 appear co-linear: " + << axis1 << ", " << axis2 << endl + << abort(FatalError); + } + + b = b / mag(b); + vector c = a ^ b; + + tensor Rtr; + switch (order) + { + case e1e2: + Rtr = tensor(a, b, c); + break; + + case e2e3: + Rtr = tensor(c, a, b); + break; + + case e3e1: + Rtr = tensor(b, c, a); + break; + + default: + FatalErrorIn("axesRotation::calcTransform()") + << "programmer error" << endl + << abort(FatalError); + + Rtr = tensor::zero; + break; + } + + // the global -> local transformation + Rtr_ = Rtr; + // the local -> global transformation + R_ = Rtr.T(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::axesRotation::axesRotation() +: + R_(sphericalTensor::I), + Rtr_(R_) +{} + + +Foam::axesRotation::axesRotation +( + const vector& axis, + const vector& dir +) +: + R_(sphericalTensor::I), + Rtr_(R_) +{ + calcTransform(axis, dir, e3e1); +} + + +Foam::axesRotation::axesRotation +( + const dictionary& dict +) +: + R_(sphericalTensor::I), + Rtr_(R_) +{ + operator=(dict); +} + + +Foam::axesRotation::axesRotation +( + const dictionary& dict, + const objectRegistry& obr +) +: + R_(sphericalTensor::I), + Rtr_(R_) +{ + operator=(dict); +} + + +Foam::axesRotation::axesRotation(const tensor& R) +: + R_(R), + Rtr_(R_.T()) +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +Foam::vector Foam::axesRotation::transform(const vector& st) const +{ + return (R_ & st); +} + + +Foam::vector Foam::axesRotation::invTransform(const vector& st) const +{ + return (Rtr_ & st); +} + + +Foam::tmp<Foam::vectorField> Foam::axesRotation::transform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::axesRotation:: " + "transform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); +} + + +Foam::tmp<Foam::vectorField> Foam::axesRotation::invTransform +( + const vectorField& st +) const +{ + notImplemented + ( + "tmp<vectorField> Foam::axesRotation::" + "invTransform(const vectorField& st) const" + ); + return tmp<vectorField>(NULL); +} + + +const Foam::tensorField& Foam::axesRotation::Tr() const +{ + notImplemented + ( + "const Foam::tensorField& axesRotation::Tr() const" + ); + return *reinterpret_cast<const tensorField*>(0); +} + + +Foam::tmp<Foam::tensorField> Foam::axesRotation::transformTensor +( + const tensorField& st +) const +{ + notImplemented + ( + "const tensorField& axesRotation::transformTensor() const" + ); + return tmp<tensorField>(NULL); +} + + +Foam::tensor Foam::axesRotation::transformTensor +( + const tensor& st +) const +{ + return (R_ & st & Rtr_); +} + + +Foam::tmp<Foam::tensorField> Foam::axesRotation::transformTensor +( + const tensorField& st, + const labelList& cellMap +) const +{ + notImplemented + ( + "tmp<Foam::tensorField> axesRotation::transformTensor " + " const tensorField& st," + " const labelList& cellMap " + ") const" + ); + return tmp<tensorField>(NULL); +} + +Foam::tmp<Foam::symmTensorField> Foam::axesRotation::transformVector +( + const vectorField& st +) const +{ + tmp<symmTensorField> tfld(new symmTensorField(st.size())); + symmTensorField& fld = tfld(); + + forAll(fld, i) + { + fld[i] = transformPrincipal(R_, st[i]); + } + return tfld; +} + + +Foam::symmTensor Foam::axesRotation::transformVector +( + const vector& st +) const +{ + return transformPrincipal(R_, st); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +void Foam::axesRotation::operator=(const dictionary& dict) +{ + if (debug) + { + Pout<< "axesRotation::operator=(const dictionary&) : " + << "assign from " << dict << endl; + } + + vector axis1, axis2; + axisOrder order(e3e1); + + if (dict.readIfPresent("e1", axis1) && dict.readIfPresent("e2", axis2)) + { + order = e1e2; + } + else if (dict.readIfPresent("e2", axis1)&& dict.readIfPresent("e3", axis2)) + { + order = e2e3; + } + else if (dict.readIfPresent("e3", axis1)&& dict.readIfPresent("e1", axis2)) + { + order = e3e1; + } + else if (dict.found("axis") || dict.found("direction")) + { + // let it bomb if only one of axis/direction is defined + order = e3e1; + dict.lookup("axis") >> axis1; + dict.lookup("direction") >> axis2; + } + else + { + FatalErrorIn + ( + "axesRotation::operator=(const dictionary&) " + ) << "not entry of the type (e1, e2) or (e2, e3) or (e3, e1) " + << "found " + << exit(FatalError); + } + + calcTransform(axis1, axis2, order); +} + + +void Foam::axesRotation::write(Ostream& os) const +{ + os.writeKeyword("e1") << e1() << token::END_STATEMENT << nl; + os.writeKeyword("e2") << e2() << token::END_STATEMENT << nl; + os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl; +} + + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H new file mode 100644 index 0000000000000000000000000000000000000000..c755801091a80674712ce1ab20d5ad0c0e8a2a85 --- /dev/null +++ b/src/meshTools/coordinateSystems/coordinateRotation/axesRotation.H @@ -0,0 +1,229 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::axesRotation + +Description + A coordinate rotation specified using global axis + + The rotation is defined by a combination of vectors (e1/e2), (e2/e3) + or (e3/e1). Any nonorthogonality will be absorbed into the second vector. + + \verbatim + axesRotation + { + type axesRotation; + e1 (1 0 0); + e2 (0 1 0); + } + \endverbatim + +\*---------------------------------------------------------------------------*/ + +#ifndef axesRotation_H +#define axesRotation_H + +#include "vector.H" +#include "coordinateRotation.H" +#include "dictionary.H" +#include "runTimeSelectionTables.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class axesRotation Declaration +\*---------------------------------------------------------------------------*/ + +class axesRotation +: + public coordinateRotation +{ + // Private data + + //- Local-to-Global transformation tensor + tensor R_; + + //- Global-to-Local transformation tensor + tensor Rtr_; + + //- the combination of local axes to be used + enum axisOrder + { + e1e2, + e2e3, + e3e1 + }; + + // Private Member Functions + + //- Calculate transformation tensor + void calcTransform + ( + const vector& axis1, + const vector& axis2, + const axisOrder& order = e3e1 + ); + +public: + + //- Runtime type information + TypeName("axesRotation"); + + // Constructors + + //- Construct null + axesRotation(); + + //- Construct from 2 axes + axesRotation + ( + const vector& axis, + const vector& dir + ); + + //- Construct from dictionary + axesRotation(const dictionary&); + + //- Construct from components + axesRotation(const tensor& R); + + //- Construct from dictionary and mesh + axesRotation(const dictionary&, const objectRegistry&); + + //- Return clone + autoPtr<axesRotation> clone() const + { + return autoPtr<axesRotation>(new axesRotation(*this)); + } + + + //- Destructor + virtual ~axesRotation() + {} + + + // Member Functions + + //- Reset rotation to an identity rotation + virtual void clear() + { + R_ = sphericalTensor::I; + Rtr_ = sphericalTensor::I; + } + + //- Return local-to-global transformation tensor + virtual const tensor& R() const + { + return R_; + } + + //- Return global-to-local transformation tensor + virtual const tensor& Rtr() const + { + return Rtr_; + } + + //- Return local Cartesian x-axis + virtual const vector e1() const + { + return R_.x(); + } + + //- Return local Cartesian y-axis + virtual const vector e2() const + { + return R_.y(); + } + + //- Return local Cartesian z-axis + virtual const vector e3() const + { + return R_.z(); + } + + //- Return transformation tensor field + virtual const tensorField& Tr() const; + + //- Transform vectorField using transformation tensor field + virtual tmp<vectorField> transform(const vectorField& st) const; + + //- Transform vector using transformation tensor + virtual vector transform(const vector& st) const; + + //- Inverse transform vectorField using transformation tensor field + virtual tmp<vectorField> invTransform(const vectorField& st) const; + + //- Inverse transform vector using transformation tensor + virtual vector invTransform(const vector& st) const; + + //- Transform tensor field using transformation tensorField + virtual tmp<tensorField> transformTensor(const tensorField& st) const; + + //- Transform tensor using transformation tensorField + virtual tensor transformTensor(const tensor& st) const; + + //- Transform tensor sub-field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st, + const labelList& cellMap + ) const; + + //- Transform vectorField using transformation tensorField and return + // symmetrical tensorField + virtual tmp<symmTensorField> transformVector + ( + const vectorField& st + ) const; + + //- Transform vector using transformation tensor and return + // symmetrical tensor + virtual symmTensor transformVector(const vector& st) const; + + + // Member Operators + + //- assign from dictionary + void operator=(const dictionary&); + + + // Write + + //- Write + virtual void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.C index 4b34a42a8d51ee5e23413ba254e25642e715fb11..c9ac59b6093cc238c2aa273124f11783220d9a54 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.C +++ b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,197 +33,45 @@ namespace Foam { defineTypeNameAndDebug(coordinateRotation, 0); defineRunTimeSelectionTable(coordinateRotation, dictionary); + defineRunTimeSelectionTable(coordinateRotation, objectRegistry); } -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::coordinateRotation::calcTransform -( - const vector& axis1, - const vector& axis2, - const axisOrder& order -) -{ - vector a = axis1 / mag(axis1); - vector b = axis2; - - // Absorb minor nonorthogonality into axis2 - b = b - (b & a)*a; - - if (mag(b) < SMALL) - { - FatalErrorIn("coordinateRotation::calcTransform()") - << "axis1, axis2 appear co-linear: " - << axis1 << ", " << axis2 << endl - << abort(FatalError); - } - - b = b / mag(b); - vector c = a ^ b; - - // the global -> local transformation - tensor Rtr; - switch (order) - { - case e1e2: - Rtr = tensor(a, b, c); - break; - - case e2e3: - Rtr = tensor(c, a, b); - break; - - case e3e1: - Rtr = tensor(b, c, a); - break; - - default: - FatalErrorIn("coordinateRotation::calcTransform()") - << "programmer error" << endl - << abort(FatalError); - // To satisfy compiler warnings - Rtr = tensor::zero; - break; - } - - // the local -> global transformation - tensor::operator=( Rtr.T() ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::coordinateRotation::coordinateRotation() -: - tensor(sphericalTensor::I) -{} - - -Foam::coordinateRotation::coordinateRotation -( - const vector& axis, - const vector& dir -) -: - tensor(sphericalTensor::I) -{ - calcTransform(axis, dir, e3e1); -} - - -Foam::coordinateRotation::coordinateRotation -( - const dictionary& dict -) -: - tensor(sphericalTensor::I) -{ - operator=(dict); -} - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // -Foam::autoPtr<Foam::coordinateRotation> Foam::coordinateRotation::New +Foam::symmTensor Foam::coordinateRotation::transformPrincipal ( - const dictionary& dict -) + const tensor& tt, + const vector& st +) const { - if (debug) - { - Pout<< "coordinateRotation::New(const dictionary&) : " - << "constructing coordinateRotation" - << endl; - } - - // default type is self (alias: "axes") - word rotType(typeName_()); - dict.readIfPresent("type", rotType); - - // can (must) construct base class directly - if (rotType == typeName_() || rotType == "axes") - { - return autoPtr<coordinateRotation>(new coordinateRotation(dict)); - } - - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(rotType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalIOErrorIn - ( - "coordinateRotation::New(const dictionary&)", - dict - ) << "Unknown coordinateRotation type " - << rotType << nl << nl - << "Valid coordinateRotation types are :" << nl - << "[default: axes " << typeName_() << "]" - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalIOError); - } - - return autoPtr<coordinateRotation>(cstrIter()(dict)); -} + return symmTensor + ( + tt.xx()*st.x()*tt.xx() + + tt.xy()*st.y()*tt.xy() + + tt.xz()*st.z()*tt.xz(), + tt.xx()*st.x()*tt.yx() + + tt.xy()*st.y()*tt.yy() + + tt.xz()*st.z()*tt.yz(), -// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // - -void Foam::coordinateRotation::clear() -{ - this->tensor::operator=(sphericalTensor::I); -} + tt.xx()*st.x()*tt.zx() + + tt.xy()*st.y()*tt.zy() + + tt.xz()*st.z()*tt.zz(), + tt.yx()*st.x()*tt.yx() + + tt.yy()*st.y()*tt.yy() + + tt.yz()*st.z()*tt.yz(), -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + tt.yx()*st.x()*tt.zx() + + tt.yy()*st.y()*tt.zy() + + tt.yz()*st.z()*tt.zz(), -void Foam::coordinateRotation::operator=(const dictionary& rhs) -{ - if (debug) - { - Pout<< "coordinateRotation::operator=(const dictionary&) : " - << "assign from " << rhs << endl; - } - - // allow as embedded sub-dictionary "coordinateRotation" - const dictionary& dict = - ( - rhs.found(typeName_()) - ? rhs.subDict(typeName_()) - : rhs + tt.zx()*st.x()*tt.zx() + + tt.zy()*st.y()*tt.zy() + + tt.zz()*st.z()*tt.zz() ); - vector axis1, axis2; - axisOrder order(e3e1); - - if (dict.readIfPresent("e1", axis1) && dict.readIfPresent("e2", axis2)) - { - order = e1e2; - } - else if (dict.readIfPresent("e2", axis1) && dict.readIfPresent("e3", axis2)) - { - order = e2e3; - } - else if (dict.readIfPresent("e3", axis1) && dict.readIfPresent("e1", axis2)) - { - order = e3e1; - } - else if (dict.found("axis") || dict.found("direction")) - { - // let it bomb if only one of axis/direction is defined - order = e3e1; - dict.lookup("axis") >> axis1; - dict.lookup("direction") >> axis2; - } - else - { - // unspecified axes revert to the global system - tensor::operator=(sphericalTensor::I); - return; - } - - calcTransform(axis1, axis2, order); } - // ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H index 4c58e99c398caa4213d813e231bab952941268f2..7564696c3d02b44e59dbeee518e44d568167f5e3 100644 --- a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H +++ b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotation.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,46 +25,24 @@ Class Foam::coordinateRotation Description - A coordinate rotation specified per local axes and the base class for - other rotation specifications - - The rotation is defined by a combination of local vectors (e1/e2), (e2/e3) - or (e3/e1). Any nonorthogonality will be absorbed into the second vector. - - For convenience, the dictionary constructor forms allow a few shortcuts: - - if the \c type is not otherwise specified, the type \c axes - is implicit - - if an axes specification (eg, e3/e1) is used, the coordinateRotation - sub-dictionary can be dropped. - - Specifying the rotation by an EulerCoordinateRotation - (type "EulerRotation") or by a STARCDCoordinateRotation - (type "STARCDRotation") requires the coordinateRotation sub-dictionary. + Abstract base class for coordinate rotation \verbatim coordinateRotation { - type STARCDRotation - rotation (0 0 90); + type axesRotation + e1 (1 0 0); + e2 (0 1 0); } \endverbatim - - the rotation angles are in degrees, unless otherwise explictly specified: + Types of coordinateRotation: + 1) axesRotation + 2) STARCDRotation + 3) localAxesRotation + 4) EulerCoordinateRotation - \verbatim - coordinateRotation - { - type STARCDRotation - degrees false; - rotation (0 0 3.141592654); - } - \endverbatim -Deprecated - Specifying the local vectors as an \c axis (corresponding to e3) and a - \c direction (corresponding to e1), is allowed for backwards - compatibility, but this terminology is generally a bit confusing. - (deprecated Apr 2008) \*---------------------------------------------------------------------------*/ @@ -73,8 +51,10 @@ Deprecated #include "vector.H" #include "tensor.H" +#include "tensorField.H" #include "dictionary.H" #include "runTimeSelectionTables.H" +#include "objectRegistry.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -86,72 +66,59 @@ namespace Foam \*---------------------------------------------------------------------------*/ class coordinateRotation -: - public tensor { - // Private data +protected: - //- the combination of local axes to be used - enum axisOrder - { - e1e2, - e2e3, - e3e1 - }; + // Protected member functions - // Private Member Functions + //- Transform principal + symmTensor transformPrincipal(const tensor&, const vector&) const; - //- Calculate transformation tensor - void calcTransform - ( - const vector& axis1, - const vector& axis2, - const axisOrder& order = e3e1 - ); public: + //- Runtime type information TypeName("coordinateRotation"); - // Constructors - //- Construct null - coordinateRotation(); - - //- Construct from 2 axes - coordinateRotation + // Declare run-time constructor selection table + // for constructors with dictionary and objectRegistry + declareRunTimeSelectionTable + ( + autoPtr, + coordinateRotation, + objectRegistry, ( - const vector& axis, - const vector& dir - ); - - //- Construct from dictionary - coordinateRotation(const dictionary&); + const dictionary& dict, const objectRegistry& obr + ), + (dict, obr) + ); - //- Return clone - autoPtr<coordinateRotation> clone() const - { - return autoPtr<coordinateRotation>(new coordinateRotation(*this)); - } // Declare run-time constructor selection table - - declareRunTimeSelectionTable + // for constructors with dictionary + declareRunTimeSelectionTable + ( + autoPtr, + coordinateRotation, + dictionary, ( - autoPtr, - coordinateRotation, - dictionary, - ( - const dictionary& dict - ), - (dict) - ); + const dictionary& dict + ), + (dict) + ); // Selectors - //- Select constructed from Istream + //- Select constructed from dictionary and objectRegistry + static autoPtr<coordinateRotation> New + ( + const dictionary& dict, const objectRegistry& obr + ); + + //- Select constructed from dictionary static autoPtr<coordinateRotation> New ( const dictionary& dict @@ -166,37 +133,76 @@ public: // Member Functions //- Reset rotation to an identity rotation - virtual void clear(); + virtual void clear() = 0; //- Return local-to-global transformation tensor - const tensor& R() const - { - return (*this); - } + virtual const tensor& R() const = 0; + + //- Return global-to-local transformation tensor + virtual const tensor& Rtr() const = 0; //- Return local Cartesian x-axis - const vector e1() const - { - return tensor::T().x(); - } + virtual const vector e1() const = 0; //- Return local Cartesian y-axis - const vector e2() const - { - return tensor::T().y(); - } + virtual const vector e2() const = 0; //- Return local Cartesian z-axis - const vector e3() const + virtual const vector e3() const = 0; + + //- Return local-to-global transformation tensor + virtual const tensorField& Tr() const = 0; + + //- Return true if the rotation tensor is uniform + virtual bool uniform() const { - return tensor::T().z(); + return true; } + //- Transform vectorField using transformation tensor field + virtual tmp<vectorField> transform(const vectorField& st) const = 0; + + //- Transform vector using transformation tensor + virtual vector transform(const vector& st) const = 0; + + //- Inverse transform vectorField using transformation tensor field + virtual tmp<vectorField> invTransform(const vectorField& st) const = 0; + + //- Inverse transform vector using transformation tensor + virtual vector invTransform(const vector& st) const = 0; + + //- Transform tensor field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st + ) const = 0; + + //- Transform tensor sub-field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st, + const labelList& cellMap + ) const = 0; + + //- Transform tensor using transformation tensorField + virtual tensor transformTensor(const tensor& st) const = 0; + + //- Transform vectorField using transformation tensorField and return + // symmetrical tensorField + virtual tmp<symmTensorField> transformVector + ( + const vectorField& st + ) const = 0; + + //- Transform vector using transformation tensor and return + // symmetrical tensor + virtual symmTensor transformVector(const vector& st) const = 0; + - // Member Operators + // Write - //- assign from dictionary - void operator=(const dictionary&); + //- Write + virtual void write(Ostream&) const = 0; }; diff --git a/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotationNew.C b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotationNew.C new file mode 100644 index 0000000000000000000000000000000000000000..fe1a0ba00bda167a861f0fbb519623da4c7d70d7 --- /dev/null +++ b/src/meshTools/coordinateSystems/coordinateRotation/coordinateRotationNew.C @@ -0,0 +1,107 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "coordinateRotation.H" +#include "objectRegistry.H" + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +Foam::autoPtr<Foam::coordinateRotation> Foam::coordinateRotation::New +( + const dictionary& dict, const objectRegistry& obr +) +{ + if (debug) + { + Pout<< "coordinateRotation::New(const dictionary&) : " + << "constructing coordinateRotation" + << endl; + } + + word rotType = dict.lookup("type"); + + objectRegistryConstructorTable::iterator cstrIter = + objectRegistryConstructorTablePtr_->find(rotType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalIOErrorIn + ( + "coordinateRotation::New" + "(" + " const dictionary&, " + " const objectRegistry& " + ")", + dict + ) << "Unknown coordinateRotation type " + << rotType << nl << nl + << "Valid coordinateRotation types are :" << nl + << "[default: axes ]" + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalIOError); + } + + return autoPtr<coordinateRotation>(cstrIter()(dict, obr)); +} + + +Foam::autoPtr<Foam::coordinateRotation> Foam::coordinateRotation::New +( + const dictionary& dict +) +{ + if (debug) + { + Pout<< "coordinateRotation::New(const dictionary&) : " + << "constructing coordinateRotation" + << endl; + } + + word rotType = dict.lookup("type"); + + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(rotType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalIOErrorIn + ( + "coordinateRotation::New" + "(" + " const dictionary&, " + ")", + dict + ) << "Unknown coordinateRotation type " + << rotType << nl << nl + << "Valid coordinateRotation types are :" << nl + << "[default: axes ]" + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalIOError); + } + + return autoPtr<coordinateRotation>(cstrIter()(dict)); +} + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C new file mode 100644 index 0000000000000000000000000000000000000000..305601f11693f75b68f473c0daa6c3a50bb26fbe --- /dev/null +++ b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.C @@ -0,0 +1,267 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "localAxesRotation.H" +#include "axesRotation.H" +#include "addToRunTimeSelectionTable.H" +#include "polyMesh.H" +#include "tensorIOField.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(localAxesRotation, 0); + addToRunTimeSelectionTable + ( + coordinateRotation, + localAxesRotation, + dictionary + ); + addToRunTimeSelectionTable + ( + coordinateRotation, + localAxesRotation, + objectRegistry + ); +} + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::localAxesRotation::localAxesRotation +( + const dictionary& dict, const objectRegistry& orb +) +: + Rptr_(), + origin_(point::zero), + e3_(vector::zero) +{ + // If origin is specified in the coordinateSystem + if (dict.parent().found("origin")) + { + dict.parent().lookup("origin") >> origin_; + } + + // rotation axis + dict.lookup("e3") >> e3_; + + const polyMesh& mesh = refCast<const polyMesh>(orb); + + Rptr_.reset + ( + new tensorField(mesh.nCells()) + ); + init(dict, orb); +} + + +Foam::localAxesRotation::localAxesRotation +( + const dictionary& dict +) +: + Rptr_(), + origin_(), + e3_() +{ + FatalErrorIn("localAxesRotation(const dictionary&)") + << " localAxesRotation can not be contructed from dictionary " + << " use the construtctor : " + "(" + " const dictionary& dict, const objectRegistry& orb" + ")" + << exit(FatalIOError); +} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +void Foam::localAxesRotation::clear() +{ + if (!Rptr_.empty()) + { + Rptr_.clear(); + } +} + + +Foam::vector Foam::localAxesRotation::transform(const vector& st) const +{ + notImplemented + ( + "vector Foam::localAxesRotation::transform(const vector&) const" + ); + return vector::zero; +} + + +Foam::vector Foam::localAxesRotation::invTransform(const vector& st) const +{ + notImplemented + ( + "vector Foam::localAxesRotation::invTransform(const vector&) const" + ); + return vector::zero; +} + + +Foam::tmp<Foam::vectorField> Foam::localAxesRotation::transform +( + const vectorField& st +) const +{ + if (Rptr_->size() != st.size()) + { + FatalErrorIn("localAxesRotation::transform(const vectorField&)") + << "vectorField st has different size to tensorField " + << abort(FatalError); + } + + return (Rptr_() & st); +} + + +Foam::tmp<Foam::vectorField> Foam::localAxesRotation::invTransform +( + const vectorField& st +) const +{ + return (Rptr_().T() & st); +} + + +Foam::tmp<Foam::tensorField> Foam::localAxesRotation::transformTensor +( + const tensorField& st +) const +{ + if (Rptr_->size() != st.size()) + { + FatalErrorIn("localAxesRotation::transformTensor(const tensorField&)") + << "tensorField st has different size to tensorField Tr" + << abort(FatalError); + } + return (Rptr_() & st & Rptr_().T()); +} + + +Foam::tensor Foam::localAxesRotation::transformTensor +( + const tensor& st +) const +{ + notImplemented("tensor localAxesRotation::transformTensor() const"); + return tensor::zero; +} + + +Foam::tmp<Foam::tensorField> Foam::localAxesRotation::transformTensor +( + const tensorField& st, + const labelList& cellMap +) const +{ + if (cellMap.size() != st.size()) + { + FatalErrorIn("localAxesRotation::transformTensor(const tensorField&)") + << "tensorField st has different size to tensorField Tr" + << abort(FatalError); + } + + const tensorField Rtr(Rptr_().T()); + tmp<tensorField> tt(new tensorField(cellMap.size())); + tensorField& t = tt(); + forAll(cellMap, i) + { + const label cellI = cellMap[i]; + t[i] = Rptr_()[cellI] & st[i] & Rtr[cellI]; + } + return tt; +} + + +Foam::tmp<Foam::symmTensorField> Foam::localAxesRotation::transformVector +( + const vectorField& st +) const +{ + if (Rptr_->size() != st.size()) + { + FatalErrorIn("localAxesRotation::transformVector(const vectorField&)") + << "tensorField st has different size to tensorField Tr" + << abort(FatalError); + } + + tmp<symmTensorField> tfld(new symmTensorField(Rptr_->size())); + symmTensorField& fld = tfld(); + + forAll(fld, i) + { + fld[i] = transformPrincipal(Rptr_()[i], st[i]); + } + return tfld; +} + + +Foam::symmTensor Foam::localAxesRotation::transformVector +( + const vector& st +) const +{ + notImplemented + ( + "tensor localAxesRotation::transformVector(const vector&) const" + ); + return symmTensor::zero; +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +void Foam::localAxesRotation::init +( + const dictionary& dict, + const objectRegistry& obr +) +{ + const polyMesh& mesh = refCast<const polyMesh>(obr); + forAll(mesh.cellCentres(), cellI) + { + vector dir = mesh.cellCentres()[cellI] - origin_; + dir /= mag(dir) + VSMALL; + + Rptr_()[cellI] = axesRotation(e3_, dir).R(); + } +} + + +void Foam::localAxesRotation::write(Ostream& os) const +{ + os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl; +} + + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H new file mode 100644 index 0000000000000000000000000000000000000000..8d335a625d3cfc00fec6c978a87ceebeed0f5f91 --- /dev/null +++ b/src/meshTools/coordinateSystems/coordinateRotation/localAxesRotation.H @@ -0,0 +1,209 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::localAxesRotation + +Description + A local coordinate rotation. + Each rotational tensor is defined with two vectors (dir and e3) + where dir = cellC - origin and e3 is the rotation axis. + Per each cell an axesRotation type of rotation is created + + \verbatim + localAxesRotation + { + type localAxes; + e3 (0 0 1); + } + \endverbatim + +\*---------------------------------------------------------------------------*/ + +#ifndef localAxesRotation_H +#define localAxesRotation_H + +#include "point.H" +#include "vector.H" +#include "coordinateRotation.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class localAxesRotation Declaration +\*---------------------------------------------------------------------------*/ + +class localAxesRotation +: + public coordinateRotation +{ + // Private data + + //- AutoPtr to transformation tensor + autoPtr<tensorField> Rptr_; + + //- Origin of the coordinate system + point origin_; + + //- Rotation axis + vector e3_; + + + // Private members + + //- Init transformation tensor + void init(const dictionary& dict, const objectRegistry& obr); + + +public: + + //- Runtime type information + TypeName("localAxesRotation"); + + // Constructors + + //- Construct from dictionary and objectRegistry + localAxesRotation(const dictionary&, const objectRegistry&); + + //- Construct from dictionary + localAxesRotation(const dictionary&); + + //- Return clone + autoPtr<localAxesRotation> clone() const + { + return autoPtr<localAxesRotation>(new localAxesRotation(*this)); + } + + + //- Destructor + virtual ~localAxesRotation() + {} + + + // Member Functions + + //- Reset rotation to an identity rotation + virtual void clear(); + + //- Return local-to-global transformation tensor + virtual const tensor& R() const + { + notImplemented("const tensor& localAxesRotation::R() const"); + return tensor::zero; + } + + //- Return global-to-local transformation tensor + virtual const tensor& Rtr() const + { + notImplemented("const tensor& localAxesRotation::Rtr() const"); + return tensor::zero; + } + + //- Return local Cartesian x-axis + virtual const vector e1() const + { + notImplemented("const tensor& localAxesRotation::e1() const"); + return vector::zero; + } + + //- Return local Cartesian y-axis + virtual const vector e2() const + { + notImplemented("const tensor& localAxesRotation::e2() const"); + return vector::zero; + } + + //- Return local Cartesian z-axis + virtual const vector e3() const + { + return e3_; + } + + virtual const tensorField& Tr() const + { + return Rptr_(); + } + + //- Transform vectorField using transformation tensor field + virtual tmp<vectorField> transform(const vectorField& st) const; + + //- Transform vector using transformation tensor + virtual vector transform(const vector& st) const; + + //- Inverse transform vectorField using transformation tensor field + virtual tmp<vectorField> invTransform(const vectorField& st) const; + + //- Inverse transform vector using transformation tensor + virtual vector invTransform(const vector& st) const; + + //- Return if the rotation is uniform + virtual bool uniform() const + { + return false; + } + + //- Transform tensor field using transformation tensorField + virtual tmp<tensorField> transformTensor(const tensorField& st) const; + + //- Transform tensor using transformation tensorField + virtual tensor transformTensor(const tensor& st) const; + + //- Transform tensor sub-field using transformation tensorField + virtual tmp<tensorField> transformTensor + ( + const tensorField& st, + const labelList& cellMap + ) const; + + //- Transform vectorField using transformation tensorField and return + // symmetrical tensorField + virtual tmp<symmTensorField> transformVector + ( + const vectorField& st + ) const; + + //- Transform vector using transformation tensor and return + // symmetrical tensor (R & st & R.T()) + virtual symmTensor transformVector(const vector& st) const; + + + // Write + + //- Write + virtual void write(Ostream&) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/coordinateSystem.C b/src/meshTools/coordinateSystems/coordinateSystem.C index a9153daa85dea9472d1a9197add3f2513e780a14..16e6983a40b752e9a35e94133e654a41e0b45b19 100644 --- a/src/meshTools/coordinateSystems/coordinateSystem.C +++ b/src/meshTools/coordinateSystems/coordinateSystem.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "IOstream.H" +#include "axesRotation.H" #include "coordinateSystem.H" #include "coordinateSystems.H" #include "addToRunTimeSelectionTable.H" @@ -34,18 +35,16 @@ namespace Foam { defineTypeNameAndDebug(coordinateSystem, 0); defineRunTimeSelectionTable(coordinateSystem, dictionary); - defineRunTimeSelectionTable(coordinateSystem, origRotation); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::coordinateSystem::coordinateSystem() : - name_(type()), + name_(), note_(), origin_(point::zero), - R_(), - Rtr_(sphericalTensor::I) + R_(new axesRotation(sphericalTensor::I)) {} @@ -58,8 +57,7 @@ Foam::coordinateSystem::coordinateSystem name_(name), note_(), origin_(cs.origin_), - R_(cs.R_), - Rtr_(R_.T()) + R_(const_cast<coordinateRotation*>(&cs.R())) {} @@ -73,8 +71,7 @@ Foam::coordinateSystem::coordinateSystem name_(name), note_(), origin_(origin), - R_(cr), - Rtr_(R_.T()) + R_(const_cast<coordinateRotation*>(&cr)) {} @@ -89,8 +86,7 @@ Foam::coordinateSystem::coordinateSystem name_(name), note_(), origin_(origin), - R_(axis, dirn), - Rtr_(R_.T()) + R_(new axesRotation(axis, dirn)) {} @@ -103,37 +99,35 @@ Foam::coordinateSystem::coordinateSystem name_(name), note_(), origin_(point::zero), - R_(), - Rtr_(sphericalTensor::I) + R_() { - operator=(dict); + init(dict); } Foam::coordinateSystem::coordinateSystem(const dictionary& dict) : - name_(type()), + name_(), note_(), origin_(point::zero), - R_(), - Rtr_(sphericalTensor::I) + R_() { - operator=(dict); + init(dict); } Foam::coordinateSystem::coordinateSystem ( - const dictionary& dict, - const objectRegistry& obr + const objectRegistry& obr, + const dictionary& dict ) : - name_(type()), + name_(), note_(), origin_(point::zero), - R_(), - Rtr_(sphericalTensor::I) + R_() { + const entry* entryPtr = dict.lookupEntryPtr(typeName_(), false, false); // non-dictionary entry is a lookup into global coordinateSystems @@ -170,7 +164,7 @@ Foam::coordinateSystem::coordinateSystem } else { - operator=(dict); + init(dict, obr); } } @@ -180,11 +174,10 @@ Foam::coordinateSystem::coordinateSystem(Istream& is) name_(is), note_(), origin_(point::zero), - R_(), - Rtr_(sphericalTensor::I) + R_() { dictionary dict(is); - operator=(dict); + init(dict); } @@ -215,8 +208,8 @@ Foam::dictionary Foam::coordinateSystem::dict(bool ignoreType) const } dict.add("origin", origin_); - dict.add("e1", e1()); - dict.add("e3", e3()); + dict.add("e1", R_->e1()); + dict.add("e3", R_->e3()); return dict; } @@ -230,11 +223,11 @@ Foam::vector Foam::coordinateSystem::localToGlobal { if (translate) { - return (R_ & local) + origin_; + return (R_->transform(local)) + origin_; } else { - return (R_ & local); + return R_->transform(local); } } @@ -247,11 +240,11 @@ Foam::tmp<Foam::vectorField> Foam::coordinateSystem::localToGlobal { if (translate) { - return (R_ & local) + origin_; + return (R_->transform(local)) + origin_; } else { - return (R_ & local); + return R_->transform(local); } } @@ -264,11 +257,11 @@ Foam::vector Foam::coordinateSystem::globalToLocal { if (translate) { - return (Rtr_ & (global - origin_)); + return R_->invTransform(global - origin_); } else { - return (Rtr_ & global); + return R_->invTransform(global); } } @@ -281,11 +274,11 @@ Foam::tmp<Foam::vectorField> Foam::coordinateSystem::globalToLocal { if (translate) { - return (Rtr_ & (global - origin_)); + return R_->invTransform(global - origin_); } else { - return (Rtr_ & global); + return R_->invTransform(global); } } @@ -294,15 +287,14 @@ void Foam::coordinateSystem::clear() { note_.clear(); origin_ = point::zero; - R_.clear(); - Rtr_ = sphericalTensor::I; + R_->clear(); } void Foam::coordinateSystem::write(Ostream& os) const { - os << type() - << " origin: " << origin() << " e1: " << e1() << " e3: " << e3(); + os << type() << " origin: " << origin() << nl; + R_->write(os); } @@ -314,11 +306,8 @@ void Foam::coordinateSystem::writeDict(Ostream& os, bool subDict) const << indent << token::BEGIN_BLOCK << incrIndent << nl; } - // only write type for derived types - if (type() != typeName_()) - { - os.writeKeyword("type") << type() << token::END_STATEMENT << nl; - } + os.writeKeyword("type") << type() << token::END_STATEMENT << nl; + // The note entry is optional if (note_.size()) @@ -327,8 +316,7 @@ void Foam::coordinateSystem::writeDict(Ostream& os, bool subDict) const } os.writeKeyword("origin") << origin_ << token::END_STATEMENT << nl; - os.writeKeyword("e1") << e1() << token::END_STATEMENT << nl; - os.writeKeyword("e3") << e3() << token::END_STATEMENT << nl; + R_->write(os); if (subDict) { @@ -339,7 +327,20 @@ void Foam::coordinateSystem::writeDict(Ostream& os, bool subDict) const // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // -void Foam::coordinateSystem::operator=(const dictionary& rhs) +void Foam::coordinateSystem::init(const dictionary& rhs) +{ + rhs.lookup("origin") >> origin_; + note_.clear(); + rhs.readIfPresent("note", note_); + R_.reset(coordinateRotation::New(rhs.subDict("coordinateRotation")).ptr()); +} + + +void Foam::coordinateSystem::init +( + const dictionary& rhs, + const objectRegistry& obr +) { if (debug) { @@ -347,34 +348,16 @@ void Foam::coordinateSystem::operator=(const dictionary& rhs) << "assign from " << rhs << endl; } - // allow as embedded sub-dictionary "coordinateSystem" - const dictionary& dict = - ( - rhs.found(typeName_()) - ? rhs.subDict(typeName_()) - : rhs - ); - - // unspecified origin is (0 0 0) - origin_ = point::zero; - dict.readIfPresent("origin", origin_); + rhs.lookup("origin") >> origin_; // The note entry is optional note_.clear(); rhs.readIfPresent("note", note_); - // specify via coordinateRotation sub-dictionary - if (dict.found("coordinateRotation")) - { - R_ = coordinateRotation::New(dict.subDict("coordinateRotation"))(); - } - else - { - // let coordinateRotation constructor extract the axes specification - R_ = coordinateRotation(dict); - } - - Rtr_ = R_.T(); + R_.reset + ( + coordinateRotation::New(rhs.subDict("coordinateRotation"), obr).ptr() + ); } @@ -382,7 +365,12 @@ void Foam::coordinateSystem::operator=(const dictionary& rhs) bool Foam::operator!=(const coordinateSystem& a, const coordinateSystem& b) { - return (a.origin() != b.origin() || a.R() != b.R() || a.type() != b.type()); + return + ( + a.origin() != b.origin() + || a.R().R() != b.R().R() + || a.type() != b.type() + ); } diff --git a/src/meshTools/coordinateSystems/coordinateSystem.H b/src/meshTools/coordinateSystems/coordinateSystem.H index 5170b494b486c765d213a074ac1b583945612829..47847c8b48708eec2b1c9c8dd232ace32557453e 100644 --- a/src/meshTools/coordinateSystems/coordinateSystem.H +++ b/src/meshTools/coordinateSystems/coordinateSystem.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,18 +25,15 @@ Class Foam::coordinateSystem Description - A cartesian coordinate system and the base class for other coordinate + Base class for other coordinate system specifications. All systems are defined by an origin point and a coordinateRotation. - For convenience, the dictionary constructor forms allow a few shortcuts: - - the default origin corresponds to <em>(0 0 0)</em> - - if the \c type is not otherwise specified, a Cartesian coordinateSystem - is implicit \verbatim - flipped + coordinateSystem { + type cartesian; origin (0 0 0); coordinateRotation { @@ -46,79 +43,18 @@ Description } \endverbatim - - if an axes specification (eg, e3/e1) is used, the coordinateRotation - sub-dictionary can be dropped. - - \verbatim - flipped // the same, specified as axes - { - origin (0 0 0); - coordinateRotation - { - type axes; - e3 (1 0 0); - e1 (0 0 -1); - } - } - flipped // the same, using all the shortcuts - { - e3 (1 0 0); - e1 (0 0 -1); - } - \endverbatim - - - if a sub-dictionary coordinateSystem is found within the dictionary, it - will be used. This provides a convenient means of embedding - coordinateSystem information in another dictionary. - This is used, for example, in the porousZones: - - \verbatim - 1 - ( - cat1 - { - coordinateSystem - { - origin (0 0 0); - coordinateRotation - { - type STARCDRotation; - rotation (0 0 90); - } - } - porosity 0.781; - Darcy - { - d d [0 -2 0 0 0] (-1000 -1000 0.50753e+08); - f f [0 -1 0 0 0] (-1000 -1000 12.83); - } - } - ) - \endverbatim - - - additionally, if the coordinateSystem points to a plain entry, - it can be used to reference one of the global coordinateSystems + Types of coordinateRotation: + 1) axesRotation + 2) STARCDRotation + 3) localAxesRotation + 4) EulerCoordinateRotation - \verbatim - 1 - ( - cat1 - { - coordinateSystem system_10; - porosity 0.781; - Darcy - { - d d [0 -2 0 0 0] (-1000 -1000 0.50753e+08); - f f [0 -1 0 0 0] (-1000 -1000 12.83); - } - } - ) - \endverbatim - For this to work correctly, the coordinateSystem constructor must be - supplied with both a dictionary and an objectRegistry. + Type of coordinates: + 1) cartesian + 2) cylindricalCS See Also - coordinateSystems and coordinateSystems::New + coordinateSystem and coordinateSystem::New SourceFiles coordinateSystem.C @@ -136,6 +72,7 @@ SourceFiles #include "tmp.H" #include "coordinateRotation.H" #include "objectRegistry.H" +#include "autoPtr.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -151,19 +88,16 @@ class coordinateSystem // Private data //- Name of coordinate system - mutable word name_; + word name_; //- Optional note - mutable string note_; + string note_; //- Origin - mutable point origin_; + point origin_; //- Local-to-Global transformation tensor - coordinateRotation R_; - - //- Global-to-Local transformation tensor - tensor Rtr_; + autoPtr<coordinateRotation> R_; protected: @@ -194,6 +128,12 @@ protected: bool translate ) const; + //- Init from dict and obr + void init(const dictionary&); + + //- Init from dictionary + void init(const dictionary&, const objectRegistry&); + public: @@ -238,63 +178,47 @@ public: //- Construct from dictionary (default name) // With the ability to reference global coordinateSystems - coordinateSystem(const dictionary&, const objectRegistry&); + coordinateSystem(const objectRegistry&, const dictionary&); //- Construct from Istream // The Istream contains a word followed by a dictionary coordinateSystem(Istream&); - //- Return clone - autoPtr<coordinateSystem> clone() const - { - return autoPtr<coordinateSystem>(new coordinateSystem(*this)); - } + //- Return clone + autoPtr<coordinateSystem> clone() const + { + return autoPtr<coordinateSystem>(new coordinateSystem(*this)); + } - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - coordinateSystem, - dictionary, - ( - const word& name, - const dictionary& dict - ), - (name, dict) - ); - declareRunTimeSelectionTable + // Declare run-time constructor selection table + declareRunTimeSelectionTable + ( + autoPtr, + coordinateSystem, + dictionary, ( - autoPtr, - coordinateSystem, - origRotation, - ( - const word& name, - const point& origin, - const coordinateRotation& cr - ), - (name, origin, cr) - ); + const objectRegistry& obr, + const dictionary& dict + ), + (obr, dict) + ); // Selectors - //- Select constructed from dictionary + //- Select constructed from dictionary and objectRegistry static autoPtr<coordinateSystem> New ( - const word& name, - const dictionary& + const objectRegistry& obr, + const dictionary& dict ); - //- Select constructed from origin and rotation + //- Select constructed from dictionary static autoPtr<coordinateSystem> New ( - const word& coordType, - const word& name, - const point& origin, - const coordinateRotation& + const dictionary& dict ); //- Select constructed from Istream @@ -307,6 +231,7 @@ public: // Member Functions + // Access //- Return name @@ -333,49 +258,18 @@ public: return origin_; } - //- Return coordinate rotation - const coordinateRotation& rotation() const + //- Return const reference to coordinate rotation + const coordinateRotation& R() const { - return R_; + return R_(); } - //- Return local-to-global transformation tensor - const tensor& R() const + //- Return non const reference to coordinate rotation + coordinateRotation& R() { - return R_; + return R_(); } - //- Return local Cartesian x-axis - const vector e1() const - { - return Rtr_.x(); - } - - //- Return local Cartesian y-axis - const vector e2() const - { - return Rtr_.y(); - } - - //- Return local Cartesian z-axis - const vector e3() const - { - return Rtr_.z(); - } - - //- Return axis (e3: local Cartesian z-axis) - // \deprecated method e3 is preferred (deprecated Apr 2008) - const vector axis() const - { - return Rtr_.z(); - } - - //- Return direction (e1: local Cartesian x-axis) - // \deprecated method e1 is preferred (deprecated Apr 2008) - const vector direction() const - { - return Rtr_.x(); - } //- Return as dictionary of entries // \param [in] ignoreType drop type (cartesian, cylindrical, etc) @@ -386,7 +280,7 @@ public: // Edit //- Rename - virtual void rename(const word& newName) + void rename(const word& newName) { name_ = newName; } @@ -408,7 +302,7 @@ public: virtual void write(Ostream&) const; //- Write dictionary - virtual void writeDict(Ostream&, bool subDict=true) const; + void writeDict(Ostream&, bool subDict=true) const; // Transformations @@ -472,22 +366,18 @@ public: // Member Operators - //- assign from dictionary - void operator=(const dictionary&); - - - // friend Operators + // friend Operators - friend bool operator!= - ( - const coordinateSystem&, - const coordinateSystem& - ); + friend bool operator!= + ( + const coordinateSystem&, + const coordinateSystem& + ); - // IOstream Operators + // IOstream Operators - friend Ostream& operator<<(Ostream&, const coordinateSystem&); + friend Ostream& operator<<(Ostream&, const coordinateSystem&); }; diff --git a/src/meshTools/coordinateSystems/coordinateSystemNew.C b/src/meshTools/coordinateSystems/coordinateSystemNew.C index 60c4e8482d78daedc5916a7229dce3148b78a80a..5b2e15dd13ddf1a58d680e9aa020f6bc06677b9a 100644 --- a/src/meshTools/coordinateSystems/coordinateSystemNew.C +++ b/src/meshTools/coordinateSystems/coordinateSystemNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,7 +30,7 @@ License Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New ( - const word& name, + const objectRegistry& obr, const dictionary& dict ) { @@ -41,17 +41,8 @@ Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New << endl; } - // construct base class directly, also allow 'cartesian' as an alias - word coordType(typeName_()); - if - ( - !dict.readIfPresent("type", coordType) - || coordType == typeName_() - || coordType == "cartesian" - ) - { - return autoPtr<coordinateSystem>(new coordinateSystem(name, dict)); - } + const dictionary& coordDict = dict.subDict(typeName_()); + word coordType = coordDict.lookup("type"); dictionaryConstructorTable::iterator cstrIter = dictionaryConstructorTablePtr_->find(coordType); @@ -60,20 +51,54 @@ Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New { FatalIOErrorIn ( - "coordinateSystem::New(const word&, const dictionary&)", + "coordinateSystem::New(const objectRegistry&, const dictionary&)", dict ) << "Unknown coordinateSystem type " << coordType << nl << nl << "Valid coordinateSystem types are :" << nl - << "[default: " << typeName_() << "]" << dictionaryConstructorTablePtr_->sortedToc() << exit(FatalIOError); } - return autoPtr<coordinateSystem>(cstrIter()(name, dict)); + return autoPtr<coordinateSystem>(cstrIter()(obr, coordDict)); } +Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New +( + const dictionary& dict +) +{ + if (debug) + { + Pout<< "coordinateSystem::New(cconst dictionary&) : " + << "constructing coordinateSystem" + << endl; + } + + const dictionary& coordDict = dict.subDict(typeName_()); + word coordType = coordDict.lookup("type"); +/* + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(coordType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalIOErrorIn + ( + "coordinateSystem::New(const dictionary&)", + dict + ) << "Unknown coordinateSystem type " + << coordType << nl << nl + << "Valid coordinateSystem types are :" << nl + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalIOError); + } +*/ + return autoPtr<coordinateSystem>(new coordinateSystem(coordDict)); +} + +/* Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New ( const word& coordType, @@ -109,7 +134,7 @@ Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New return autoPtr<coordinateSystem>(cstrIter()(name, origin, cr)); } - +*/ Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New ( @@ -119,7 +144,26 @@ Foam::autoPtr<Foam::coordinateSystem> Foam::coordinateSystem::New const word name(is); const dictionary dict(is); - return New(name, dict); + word coordType = dict.lookup("type"); +/* + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(coordType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalIOErrorIn + ( + "coordinateSystem::New(Istream& is)", + dict + ) << "Unknown coordinateSystem type " + << coordType << nl << nl + << "Valid coordinateSystem types are :" << nl + << "[default: " << typeName_() << "]" + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalIOError); + } +*/ + return autoPtr<coordinateSystem>(new coordinateSystem(name, dict)); } diff --git a/src/meshTools/coordinateSystems/coordinateSystems.H b/src/meshTools/coordinateSystems/coordinateSystems.H index c509eab4ed1ce5fcc5d000c3b22fa614059f1f4b..c85cf48b45f6865dc81ac1da9c75a76a71a8f1b8 100644 --- a/src/meshTools/coordinateSystems/coordinateSystems.H +++ b/src/meshTools/coordinateSystems/coordinateSystems.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,25 @@ Note Mixing normal constructors and the coordinateSystems::New constructor may yield unexpected results. + \verbatim + 1 + ( + cat1 + { + coordinateSystem system_10; + porosity 0.781; + Darcy + { + d d [0 -2 0 0 0] (-1000 -1000 0.50753e+08); + f f [0 -1 0 0 0] (-1000 -1000 12.83); + } + } + ) + \endverbatim + + For this to work correctly, the coordinateSystem constructor must be + supplied with both a dictionary and an objectRegistry. + SourceFiles coordinateSystems.C diff --git a/src/meshTools/coordinateSystems/cylindricalCS.C b/src/meshTools/coordinateSystems/cylindricalCS.C index a5055046072690bdb2cc0b8238fd144a2fdcd55a..08a8a37aeb0c5cbaccc7aae4645fdcc926dbf692 100644 --- a/src/meshTools/coordinateSystems/cylindricalCS.C +++ b/src/meshTools/coordinateSystems/cylindricalCS.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,6 @@ namespace Foam { defineTypeNameAndDebug(cylindricalCS, 0); addToRunTimeSelectionTable(coordinateSystem, cylindricalCS, dictionary); - addToRunTimeSelectionTable(coordinateSystem, cylindricalCS, origRotation); } @@ -109,6 +108,23 @@ Foam::cylindricalCS::cylindricalCS {} +Foam::cylindricalCS::cylindricalCS +( + const objectRegistry& obr, + const dictionary& dict +) +: + coordinateSystem(obr, dict), + inDegrees_(dict.lookupOrDefault("degrees", true)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::cylindricalCS::~cylindricalCS() +{} + + // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // bool Foam::cylindricalCS::inDegrees() const diff --git a/src/meshTools/coordinateSystems/cylindricalCS.H b/src/meshTools/coordinateSystems/cylindricalCS.H index 0cc70efcb5652ba64a99fb4ca3ab624da4c7dfdf..fd537c29cd59ccdec62e2f33ad3940059177239e 100644 --- a/src/meshTools/coordinateSystems/cylindricalCS.H +++ b/src/meshTools/coordinateSystems/cylindricalCS.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -61,6 +61,7 @@ protected: // Protected Member Functions + //- Convert from local coordinate system to the global Cartesian system // with optional translation for the origin virtual vector localToGlobal(const vector&, bool translate) const; @@ -131,8 +132,15 @@ public: const bool inDegrees=true ); - //- Construct from dictionary - cylindricalCS(const word& name, const dictionary&); + //- Construct from dictionary and name + cylindricalCS(const word&, const dictionary&); + + //- Construct from dictionary and objectRegistry + cylindricalCS(const objectRegistry&, const dictionary&); + + + //- Destructor + virtual ~cylindricalCS(); // Member Functions diff --git a/src/meshTools/coordinateSystems/parabolicCylindricalCS.C b/src/meshTools/coordinateSystems/parabolicCylindricalCS.C deleted file mode 100644 index bf202bd39d161b295064bf8f537412d8f7325cb5..0000000000000000000000000000000000000000 --- a/src/meshTools/coordinateSystems/parabolicCylindricalCS.C +++ /dev/null @@ -1,177 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#include "parabolicCylindricalCS.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(parabolicCylindricalCS, 0); - addToRunTimeSelectionTable - ( - coordinateSystem, - parabolicCylindricalCS, - dictionary - ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::parabolicCylindricalCS::parabolicCylindricalCS() -: - coordinateSystem() -{} - - -Foam::parabolicCylindricalCS::parabolicCylindricalCS -( - const word& name, - const point& origin, - const coordinateRotation& cr -) -: - coordinateSystem(name, origin, cr) -{} - - -Foam::parabolicCylindricalCS::parabolicCylindricalCS -( - const word& name, - const dictionary& dict -) -: - coordinateSystem(name, dict) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::vector Foam::parabolicCylindricalCS::localToGlobal -( - const vector& local, - bool translate -) const -{ - // Notation: u = local.x() v = local.y() z = local.z(); - if (local.y() < 0.0) - { - FatalErrorIn - ( - "parabolicCylindricalCS::localToGlobal(const vector&, bool) const" - ) - << "parabolic cylindrical coordinates v < 0" - << abort(FatalError); - } - - return coordinateSystem::localToGlobal - ( - vector - ( - 0.5*(sqr(local.x()) - sqr(local.y())), - local.x()*local.y(), - local.z() - ), - translate - ); -} - - -Foam::tmp<Foam::vectorField> Foam::parabolicCylindricalCS::localToGlobal -( - const vectorField& local, - bool translate -) const -{ - if (min(local.component(vector::Y)) < 0.0) - { - FatalErrorIn - ( - "parabolicCylindricalCS::localToGlobal" - "(const vectorField&, bool) const" - ) << "parabolic cylindrical coordinates v < 0" - << abort(FatalError); - } - - vectorField lc(local.size()); - lc.replace - ( - vector::X, - 0.5* - ( - sqr(local.component(vector::X)) - - sqr(local.component(vector::Y)) - ) - ); - - lc.replace - ( - vector::Y, - local.component(vector::X) * local.component(vector::Y) - ); - - lc.replace - ( - vector::Z, - local.component(vector::Z) - ); - - return coordinateSystem::localToGlobal(lc, translate); -} - - -Foam::vector Foam::parabolicCylindricalCS::globalToLocal -( - const vector& global, - bool translate -) const -{ - notImplemented - ( - "parabolicCylindricalCS::globalToLocal(const vector&, bool) const" - ); - - return vector::zero; -} - - -Foam::tmp<Foam::vectorField> Foam::parabolicCylindricalCS::globalToLocal -( - const vectorField& global, - bool translate -) const -{ - notImplemented - ( - "parabolicCylindricalCS::globalToLocal(const vectorField&, bool) const" - ); - - return tmp<vectorField>(vectorField::null()); -} - - -// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/parabolicCylindricalCS.H b/src/meshTools/coordinateSystems/parabolicCylindricalCS.H deleted file mode 100644 index 9f09e9c2f4313250d1729187abb532808570d185..0000000000000000000000000000000000000000 --- a/src/meshTools/coordinateSystems/parabolicCylindricalCS.H +++ /dev/null @@ -1,120 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -Class - Foam::parabolicCylindricalCS - -Description - Parabolic cylindrical coordinate system. - - Notation: u = a.x() v = a.y() z = a.z(); - -Note - The maintenance of this class may lag that of the main types. - -SourceFiles - parabolicCylindricalCS.C - -\*---------------------------------------------------------------------------*/ - -#ifndef parabolicCylindricalCS_H -#define parabolicCylindricalCS_H - -#include "coordinateSystem.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class parabolicCylindricalCS Declaration -\*---------------------------------------------------------------------------*/ - -class parabolicCylindricalCS -: - public coordinateSystem -{ - -protected: - - // Protected Member Functions - - //- Convert from local coordinate system to the global Cartesian system - // with optional translation for the origin - virtual vector localToGlobal(const vector&, bool translate) const; - - //- Convert from local coordinate system to the global Cartesian system - // with optional translation for the origin - virtual tmp<vectorField> localToGlobal - ( - const vectorField&, - bool translate - ) const; - - //- Convert from global Cartesian system to the local coordinate system - // with optional translation for the origin - virtual vector globalToLocal(const vector&, bool translate) const; - - //- Convert from global Cartesian system to the local coordinate system - // with optional translation for the origin - virtual tmp<vectorField> globalToLocal - ( - const vectorField&, - bool translate - ) const; - - -public: - - //- Runtime type information - TypeName("parabolicCylindrical"); - - - // Constructors - - //- Construct null - parabolicCylindricalCS(); - - //- Construct from origin and rotation - parabolicCylindricalCS - ( - const word& name, - const point& origin, - const coordinateRotation& - ); - - //- Construct from dictionary - parabolicCylindricalCS(const word&, const dictionary&); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/sphericalCS.C b/src/meshTools/coordinateSystems/sphericalCS.C deleted file mode 100644 index f28c87c8c1ec0f49f78068e74e7bbedb8c78015a..0000000000000000000000000000000000000000 --- a/src/meshTools/coordinateSystems/sphericalCS.C +++ /dev/null @@ -1,244 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#include "sphericalCS.H" - -#include "one.H" -#include "mathematicalConstants.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(sphericalCS, 0); - addToRunTimeSelectionTable(coordinateSystem, sphericalCS, dictionary); - addToRunTimeSelectionTable(coordinateSystem, sphericalCS, origRotation); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::sphericalCS::sphericalCS(const bool inDegrees) -: - coordinateSystem(), - inDegrees_(inDegrees) -{} - - -Foam::sphericalCS::sphericalCS -( - const coordinateSystem& cs, - const bool inDegrees -) -: - coordinateSystem(cs), - inDegrees_(inDegrees) -{} - - -Foam::sphericalCS::sphericalCS -( - const word& name, - const coordinateSystem& cs, - const bool inDegrees -) -: - coordinateSystem(name, cs), - inDegrees_(inDegrees) -{} - - -Foam::sphericalCS::sphericalCS -( - const word& name, - const point& origin, - const coordinateRotation& cr, - const bool inDegrees -) -: - coordinateSystem(name, origin, cr), - inDegrees_(inDegrees) -{} - - -Foam::sphericalCS::sphericalCS -( - const word& name, - const point& origin, - const vector& axis, - const vector& dirn, - const bool inDegrees -) -: - coordinateSystem(name, origin, axis, dirn), - inDegrees_(inDegrees) -{} - - -Foam::sphericalCS::sphericalCS -( - const word& name, - const dictionary& dict -) -: - coordinateSystem(name, dict), - inDegrees_(dict.lookupOrDefault("degrees", true)) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -bool Foam::sphericalCS::inDegrees() const -{ - return inDegrees_; -} - - -bool& Foam::sphericalCS::inDegrees() -{ - return inDegrees_; -} - - -Foam::vector Foam::sphericalCS::localToGlobal -( - const vector& local, - bool translate -) const -{ - scalar r = local.x(); - const scalar theta - ( - local.y() - *(inDegrees_ ? constant::mathematical::pi/180.0 : 1.0) - ); - const scalar phi - ( - local.z() - *(inDegrees_ ? constant::mathematical::pi/180.0 : 1.0) - ); - - return coordinateSystem::localToGlobal - ( - vector(r*cos(theta)*sin(phi), r*sin(theta)*sin(phi), r*cos(phi)), - translate - ); -} - - -Foam::tmp<Foam::vectorField> Foam::sphericalCS::localToGlobal -( - const vectorField& local, - bool translate -) const -{ - const scalarField r(local.component(vector::X)); - const scalarField theta - ( - local.component(vector::Y) - *(inDegrees_ ? constant::mathematical::pi/180.0 : 1.0) - ); - const scalarField phi - ( - local.component(vector::Z) - *(inDegrees_ ? constant::mathematical::pi/180.0 : 1.0) - ); - - vectorField lc(local.size()); - lc.replace(vector::X, r*cos(theta)*sin(phi)); - lc.replace(vector::Y, r*sin(theta)*sin(phi)); - lc.replace(vector::Z, r*cos(phi)); - - return coordinateSystem::localToGlobal(lc, translate); -} - - -Foam::vector Foam::sphericalCS::globalToLocal -( - const vector& global, - bool translate -) const -{ - const vector lc = coordinateSystem::globalToLocal(global, translate); - const scalar r = mag(lc); - - return vector - ( - r, - atan2 - ( - lc.y(), lc.x() - )*(inDegrees_ ? 180.0/constant::mathematical::pi : 1.0), - acos - ( - lc.z()/(r + SMALL) - )*(inDegrees_ ? 180.0/constant::mathematical::pi : 1.0) - ); -} - - -Foam::tmp<Foam::vectorField> Foam::sphericalCS::globalToLocal -( - const vectorField& global, - bool translate -) const -{ - const vectorField lc(coordinateSystem::globalToLocal(global, translate)); - const scalarField r(mag(lc)); - - tmp<vectorField> tresult(new vectorField(lc.size())); - vectorField& result = tresult(); - - result.replace - ( - vector::X, r - - ); - - result.replace - ( - vector::Y, - atan2 - ( - lc.component(vector::Y), - lc.component(vector::X) - )*(inDegrees_ ? 180.0/constant::mathematical::pi : 1.0) - ); - - result.replace - ( - vector::Z, - acos - ( - lc.component(vector::Z)/(r + SMALL) - )*(inDegrees_ ? 180.0/constant::mathematical::pi : 1.0) - ); - - return tresult; -} - - -// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/toroidalCS.C b/src/meshTools/coordinateSystems/toroidalCS.C deleted file mode 100644 index d221b5e93c47532e7fb473c557458cf7ea93f67c..0000000000000000000000000000000000000000 --- a/src/meshTools/coordinateSystems/toroidalCS.C +++ /dev/null @@ -1,184 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -\*---------------------------------------------------------------------------*/ - -#include "toroidalCS.H" -#include "addToRunTimeSelectionTable.H" -#include "unitConversion.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(toroidalCS, 0); - addToRunTimeSelectionTable(coordinateSystem, toroidalCS, dictionary); -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - - -Foam::toroidalCS::toroidalCS -( - const word& name, - const point& origin, - const coordinateRotation& cr, - const scalar radius -) -: - coordinateSystem(name, origin, cr), - radius_(radius) -{} - - -Foam::toroidalCS::toroidalCS -( - const word& name, - const dictionary& dict -) -: - coordinateSystem(name, dict), - radius_(readScalar(dict.lookup("radius"))) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -Foam::vector Foam::toroidalCS::localToGlobal -( - const vector& local, - bool translate -) const -{ - // Notation: r = local.x() - scalar theta = degToRad(local.y()); - scalar phi = degToRad(local.z()); - - scalar rprime = radius_ + local.x()*sin(phi); - - if ((local.x()*sin(phi)) > (radius_)) - { - FatalErrorIn("toroidalCS::toGlobal(vector) const") - << "Badly defined toroidal coordinates" - << abort(FatalError); - } - - return coordinateSystem::localToGlobal - ( - vector(rprime*cos(theta), rprime*sin(theta), local.x()*cos(phi)), - translate - ); -} - - -Foam::tmp<Foam::vectorField> Foam::toroidalCS::localToGlobal -( - const vectorField& local, - bool translate -) const -{ - const scalarField r - ( - local.component(vector::X) - ); - - const scalarField theta - ( - local.component(vector::Y)*constant::mathematical::pi/180.0 - ); - - const scalarField phi - ( - local.component(vector::Z)*constant::mathematical::pi/180.0 - ); - - const scalarField rprime - ( - radius_ + r*sin(phi) - ); - - vectorField lc(local.size()); - lc.replace(vector::X, rprime*cos(theta)); - lc.replace(vector::Y, rprime*sin(theta)); - lc.replace(vector::Z, r*cos(phi)); - - return coordinateSystem::localToGlobal(lc, translate); -} - - -Foam::vector Foam::toroidalCS::globalToLocal -( - const vector& global, - bool translate -) const -{ - notImplemented - ( - "toroidalCS::globalToLocal(const vector&, bool) const" - ); - - return vector::zero; -} - - -Foam::tmp<Foam::vectorField> Foam::toroidalCS::globalToLocal -( - const vectorField& global, - bool translate -) const -{ - notImplemented - ( - "toroidalCS::globalToLocal(const vectorField&, bool) const" - ); - - return tmp<vectorField>(vectorField::null()); -} - - -void Foam::toroidalCS::write(Ostream& os) const -{ - coordinateSystem::write(os); - os << "radius: " << radius() << endl; -} - - -void Foam::toroidalCS::writeDict(Ostream& os, bool subDict) const -{ - if (subDict) - { - os << indent << name() << nl - << indent << token::BEGIN_BLOCK << incrIndent << nl; - } - - coordinateSystem::writeDict(os, false); - os.writeKeyword("radius") << radius() << token::END_STATEMENT << nl; - - if (subDict) - { - os << decrIndent << indent << token::END_BLOCK << endl; - } -} - - -// ************************************************************************* // diff --git a/src/meshTools/coordinateSystems/toroidalCS.H b/src/meshTools/coordinateSystems/toroidalCS.H deleted file mode 100644 index fef6ea6303fe8aa23fa93a7bfd97b10db0e63520..0000000000000000000000000000000000000000 --- a/src/meshTools/coordinateSystems/toroidalCS.H +++ /dev/null @@ -1,133 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. - -Class - Foam::toroidalCS - -Description - Toroidal coordinate system, always in degrees - -Note - The maintenance of this class may lag that of the main types. - -SourceFiles - toroidalCS.C - -\*---------------------------------------------------------------------------*/ - -#ifndef toroidalCS_H -#define toroidalCS_H - -#include "coordinateSystem.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class toroidalCS Declaration -\*---------------------------------------------------------------------------*/ - -class toroidalCS -: - public coordinateSystem -{ - // Private data - - //- Radius of the torus - scalar radius_; - - // Private Member Functions - - //- Convert from local coordinate system to the global Cartesian system - // with optional translation for the origin - virtual vector localToGlobal(const vector&, bool translate) const; - - //- Convert from local coordinate system to the global Cartesian system - // with optional translation for the origin - virtual tmp<vectorField> localToGlobal - ( - const vectorField&, - bool translate - ) const; - - //- Convert from global Cartesian system to the local coordinate system - // with optional translation for the origin - virtual vector globalToLocal(const vector&, bool translate) const; - - //- Convert from global Cartesian system to the local coordinate system - // with optional translation for the origin - virtual tmp<vectorField> globalToLocal - ( - const vectorField&, - bool translate - ) const; - - -public: - - //- Runtime type information - TypeName("toroidal"); - - - // Constructors - - //- Construct from origin, rotation and radius - toroidalCS - ( - const word& name, - const point& origin, - const coordinateRotation&, - const scalar radius - ); - - //- Construct from dictionary - toroidalCS(const word& name, const dictionary&); - - - // Member Functions - - //- Return radius - scalar radius() const - { - return radius_; - } - - //- Write - virtual void write(Ostream&) const; - - //- Write dictionary - virtual void writeDict(Ostream&, bool subDict=true) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/meshTools/meshStructure/meshStructure.C b/src/meshTools/meshStructure/meshStructure.C new file mode 100644 index 0000000000000000000000000000000000000000..d16495d6efd6bddffa3a5fb3c5e612408e243183 --- /dev/null +++ b/src/meshTools/meshStructure/meshStructure.C @@ -0,0 +1,387 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "meshStructure.H" +#include "FaceCellWave.H" +#include "topoDistanceData.H" +#include "pointTopoDistanceData.H" +#include "PointEdgeWave.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +defineTypeNameAndDebug(meshStructure, 0); +} + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool Foam::meshStructure::isStructuredCell +( + const polyMesh& mesh, + const label layerI, + const label cellI +) const +{ + const cell& cFaces = mesh.cells()[cellI]; + + // Count number of side faces + label nSide = 0; + forAll(cFaces, i) + { + if (faceToPatchEdgeAddressing_[cFaces[i]] != -1) + { + nSide++; + } + } + + if (nSide != cFaces.size()-2) + { + return false; + } + + // Check that side faces have correct point layers + forAll(cFaces, i) + { + if (faceToPatchEdgeAddressing_[cFaces[i]] != -1) + { + const face& f = mesh.faces()[cFaces[i]]; + + label nLayer = 0; + label nLayerPlus1 = 0; + forAll(f, fp) + { + label pointI = f[fp]; + if (pointLayer_[pointI] == layerI) + { + nLayer++; + } + else if (pointLayer_[pointI] == layerI+1) + { + nLayerPlus1++; + } + } + + if (f.size() != 4 || (nLayer+nLayerPlus1 != 4)) + { + return false; + } + } + } + + return true; +} + + +void Foam::meshStructure::correct +( + const polyMesh& mesh, + const uindirectPrimitivePatch& pp +) +{ + // Field on cells and faces. + List<topoDistanceData> cellData(mesh.nCells()); + List<topoDistanceData> faceData(mesh.nFaces()); + + { + if (debug) + { + Info<< typeName << " : seeding " + << returnReduce(pp.size(), sumOp<label>()) << " patch faces" + << nl << endl; + } + + + // Start of changes + labelList patchFaces(pp.size()); + List<topoDistanceData> patchData(pp.size()); + forAll(pp, patchFaceI) + { + patchFaces[patchFaceI] = pp.addressing()[patchFaceI]; + patchData[patchFaceI] = topoDistanceData(patchFaceI, 0); + } + + + // Propagate information inwards + FaceCellWave<topoDistanceData> distanceCalc + ( + mesh, + patchFaces, + patchData, + faceData, + cellData, + mesh.globalData().nTotalCells()+1 + ); + + + // Determine cells from face-cell-walk + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + cellToPatchFaceAddressing_.setSize(mesh.nCells()); + cellLayer_.setSize(mesh.nCells()); + forAll(cellToPatchFaceAddressing_, cellI) + { + cellToPatchFaceAddressing_[cellI] = cellData[cellI].data(); + cellLayer_[cellI] = cellData[cellI].distance(); + } + + + + // Determine faces from face-cell-walk + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + faceToPatchFaceAddressing_.setSize(mesh.nFaces()); + faceToPatchEdgeAddressing_.setSize(mesh.nFaces()); + faceToPatchEdgeAddressing_ = labelMin; + faceLayer_.setSize(mesh.nFaces()); + + forAll(faceToPatchFaceAddressing_, faceI) + { + label own = mesh.faceOwner()[faceI]; + label patchFaceI = faceData[faceI].data(); + label patchDist = faceData[faceI].distance(); + + if (mesh.isInternalFace(faceI)) + { + label nei = mesh.faceNeighbour()[faceI]; + + if (cellData[own].distance() == cellData[nei].distance()) + { + // side face + faceToPatchFaceAddressing_[faceI] = 0; + faceLayer_[faceI] = cellData[own].distance(); + } + else if (cellData[own].distance() < cellData[nei].distance()) + { + // unturned face + faceToPatchFaceAddressing_[faceI] = patchFaceI+1; + faceToPatchEdgeAddressing_[faceI] = -1; + faceLayer_[faceI] = patchDist; + } + else + { + // turned face + faceToPatchFaceAddressing_[faceI] = -(patchFaceI+1); + faceToPatchEdgeAddressing_[faceI] = -1; + faceLayer_[faceI] = patchDist; + } + } + else if (patchDist == cellData[own].distance()) + { + // starting face + faceToPatchFaceAddressing_[faceI] = -(patchFaceI+1); + faceToPatchEdgeAddressing_[faceI] = -1; + faceLayer_[faceI] = patchDist; + } + else + { + // unturned face or side face. Cannot be determined until + // we determine the point layers. Problem is that both are + // the same number of steps away from the initial seed face. + } + } + } + + + // Determine points from separate walk on point-edge + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + { + pointToPatchPointAddressing_.setSize(mesh.nPoints()); + pointLayer_.setSize(mesh.nPoints()); + + if (debug) + { + Info<< typeName << " : seeding " + << returnReduce(pp.nPoints(), sumOp<label>()) << " patch points" + << nl << endl; + } + + // Field on edges and points. + List<pointTopoDistanceData> edgeData(mesh.nEdges()); + List<pointTopoDistanceData> pointData(mesh.nPoints()); + + // Start of changes + labelList patchPoints(pp.nPoints()); + List<pointTopoDistanceData> patchData(pp.nPoints()); + forAll(pp.meshPoints(), patchPointI) + { + patchPoints[patchPointI] = pp.meshPoints()[patchPointI]; + patchData[patchPointI] = pointTopoDistanceData(patchPointI, 0); + } + + + // Walk + PointEdgeWave<pointTopoDistanceData> distanceCalc + ( + mesh, + patchPoints, + patchData, + + pointData, + edgeData, + mesh.globalData().nTotalPoints() // max iterations + ); + + forAll(pointData, pointI) + { + pointToPatchPointAddressing_[pointI] = pointData[pointI].data(); + pointLayer_[pointI] = pointData[pointI].distance(); + } + + + // Derive from originating patch points what the patch edges were. + EdgeMap<label> pointsToEdge(pp.nEdges()); + forAll(pp.edges(), edgeI) + { + pointsToEdge.insert(pp.edges()[edgeI], edgeI); + } + + // Look up on faces + forAll(faceToPatchEdgeAddressing_, faceI) + { + if (faceToPatchEdgeAddressing_[faceI] == labelMin) + { + // Face not yet done. Check if all points on same level + // or if not see what edge it originates from + + const face& f = mesh.faces()[faceI]; + + label levelI = pointLayer_[f[0]]; + for (label fp = 1; fp < f.size(); fp++) + { + if (pointLayer_[f[fp]] != levelI) + { + levelI = -1; + break; + } + } + + if (levelI != -1) + { + // All same level + //Pout<< "Horizontal boundary face " << faceI + // << " at:" << mesh.faceCentres()[faceI] + // << " data:" << faceData[faceI] + // << " pointDatas:" + // << UIndirectList<pointTopoDistanceData>(pointData, f) + // << endl; + + label patchFaceI = faceData[faceI].data(); + label patchDist = faceData[faceI].distance(); + + faceToPatchEdgeAddressing_[faceI] = -1; + faceToPatchFaceAddressing_[faceI] = patchFaceI+1; + faceLayer_[faceI] = patchDist; + } + else + { + // Points of face on different levels + + // See if there is any edge + forAll(f, fp) + { + label pointI = f[fp]; + label nextPointI = f.nextLabel(fp); + + EdgeMap<label>::const_iterator fnd = pointsToEdge.find + ( + edge + ( + pointData[pointI].data(), + pointData[nextPointI].data() + ) + ); + if (fnd != pointsToEdge.end()) + { + faceToPatchEdgeAddressing_[faceI] = fnd(); + faceToPatchFaceAddressing_[faceI] = 0; + label own = mesh.faceOwner()[faceI]; + faceLayer_[faceI] = cellData[own].distance(); + + // Note: could test whether the other edges on the + // face are consistent + break; + } + } + } + } + } + } + + + + // Use maps to find out mesh structure. + { + label nLayers = gMax(cellLayer_)+1; + labelListList layerToCells(invertOneToMany(nLayers, cellLayer_)); + + structured_ = true; + forAll(layerToCells, layerI) + { + const labelList& lCells = layerToCells[layerI]; + + forAll(lCells, lCellI) + { + label cellI = lCells[lCellI]; + + structured_ = isStructuredCell + ( + mesh, + layerI, + cellI + ); + + if (!structured_) + { + break; + } + } + + if (!structured_) + { + break; + } + } + + reduce(structured_, andOp<bool>()); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::meshStructure::meshStructure +( + const polyMesh& mesh, + const uindirectPrimitivePatch& pp +) +{ + correct(mesh, pp); +} + + +// ************************************************************************* // diff --git a/src/meshTools/meshStructure/meshStructure.H b/src/meshTools/meshStructure/meshStructure.H new file mode 100644 index 0000000000000000000000000000000000000000..24bbbc875eda17838a7c82cbd9e88655a79b8220 --- /dev/null +++ b/src/meshTools/meshStructure/meshStructure.H @@ -0,0 +1,175 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::meshStructure + +Description + Detect extruded mesh structure given a set of patch faces. + +SourceFiles + meshStructure.C + +\*---------------------------------------------------------------------------*/ + +#ifndef meshStructure_H +#define meshStructure_H + +#include "labelList.H" +#include "uindirectPrimitivePatch.H" +#include "className.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// Forward declaration of classes +class polyMesh; + + +/*---------------------------------------------------------------------------*\ + Class meshStructure Declaration +\*---------------------------------------------------------------------------*/ + +class meshStructure +{ + // Private data + + //- Cell to patch face + labelList cellToPatchFaceAddressing_; + + //- Cell to layer + labelList cellLayer_; + + //- Face to patch face + labelList faceToPatchFaceAddressing_; + + //- Face to patch edge + labelList faceToPatchEdgeAddressing_; + + //- Face to layer + labelList faceLayer_; + + //- Point to patch point + labelList pointToPatchPointAddressing_; + + //- Point to layer + labelList pointLayer_; + + //- Is mesh structured? + bool structured_; + + + // Private Member Functions + + //- Is cell structured + bool isStructuredCell + ( + const polyMesh& mesh, + const label layerI, + const label cellI + ) const; + + //- Calculate all maps. + void correct + ( + const polyMesh& mesh, + const uindirectPrimitivePatch& pp + ); + + +public: + + // Declare name of the class and its debug switch + ClassName("meshStructure"); + + // Constructors + + //- Construct null + meshStructure(const polyMesh& mesh, const uindirectPrimitivePatch&); + + + // Member Functions + + //- Is mesh structured? + inline bool structured() const; + + //- Cell to patch face + inline const labelList& cellToPatchFaceAddressing() const; + + //- Cell to patch face + inline labelList& cellToPatchFaceAddressing(); + + //- Cell to layer + inline const labelList& cellLayer() const; + + //- Cell to layer + inline labelList& cellLayer(); + + //- Face to patch face + inline const labelList& faceToPatchFaceAddressing() const; + + //- Face to patch face + inline labelList& faceToPatchFaceAddressing(); + + //- Face to patch edge + inline const labelList& faceToPatchEdgeAddressing() const; + + //- Face to patch edge + inline labelList& faceToPatchEdgeAddressing(); + + //- Face to layer + inline const labelList& faceLayer() const; + + //- Face to layer + inline labelList& faceLayer(); + + //- Point to patch point + inline const labelList& pointToPatchPointAddressing() const; + + //- Point to patch point + inline labelList& pointToPatchPointAddressing(); + + //- Point to layer + inline const labelList& pointLayer() const; + + //- Point to layer + inline labelList& pointLayer(); + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "meshStructureI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/meshStructure/meshStructureI.H b/src/meshTools/meshStructure/meshStructureI.H new file mode 100644 index 0000000000000000000000000000000000000000..9367f41eb578a90307ece9e0f0ac68bc928781ce --- /dev/null +++ b/src/meshTools/meshStructure/meshStructureI.H @@ -0,0 +1,120 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "meshStructure.H" + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +bool Foam::meshStructure::structured() const +{ + return structured_; +} + + +const Foam::labelList& Foam::meshStructure::cellToPatchFaceAddressing() const +{ + return cellToPatchFaceAddressing_; +} + + +Foam::labelList& Foam::meshStructure::cellToPatchFaceAddressing() +{ + return cellToPatchFaceAddressing_; +} + + +const Foam::labelList& Foam::meshStructure::cellLayer() const +{ + return cellLayer_; +} + + +Foam::labelList& Foam::meshStructure::cellLayer() +{ + return cellLayer_; +} + + +const Foam::labelList& Foam::meshStructure::faceToPatchFaceAddressing() const +{ + return faceToPatchFaceAddressing_; +} + + +Foam::labelList& Foam::meshStructure::faceToPatchFaceAddressing() +{ + return faceToPatchFaceAddressing_; +} + + +const Foam::labelList& Foam::meshStructure::faceToPatchEdgeAddressing() const +{ + return faceToPatchEdgeAddressing_; +} + + +Foam::labelList& Foam::meshStructure::faceToPatchEdgeAddressing() +{ + return faceToPatchEdgeAddressing_; +} + + +const Foam::labelList& Foam::meshStructure::faceLayer() const +{ + return faceLayer_; +} + + +Foam::labelList& Foam::meshStructure::faceLayer() +{ + return faceLayer_; +} + + +const Foam::labelList& Foam::meshStructure::pointToPatchPointAddressing() const +{ + return pointToPatchPointAddressing_; +} + + +Foam::labelList& Foam::meshStructure::pointToPatchPointAddressing() +{ + return pointToPatchPointAddressing_; +} + + +const Foam::labelList& Foam::meshStructure::pointLayer() const +{ + return pointLayer_; +} + + +Foam::labelList& Foam::meshStructure::pointLayer() +{ + return pointLayer_; +} + + +// ************************************************************************* // diff --git a/src/meshTools/meshStructure/pointTopoDistanceData.C b/src/meshTools/meshStructure/pointTopoDistanceData.C new file mode 100644 index 0000000000000000000000000000000000000000..95a1e00518ef1ebe75082a01c9ba61ac65aa71c6 --- /dev/null +++ b/src/meshTools/meshStructure/pointTopoDistanceData.C @@ -0,0 +1,50 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "pointTopoDistanceData.H" + +// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // + +Foam::Ostream& Foam::operator<< +( + Foam::Ostream& os, + const Foam::pointTopoDistanceData& wDist +) +{ + return os << wDist.data_ << token::SPACE << wDist.distance_; +} + + +Foam::Istream& Foam::operator>> +( + Foam::Istream& is, + Foam::pointTopoDistanceData& wDist +) +{ + return is >> wDist.data_ >> wDist.distance_; +} + + +// ************************************************************************* // diff --git a/src/meshTools/meshStructure/pointTopoDistanceData.H b/src/meshTools/meshStructure/pointTopoDistanceData.H new file mode 100644 index 0000000000000000000000000000000000000000..d8c7cf8830bc42a0b8cdcab8f352039d5b9d1647 --- /dev/null +++ b/src/meshTools/meshStructure/pointTopoDistanceData.H @@ -0,0 +1,227 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +Class + Foam::pointTopoDistanceData + +Description + For use with PointEdgeWave. Determines topological distance to + starting points + +SourceFiles + pointTopoDistanceDataI.H + pointTopoDistanceData.C + +\*---------------------------------------------------------------------------*/ + +#ifndef pointTopoDistanceData_H +#define pointTopoDistanceData_H + +#include "point.H" +#include "tensor.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +class polyPatch; +class polyMesh; + +/*---------------------------------------------------------------------------*\ + Class pointTopoDistanceData Declaration +\*---------------------------------------------------------------------------*/ + +class pointTopoDistanceData +{ + // Private data + + //- Starting data + label data_; + + //- Distance + label distance_; + + +public: + + // Constructors + + //- Construct null + inline pointTopoDistanceData(); + + //- Construct from count + inline pointTopoDistanceData + ( + const label data, + const label distance + ); + + + // Member Functions + + // Access + + + inline label data() const + { + return data_; + } + inline label distance() const + { + return distance_; + } + + + // Needed by PointEdgeWave + + + //- Check whether origin has been changed at all or + // still contains original (invalid) value. + template<class TrackingData> + inline bool valid(TrackingData& td) const; + + //- Check for identical geometrical data. Used for cyclics checking. + template<class TrackingData> + inline bool sameGeometry + ( + const pointTopoDistanceData&, + const scalar tol, + TrackingData& td + ) const; + + //- Convert origin to relative vector to leaving point + // (= point coordinate) + template<class TrackingData> + inline void leaveDomain + ( + const polyPatch& patch, + const label patchPointI, + const point& pos, + TrackingData& td + ); + + //- Convert relative origin to absolute by adding entering point + template<class TrackingData> + inline void enterDomain + ( + const polyPatch& patch, + const label patchPointI, + const point& pos, + TrackingData& td + ); + + //- Apply rotation matrix to origin + template<class TrackingData> + inline void transform + ( + const tensor& rotTensor, + TrackingData& td + ); + + //- Influence of edge on point + template<class TrackingData> + inline bool updatePoint + ( + const polyMesh& mesh, + const label pointI, + const label edgeI, + const pointTopoDistanceData& edgeInfo, + const scalar tol, + TrackingData& td + ); + + //- Influence of different value on same point. + // Merge new and old info. + template<class TrackingData> + inline bool updatePoint + ( + const polyMesh& mesh, + const label pointI, + const pointTopoDistanceData& newPointInfo, + const scalar tol, + TrackingData& td + ); + + //- Influence of different value on same point. + // No information about current position whatsoever. + template<class TrackingData> + inline bool updatePoint + ( + const pointTopoDistanceData& newPointInfo, + const scalar tol, + TrackingData& td + ); + + //- Influence of point on edge. + template<class TrackingData> + inline bool updateEdge + ( + const polyMesh& mesh, + const label edgeI, + const label pointI, + const pointTopoDistanceData& pointInfo, + const scalar tol, + TrackingData& td + ); + + //- Same (like operator==) + template<class TrackingData> + inline bool equal(const pointTopoDistanceData&, TrackingData&) + const; + + + // Member Operators + + // Needed for List IO + inline bool operator==(const pointTopoDistanceData&) const; + inline bool operator!=(const pointTopoDistanceData&) const; + + // IOstream Operators + + friend Ostream& operator<<(Ostream&, const pointTopoDistanceData&); + friend Istream& operator>>(Istream&, pointTopoDistanceData&); +}; + + +//- Data associated with pointTopoDistanceData type are contiguous +template<> +inline bool contiguous<pointTopoDistanceData>() +{ + return true; +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "pointTopoDistanceDataI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/meshTools/meshStructure/pointTopoDistanceDataI.H b/src/meshTools/meshStructure/pointTopoDistanceDataI.H new file mode 100644 index 0000000000000000000000000000000000000000..c42dbffce2e7f01795d215fe81b5b05d7aa3c8c8 --- /dev/null +++ b/src/meshTools/meshStructure/pointTopoDistanceDataI.H @@ -0,0 +1,233 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#include "polyMesh.H" + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Null constructor +inline Foam::pointTopoDistanceData::pointTopoDistanceData() +: + data_(-1), + distance_(-1) +{} + + +// Construct from components +inline Foam::pointTopoDistanceData::pointTopoDistanceData +( + const label data, + const label distance +) +: + data_(data), + distance_(distance) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template <class TrackingData> +inline bool Foam::pointTopoDistanceData::valid(TrackingData& td) const +{ + return distance_ != -1; +} + + +// No geometric data so never any problem on cyclics +template <class TrackingData> +inline bool Foam::pointTopoDistanceData::sameGeometry +( + const pointTopoDistanceData&, + const scalar tol, + TrackingData& td +) const +{ + return true; +} + + +// No geometric data. +template <class TrackingData> +inline void Foam::pointTopoDistanceData::leaveDomain +( + const polyPatch& patch, + const label patchPointI, + const point& coord, + TrackingData& td +) +{} + + +// No geometric data. +template <class TrackingData> +inline void Foam::pointTopoDistanceData::transform +( + const tensor& rotTensor, + TrackingData& td +) +{} + + +// No geometric data. +template <class TrackingData> +inline void Foam::pointTopoDistanceData::enterDomain +( + const polyPatch& patch, + const label patchPointI, + const point& coord, + TrackingData& td +) +{} + + +// Update this with information from connected edge +template <class TrackingData> +inline bool Foam::pointTopoDistanceData::updatePoint +( + const polyMesh& mesh, + const label pointI, + const label edgeI, + const pointTopoDistanceData& edgeInfo, + const scalar tol, + TrackingData& td +) +{ + if (distance_ == -1) + { + data_ = edgeInfo.data_; + distance_ = edgeInfo.distance_ + 1; + return true; + } + else + { + return false; + } +} + + +// Update this with new information on same point +template<class TrackingData> +inline bool Foam::pointTopoDistanceData::updatePoint +( + const polyMesh& mesh, + const label pointI, + const pointTopoDistanceData& newPointInfo, + const scalar tol, + TrackingData& td +) +{ + if (distance_ == -1) + { + operator=(newPointInfo); + return true; + } + else + { + return false; + } +} + + +// Update this with new information on same point. No extra information. +template<class TrackingData> +inline bool Foam::pointTopoDistanceData::updatePoint +( + const pointTopoDistanceData& newPointInfo, + const scalar tol, + TrackingData& td +) +{ + if (distance_ == -1) + { + operator=(newPointInfo); + return true; + } + else + { + return false; + } +} + + +// Update this with information from connected point +template<class TrackingData> +inline bool Foam::pointTopoDistanceData::updateEdge +( + const polyMesh& mesh, + const label edgeI, + const label pointI, + const pointTopoDistanceData& pointInfo, + const scalar tol, + TrackingData& td +) +{ + if (distance_ == -1) + { + operator=(pointInfo); + return true; + } + else + { + return false; + } +} + + +template <class TrackingData> +inline bool Foam::pointTopoDistanceData::equal +( + const pointTopoDistanceData& rhs, + TrackingData& td +) const +{ + return operator==(rhs); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +inline bool Foam::pointTopoDistanceData::operator== +( + const Foam::pointTopoDistanceData& rhs +) const +{ + return data() == rhs.data() && distance() == rhs.distance(); +} + + +inline bool Foam::pointTopoDistanceData::operator!= +( + const Foam::pointTopoDistanceData& rhs +) const +{ + return !(*this == rhs); +} + + +// ************************************************************************* // diff --git a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.C b/src/meshTools/meshStructure/topoDistanceData.C similarity index 95% rename from src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.C rename to src/meshTools/meshStructure/topoDistanceData.C index a7683eeb243229e49d28b7e62a37845331564522..e5938cccfc24ab62994f7ea474a38cd530430f5c 100644 --- a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.C +++ b/src/meshTools/meshStructure/topoDistanceData.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H b/src/meshTools/meshStructure/topoDistanceData.H similarity index 98% rename from src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H rename to src/meshTools/meshStructure/topoDistanceData.H index dc18cb46006207f703f11d054235e44ee569d9a2..be6f73ee753f80bb55ed876ea44129dd5a41acbe 100644 --- a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceData.H +++ b/src/meshTools/meshStructure/topoDistanceData.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceDataI.H b/src/meshTools/meshStructure/topoDistanceDataI.H similarity index 100% rename from src/parallel/decompose/decompositionMethods/structuredDecomp/topoDistanceDataI.H rename to src/meshTools/meshStructure/topoDistanceDataI.H diff --git a/src/meshTools/searchableSurface/searchableSurfaceCollection.C b/src/meshTools/searchableSurface/searchableSurfaceCollection.C index 1aa9cbc123fe86e27df4c7c593ebee4550208b15..3a02066afae137a1d251eaf982bd5db3cf3a82da 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceCollection.C +++ b/src/meshTools/searchableSurface/searchableSurfaceCollection.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -203,7 +203,6 @@ Foam::searchableSurfaceCollection::searchableSurfaceCollection surfI, coordinateSystem::New ( - "", subDict.subDict("transform") ) ); diff --git a/src/parallel/decompose/decompositionMethods/Make/files b/src/parallel/decompose/decompositionMethods/Make/files index 5e54b366af42ba69866e138d23b27b460b156701..c2837d2eb320880626cf8fa1cca120dfa718e39a 100644 --- a/src/parallel/decompose/decompositionMethods/Make/files +++ b/src/parallel/decompose/decompositionMethods/Make/files @@ -4,7 +4,6 @@ simpleGeomDecomp/simpleGeomDecomp.C hierarchGeomDecomp/hierarchGeomDecomp.C manualDecomp/manualDecomp.C multiLevelDecomp/multiLevelDecomp.C -structuredDecomp/topoDistanceData.C structuredDecomp/structuredDecomp.C noDecomp/noDecomp.C diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C index 250e3c34dcac7b4221ae2543dee5420760454be1..ac0fc6da0afc17a6b53ab5b31e167d0455328ecd 100644 --- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C +++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,7 +48,7 @@ Foam::fieldCoordinateSystemTransform::fieldCoordinateSystemTransform obr_(obr), active_(true), fieldSet_(), - coordSys_(dict, obr) + coordSys_(obr, dict) { // Check if the available mesh is an fvMesh otherise deactivate if (!isA<fvMesh>(obr_)) diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C index c1ecc72707bce985a0705929006be29edaf1a993..cf2c4be69f8d77b9561e0af90c5332d39a0fef2c 100644 --- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransformTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,7 +39,7 @@ void Foam::fieldCoordinateSystemTransform::transformField { const word& fieldName = field.name() + "Transformed"; - dimensionedTensor R("R", field.dimensions(), coordSys_.R()); + dimensionedTensor R("R", field.dimensions(), coordSys_.R().R()); if (obr_.foundObject<Type>(fieldName)) { diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C index 14a6fa310e7d7cad49c36119fc7d1a1b8eeec0f4..dd54de718ac14619f3ee231427bc5a22a3828148 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -48,10 +48,11 @@ namespace Foam template<> - const char* NamedEnum<fieldValues::faceSource::operationType, 11>::names[] = + const char* NamedEnum<fieldValues::faceSource::operationType, 12>::names[] = { "none", "sum", + "sumDirection", "average", "weightedAverage", "areaAverage", @@ -74,7 +75,7 @@ namespace Foam const Foam::NamedEnum<Foam::fieldValues::faceSource::sourceType, 3> Foam::fieldValues::faceSource::sourceTypeNames_; -const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 11> +const Foam::NamedEnum<Foam::fieldValues::faceSource::operationType, 12> Foam::fieldValues::faceSource::operationTypeNames_; @@ -486,6 +487,46 @@ void Foam::fieldValues::faceSource::writeFileHeader(const label i) } +template<> +Foam::scalar Foam::fieldValues::faceSource::processValues +( + const Field<scalar>& values, + const vectorField& Sf, + const scalarField& weightField +) const +{ + switch (operation_) + { + case opSumDirection: + { + const vector direction(dict_.lookup("direction")); + + scalar v = 0.0; + + forAll(Sf, i) + { + scalar d = Sf[i] & direction; + if (d > 0) + { + v += pos(values[i])*values[i]; + } + else + { + v += neg(values[i])*values[i]; + } + } + + return v; + } + default: + { + // Fall through to other operations + return processSameTypeValues(values, Sf, weightField); + } + } +} + + template<> Foam::vector Foam::fieldValues::faceSource::processValues ( @@ -496,14 +537,19 @@ Foam::vector Foam::fieldValues::faceSource::processValues { switch (operation_) { + case opSumDirection: + { + const vector direction(dict_.lookup("direction")); + return sum(pos(values & direction)*values); + } case opAreaNormalAverage: { - scalar result = sum(values&Sf)/sum(mag(Sf)); + scalar result = sum(values & Sf)/sum(mag(Sf)); return vector(result, 0.0, 0.0); } case opAreaNormalIntegrate: { - scalar result = sum(values&Sf); + scalar result = sum(values & Sf); return vector(result, 0.0, 0.0); } default: diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H index 42bc27a311e5a10764a72c73da2555e801894c66..9af8c7c3424ec0c30d12102df70bab35b83a176a 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSource.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -87,6 +87,7 @@ Description \plaintable none | no operation sum | sum + sumDirection | sum values which are positive in given direction average | ensemble average weightedAverage | weighted average areaAverage | area weighted average @@ -176,6 +177,7 @@ public: { opNone, opSum, + opSumDirection, opAverage, opWeightedAverage, opAreaAverage, @@ -188,7 +190,7 @@ public: }; //- Operation type names - static const NamedEnum<operationType, 11> operationTypeNames_; + static const NamedEnum<operationType, 12> operationTypeNames_; private: @@ -366,8 +368,17 @@ public: }; -//- Specialisation of processing vectors for opAreaNormalAverage, -// opAreaNormalIntegrate (use inproduct - dimension reducing operation) +//- Specialisation of processing scalars +template<> +scalar faceSource::processValues +( + const Field<scalar>& values, + const vectorField& Sf, + const scalarField& weightField +) const; + + +//- Specialisation of processing vectors template<> vector faceSource::processValues ( diff --git a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C index a82f4890361b3de7284e28a9606fdddaf14fc844..8177946ffc332295680f1dddd52764d79e756ae5 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/faceSource/faceSourceTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -141,6 +141,26 @@ Type Foam::fieldValues::faceSource::processSameTypeValues result = sum(values); break; } + case opSumDirection: + { + FatalErrorIn + ( + "template<class Type>" + "Type Foam::fieldValues::faceSource::processSameTypeValues" + "(" + "const Field<Type>&, " + "const vectorField&, " + "const scalarField&" + ") const" + ) + << "Operation " << operationTypeNames_[operation_] + << " not available for values of type " + << pTraits<Type>::typeName + << exit(FatalError); + + result = pTraits<Type>::zero; + break; + } case opAverage: { result = sum(values)/values.size(); diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C index 5cb2faa3b69d207a9f0dcc23541af9314372b8b2..50d47d8198f2303682fff96fa3e922c1c71da804 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,6 +43,8 @@ void Foam::fieldValue::read(const dictionary& dict) { if (active_) { + dict_ = dict; + log_ = dict.lookupOrDefault<Switch>("log", false); dict.lookup("fields") >> fields_; dict.lookup("valueOutput") >> valueOutput_; @@ -78,6 +80,7 @@ Foam::fieldValue::fieldValue functionObjectFile(obr, name, valueType), name_(name), obr_(obr), + dict_(dict), active_(true), log_(false), sourceName_(dict.lookupOrDefault<word>("sourceName", "sampledSurface")), diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H index 1b2f2621e7b240737f6e5953356bd5d252a07019..b7994383d51c83321dcfe7a9dafc78af610af5ba 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValue.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -75,6 +75,9 @@ protected: //- Database this class is registered to const objectRegistry& obr_; + //- Construction dictionary + dictionary dict_; + //- Active flag bool active_; @@ -149,6 +152,9 @@ public: //- Return the reference to the object registry inline const objectRegistry& obr() const; + //- Return the reference to the construction dictionary + inline const dictionary& dict() const; + //- Return the active flag inline bool active() const; diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H index aaee816af205747697031b269fc8e62c63044d52..55651a3539ed50705d18fe6a75cf10f4425e9d59 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValue/fieldValueI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,6 +40,12 @@ inline const Foam::objectRegistry& Foam::fieldValue::obr() const } +inline const Foam::dictionary& Foam::fieldValue::dict() const +{ + return dict_; +} + + inline bool Foam::fieldValue::active() const { return active_; diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C index 20614f474f0f082f9d6cdcc629249159a159f5a1..cf9fb292364ca523ece7e94f592bdd07271d7409 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,15 +38,16 @@ namespace Foam template<> const char* - NamedEnum<fieldValues::fieldValueDelta::operationType, 4>::names[] = + NamedEnum<fieldValues::fieldValueDelta::operationType, 5>::names[] = { "add", "subtract", "min", - "max" + "max", + "average" }; - const NamedEnum<fieldValues::fieldValueDelta::operationType, 4> + const NamedEnum<fieldValues::fieldValueDelta::operationType, 5> fieldValues::fieldValueDelta::operationTypeNames_; } @@ -158,7 +159,7 @@ void Foam::fieldValues::fieldValueDelta::write() if (log_) { - Info<< type() << " output:" << endl; + Info<< type() << " " << name_ << " output:" << endl; } bool found = false; @@ -179,10 +180,8 @@ void Foam::fieldValues::fieldValueDelta::write() { Info<< " none" << endl; } - else - { - Info<< endl; - } + + Info<< endl; } } diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H index e28771109a2f55004a05ef4af071c72d3a061cda..24d72f1f6bf2a4db31f9d56b6e0aa6e760624942 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,6 +37,8 @@ Description { type fieldValueDelta; functionObjectLibs ("libfieldFunctionObjects.so"); + operation subtract; + fieldValue1 { ... @@ -54,6 +56,15 @@ Description type | type name: fieldValueDelta | yes | \endtable + \linebreak + The \c operation is one of: + \plaintable + add | add + subtract | subtract + min | minimum + max | maximum + average | average + \endplaintable SeeAlso Foam::fieldValue @@ -92,11 +103,12 @@ public: opAdd, opSubtract, opMin, - opMax + opMax, + opAverage }; //- Operation type names - static const NamedEnum<operationType, 4> operationTypeNames_; + static const NamedEnum<operationType, 5> operationTypeNames_; private: diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C index 6b757fc2df391d3e393690c1de2708432be15c86..b107c7952701dde83b5ae770b6e2eea8e4d8826c 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDeltaTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,7 @@ License #include "GeometricField.H" #include "volMesh.H" +#include "surfaceMesh.H" // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // @@ -59,6 +60,11 @@ Type Foam::fieldValues::fieldValueDelta::applyOperation result = max(value1, value2); break; } + case opAverage: + { + result = 0.5*(value1 + value2); + break; + } default: { FatalErrorIn @@ -83,6 +89,7 @@ template<class Type> void Foam::fieldValues::fieldValueDelta::processFields(bool& found) { typedef GeometricField<Type, fvPatchField, volMesh> vf; + typedef GeometricField<Type, fvsPatchField, surfaceMesh> sf; const wordList& fields1 = source1Ptr_->fields(); @@ -95,7 +102,12 @@ void Foam::fieldValues::fieldValueDelta::processFields(bool& found) forAll(fields1, i) { const word& fieldName = fields1[i]; - if (obr_.foundObject<vf>(fieldName) && results2.found(fieldName)) + + if + ( + (obr_.foundObject<vf>(fieldName) || obr_.foundObject<sf>(fieldName)) + && results2.found(fieldName) + ) { results1.lookup(fieldName) >> r1; results2.lookup(fieldName) >> r2; diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C index 27310c7a803e62cf94055bf94f871f5f0d52542a..5b944cc2343158d0a7f02f2b87adc278f26997b4 100644 --- a/src/postProcessing/functionObjects/forces/forces/forces.C +++ b/src/postProcessing/functionObjects/forces/forces/forces.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -444,7 +444,7 @@ void Foam::forces::read(const dictionary& dict) // specified directly, from coordinate system, or implicitly (0 0 0) if (!dict.readIfPresent<point>("CofR", coordSys_.origin())) { - coordSys_ = coordinateSystem(dict, obr_); + coordSys_ = coordinateSystem(obr_, dict); localSystem_ = true; } diff --git a/src/randomProcesses/noise/noiseFFT.C b/src/randomProcesses/noise/noiseFFT.C index 9a7ca7cd95cbd6d4f093635861f7302e6ef1a434..a262125121f30d69e30e3e6ce74e46257ede61d7 100644 --- a/src/randomProcesses/noise/noiseFFT.C +++ b/src/randomProcesses/noise/noiseFFT.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,16 +53,14 @@ Foam::noiseFFT::noiseFFT(const fileName& pFileName, const label skip) scalarField(), deltat_(0.0) { - // Construct control dictionary + // Construct pressure data file IFstream pFile(pFileName); // Check pFile stream is OK if (!pFile.good()) { - FatalErrorIn - ( - "noiseFFT::noiseFFT(const fileName&, const label)" - ) << "Cannot read file " << pFileName + FatalErrorIn("noiseFFT::noiseFFT(const scalar, const scalarField&)") + << "Cannot read file " << pFileName << exit(FatalError); } @@ -76,7 +74,10 @@ Foam::noiseFFT::noiseFFT(const fileName& pFileName, const label skip) if (!pFile.good() || pFile.eof()) { - FatalErrorIn("noiseFFT::noiseFFT(const fileName&, const label)") + FatalErrorIn + ( + "noiseFFT::noiseFFT(const scalar, const scalarField&)" + ) << "Number of points in file " << pFileName << " is less than the number to be skipped = " << skip << exit(FatalError); diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltHeight/inclinedFilmNusseltHeightFvPatchScalarField.C b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltHeight/inclinedFilmNusseltHeightFvPatchScalarField.C index bc6af600b564a9fafd96ce04743b0dd539fb5591..65c389e0372c44756257d6a604736a35cd289be9 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltHeight/inclinedFilmNusseltHeightFvPatchScalarField.C +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltHeight/inclinedFilmNusseltHeightFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -137,7 +137,7 @@ void Foam::inclinedFilmNusseltHeightFvPatchScalarField::updateCoeffs() // TODO: currently re-evaluating the entire gTan field to return this patch const scalarField gTan(film.gTan()().boundaryField()[patchI] & n); - if (max(mag(gTan)) < SMALL) + if (patch().size() && (max(mag(gTan)) < SMALL)) { WarningIn ( diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltInletVelocity/inclinedFilmNusseltInletVelocityFvPatchVectorField.C b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltInletVelocity/inclinedFilmNusseltInletVelocityFvPatchVectorField.C index 72a7e9fdc37e28115b11bad6c19da93e86f75316..67374b7b47bc7eb42c1f504f7bc983337c16778a 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltInletVelocity/inclinedFilmNusseltInletVelocityFvPatchVectorField.C +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/inclinedFilmNusseltInletVelocity/inclinedFilmNusseltInletVelocityFvPatchVectorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -136,7 +136,7 @@ void Foam::inclinedFilmNusseltInletVelocityFvPatchVectorField::updateCoeffs() // TODO: currently re-evaluating the entire gTan field to return this patch const scalarField gTan(film.gTan()().boundaryField()[patchI] & n); - if (max(mag(gTan)) < SMALL) + if (patch().size() && (max(mag(gTan)) < SMALL)) { WarningIn ( diff --git a/src/sampling/sampledSet/array/arraySet.C b/src/sampling/sampledSet/array/arraySet.C index fb97a93bfe57ce534d1de1ce8b3e261aeac864d7..49e3b76e8c98e692f705006c28182331ce265834 100644 --- a/src/sampling/sampledSet/array/arraySet.C +++ b/src/sampling/sampledSet/array/arraySet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -83,7 +83,7 @@ void Foam::arraySet::calcSamples forAll(sampleCoords, i) { - sampleCoords[i] = transform(coordSys_.R(), sampleCoords[i]); + sampleCoords[i] = transform(coordSys_.R().R(), sampleCoords[i]); } forAll(sampleCoords, sampleI) diff --git a/src/sampling/sampledSurface/sampledPlane/sampledPlane.C b/src/sampling/sampledSurface/sampledPlane/sampledPlane.C index 3622dcb5853da8da9ab2739687b790fdc952e960..3873962ccadfbc4ad43d7484ace483454cdc1382 100644 --- a/src/sampling/sampledSurface/sampledPlane/sampledPlane.C +++ b/src/sampling/sampledSurface/sampledPlane/sampledPlane.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -77,7 +77,7 @@ Foam::sampledPlane::sampledPlane // allow lookup from global coordinate systems if (dict.found("coordinateSystem")) { - coordinateSystem cs(dict, mesh); + coordinateSystem cs(mesh, dict); point base = cs.globalPosition(planeDesc().refPoint()); vector norm = cs.globalVector(planeDesc().normal()); diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C index 436457c4694bb2c717822f2ef418c9c9188d8799..eaa16feb6b6f9fc520413d762049523e4af222af 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -336,15 +336,17 @@ Foam::nastranSurfaceWriter::nastranSurfaceWriter() : surfaceWriter(), writeFormat_(wfShort), - fieldMap_() + fieldMap_(), + scale_(1.0) {} Foam::nastranSurfaceWriter::nastranSurfaceWriter(const dictionary& options) : surfaceWriter(), - writeFormat_(wfShort), - fieldMap_() + writeFormat_(wfLong), + fieldMap_(), + scale_(options.lookupOrDefault("scale", 1.0)) { if (options.found("format")) { diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H index 4e968ee55f4c53c3c06377590e8a3df73f5c1c3f..35374a7d94b50ac74c502c0fd3f24f5bd2fbd852 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -75,6 +75,9 @@ private: //- Map of OpenFOAM field name vs nastran field name HashTable<word> fieldMap_; + //- Scale to apply to values (default = 1.0) + scalar scale_; + // Private Member Functions diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C index e43dc5757fe2762dce15951679509b37e456ab48..fc0a283d754e9a2b48899669d9f418f26a31f772 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,6 +46,8 @@ void Foam::nastranSurfaceWriter::writeFaceValue label SID = 1; + Type scaledValue = scale_*value; + switch (writeFormat_) { case wfShort: @@ -59,7 +61,7 @@ void Foam::nastranSurfaceWriter::writeFaceValue for (direction dirI = 0; dirI < pTraits<Type>::nComponents; dirI++) { - os << setw(8) << component(value, dirI); + os << setw(8) << component(scaledValue, dirI); } os.unsetf(ios_base::right); @@ -77,7 +79,7 @@ void Foam::nastranSurfaceWriter::writeFaceValue for (direction dirI = 0; dirI < pTraits<Type>::nComponents; dirI++) { - os << setw(16) << component(value, dirI); + os << setw(16) << component(scaledValue, dirI); } os.unsetf(ios_base::right); @@ -98,7 +100,7 @@ void Foam::nastranSurfaceWriter::writeFaceValue for (direction dirI = 0; dirI < pTraits<Type>::nComponents; dirI++) { - os << ',' << component(value, dirI); + os << ',' << component(scaledValue, dirI); } break; diff --git a/src/thermophysicalModels/radiationModels/include/createIncompressibleRadiationModel.H b/src/thermophysicalModels/radiationModels/include/createIncompressibleRadiationModel.H new file mode 100644 index 0000000000000000000000000000000000000000..ab7466d0a79195b257b3c7f38b2e301d69b14f5e --- /dev/null +++ b/src/thermophysicalModels/radiationModels/include/createIncompressibleRadiationModel.H @@ -0,0 +1,32 @@ + autoPtr<radiation::radiationModel> radiation + ( + radiation::radiationModel::New(T) + ); + + dimensionedScalar rhoCpRef + ( + "rhoCpRef", + dimDensity*dimEnergy/dimMass/dimTemperature, + 1.0 + ); + + if (radiation->radiation()) + { + IOdictionary transportProperties + ( + IOobject + ( + "transportProperties", + runTime.constant(), + runTime, + IOobject::MUST_READ, + IOobject::NO_WRITE, + false // do not register! + ) + ); + + dimensionedScalar rhoRef(transportProperties.lookup("rhoRef")); + dimensionedScalar CpRef(transportProperties.lookup("CpRef")); + + rhoCpRef = rhoRef*CpRef; + } diff --git a/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.C b/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.C index 94d08934ab6ca7eb36e903b19f6845dbd678213f..a07142897b78228ac6c4fa15e8a583e9f77b4d4d 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "P1.H" -#include "fvm.H" +#include "fvmLaplacian.H" +#include "fvmSup.H" #include "absorptionEmissionModel.H" #include "scatterModel.H" @@ -279,7 +280,7 @@ Foam::radiation::P1::Ru() const const DimensionedField<scalar, volMesh> a = absorptionEmission_->aCont()().dimensionedInternalField(); - return a*G - 4.0*E; + return a*G - 4.0*E; } diff --git a/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.H b/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.H index 2077d74445685ff3bc09884e8b6bb57083308c6c..fd86c51d09070699768d78b586f182af5169fcb5 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.H +++ b/src/thermophysicalModels/radiationModels/radiationModel/P1/P1.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,6 +42,7 @@ SourceFiles #define radiationModelP1_H #include "radiationModel.H" +#include "volFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C index 69666b7c63a0a591021ed049dc00e439bbc4bb4c..234b0fcd00c57d28030ee2a5e330162756108583 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/noRadiation/noRadiation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,9 @@ License #include "noRadiation.H" #include "physicoChemicalConstants.H" +#include "fvMesh.H" +#include "Time.H" +#include "volFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/radiationModels/radiationModel/opaqueSolid/opaqueSolid.C b/src/thermophysicalModels/radiationModels/radiationModel/opaqueSolid/opaqueSolid.C index ddc4a7a438f7fd17ad470c950aba78ce05c3b667..405ae7cc9c92c31541b952ab5e42ff87ba188b58 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/opaqueSolid/opaqueSolid.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/opaqueSolid/opaqueSolid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,6 +25,9 @@ License #include "opaqueSolid.H" #include "physicoChemicalConstants.H" +#include "fvMesh.H" +#include "Time.H" +#include "volFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C index 5948101185c074bc1aa90c44b10bca28be2c7759..48cd4178609f1a8a967f8b97d7179bf2cce74107 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,6 +27,7 @@ License #include "absorptionEmissionModel.H" #include "scatterModel.H" #include "fvmSup.H" +#include "fluidThermo.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -232,6 +233,20 @@ Foam::tmp<Foam::fvScalarMatrix> Foam::radiation::radiationModel::Sh } +Foam::tmp<Foam::fvScalarMatrix> Foam::radiation::radiationModel::ST +( + const dimensionedScalar& rhoCp, + volScalarField& T +) const +{ + return + ( + Ru()/rhoCp + - fvm::Sp(Rp()*pow3(T)/rhoCp, T) + ); +} + + const Foam::radiation::absorptionEmissionModel& Foam::radiation::radiationModel::absorptionEmission() const { diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H index 1218dac9e9b72612be3a91984f2d08d52215ec88..d4c39bd958eacd1e3a2e7b6811bd360bacf6442a 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H +++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,13 +47,18 @@ SourceFiles #include "runTimeSelectionTables.H" #include "addToRunTimeSelectionTable.H" #include "volFieldsFwd.H" -#include "fluidThermo.H" +#include "DimensionedField.H" #include "fvMatricesFwd.H" +#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { + +class fluidThermo; +class fvMesh; + namespace radiation { @@ -82,7 +87,7 @@ protected: //- Reference to the temperature field const volScalarField& T_; - //- Model specific dictionary input parameters + //- Radiation model on/off flag Switch radiation_; //- Radiation model dictionary @@ -204,6 +209,12 @@ public: // Access + //- Radiation model on/off flag + const Switch radiation() const + { + return radiation_; + } + //- Source term component (for power of T^4) virtual tmp<volScalarField> Rp() const = 0; @@ -213,6 +224,13 @@ public: //- Energy source term virtual tmp<fvScalarMatrix> Sh(fluidThermo& thermo) const; + //- Temperature source term + virtual tmp<fvScalarMatrix> ST + ( + const dimensionedScalar& rhoCp, + volScalarField& T + ) const; + //- Access to absorptionEmissionModel const absorptionEmissionModel& absorptionEmission() const; }; diff --git a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C index 0a4dd3730c8e47d264c38de8d4255444bdfdfec3..65b96b48ed476bc8ae720ac3386832650fdd75a6 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C +++ b/src/thermophysicalModels/radiationModels/radiationModel/radiationModel/radiationModelNew.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "radiationModel.H" +#include "volFields.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // diff --git a/src/thermophysicalModels/radiationModels/radiationModel/viewFactor/viewFactor.H b/src/thermophysicalModels/radiationModels/radiationModel/viewFactor/viewFactor.H index 3b34006e8eb1e8ca6f893c146059eee3dc966b2b..0718afc0698aaed7c996498cef41b8a27a2d2560 100644 --- a/src/thermophysicalModels/radiationModels/radiationModel/viewFactor/viewFactor.H +++ b/src/thermophysicalModels/radiationModels/radiationModel/viewFactor/viewFactor.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -51,7 +51,9 @@ SourceFiles #include "globalIndex.H" #include "scalarListIOList.H" #include "mapDistribute.H" +#include "volFields.H" +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H index 60b846fd7ad03646e72b769e294bafa3ae402d3f..718f648143354953ad3b02ed04e8b19548e42b06 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,6 +111,9 @@ public: return "constAnIso<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = false; + //- Isotropic thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H index 5b49beab675742b8b004c4381e942c9a1a0f4cd2..fc9cb4438a5d999d22bd58777a512a27f533d75a 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -112,6 +112,9 @@ public: return "constIso<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = true; + //- Isotropic thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H index 00cc81e1b3be90735d58939f5009204c87e80d4f..3592626d8045b8846d58a092bde25a53ab74750d 100644 --- a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -121,6 +121,9 @@ public: return "exponential<" + Thermo::typeName() + '>'; } + //- Is the thermal conductivity isotropic + static const bool isotropic = true; + //- Thermal conductivity [W/mK] inline scalar kappa(const scalar p, const scalar T) const; diff --git a/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H b/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H index 8d13ea6e28a61c7467f6b90b0922e40e5b587125..146656d69e97a30e7dbebf5a4eb1a86a9b64ff38 100644 --- a/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H +++ b/src/thermophysicalModels/solidThermo/solidThermo/heSolidThermo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -99,6 +99,12 @@ public: //- Anisotropic thermal conductivity [W/m/K] virtual tmp<volVectorField> Kappa() const; + //- Return true if thermal conductivity is isotropic + virtual bool isotropic() const + { + return MixtureType::thermoType::isotropic; + } + // Per patch calculation diff --git a/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H b/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H index e3cf9b8e19d641b554e549be24ac75700857dbe9..04934ca950cf559da6bdf6fdbb9fc35245fb7e23 100644 --- a/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H +++ b/src/thermophysicalModels/solidThermo/solidThermo/solidThermo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -144,6 +144,9 @@ public: //- Thermal conductivity [W/m/K] virtual tmp<volVectorField> Kappa() const = 0; + //- Return true if thermal conductivity is isotropic + virtual bool isotropic() const = 0; + // Per patch calculation diff --git a/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGas.H b/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGas.H index 7ff3f054e3adfc9a42567bfbf2835eca07fd1121..566c3c972911bfdb5634ba70ac6699d47833bdcf 100644 --- a/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGas.H +++ b/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGas.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -105,7 +105,10 @@ public: // Constructors //- Construct from components - inline incompressiblePerfectGas(const Specie& sp); + inline incompressiblePerfectGas(const Specie& sp, const scalar pRef); + + //- Construct from incompressiblePerfectGas + inline incompressiblePerfectGas(const incompressiblePerfectGas& sp); //- Construct from Istream incompressiblePerfectGas(Istream&); @@ -173,6 +176,10 @@ public: // Member operators + inline incompressiblePerfectGas& operator= + ( + const incompressiblePerfectGas& + ); inline void operator+=(const incompressiblePerfectGas&); inline void operator-=(const incompressiblePerfectGas&); diff --git a/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H b/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H index 340d4b1e4c5f502320282a3256228329ee53abe2..ff2f3e233dfccfa21d08c5cb150ca4070fa0ff89 100644 --- a/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H +++ b/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,28 +25,40 @@ License #include "incompressiblePerfectGas.H" -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class Specie> inline Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas ( - const Specie& sp + const Specie& sp, const scalar pRef ) : - Specie(sp) + Specie(sp), + pRef_(pRef) {} -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template<class Specie> +inline Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas +( + const incompressiblePerfectGas& ipg +) +: + Specie(ipg), + pRef_(ipg.pRef_) +{} + template<class Specie> inline Foam::incompressiblePerfectGas<Specie>::incompressiblePerfectGas ( const word& name, - const incompressiblePerfectGas<Specie>& pg + const incompressiblePerfectGas<Specie>& ipg ) : - Specie(name, pg) + Specie(name, ipg), + pRef_(ipg.pRef_) {} @@ -109,7 +121,7 @@ inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::psi scalar T ) const { - return 0.0; + return 1.0/(this->R()*T); } @@ -120,7 +132,7 @@ inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::Z scalar ) const { - return 0.0; + return 1.0; } @@ -138,23 +150,43 @@ inline Foam::scalar Foam::incompressiblePerfectGas<Specie>::cpMcv // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // +template<class Specie> +inline Foam::incompressiblePerfectGas<Specie>& +Foam::incompressiblePerfectGas<Specie>::operator= +( + const incompressiblePerfectGas<Specie>& ipg +) +{ + Specie::operator=(ipg); + + pRef_ = ipg.pRef_; + + return *this; +} + template<class Specie> inline void Foam::incompressiblePerfectGas<Specie>::operator+= ( - const incompressiblePerfectGas<Specie>& pg + const incompressiblePerfectGas<Specie>& ipg ) { - Specie::operator+=(pg); + scalar molr1 = this->nMoles(); + Specie::operator+=(ipg); + molr1 /= this->nMoles(); + scalar molr2 = ipg.nMoles()/this->nMoles(); + + pRef_ = molr1*pRef_ + molr2*ipg.pRef_; } template<class Specie> inline void Foam::incompressiblePerfectGas<Specie>::operator-= ( - const incompressiblePerfectGas<Specie>& pg + const incompressiblePerfectGas<Specie>& ipg ) { - Specie::operator-=(pg); + Specie::operator-=(ipg); + pRef_ = ipg.pRef_; } @@ -170,14 +202,19 @@ inline void Foam::incompressiblePerfectGas<Specie>::operator*=(const scalar s) template<class Specie> inline Foam::incompressiblePerfectGas<Specie> Foam::operator+ ( - const incompressiblePerfectGas<Specie>& pg1, - const incompressiblePerfectGas<Specie>& pg2 + const incompressiblePerfectGas<Specie>& ipg1, + const incompressiblePerfectGas<Specie>& ipg2 ) { + scalar nMoles = ipg1.nMoles() + ipg2.nMoles(); + scalar molr1 = ipg1.nMoles()/nMoles; + scalar molr2 = ipg2.nMoles()/nMoles; + return incompressiblePerfectGas<Specie> ( - static_cast<const Specie&>(pg1) - + static_cast<const Specie&>(pg2) + static_cast<const Specie&>(ipg1) + + static_cast<const Specie&>(ipg2), + molr1*ipg1.pRef_ + molr2*ipg2.pRef_ ); } @@ -185,14 +222,15 @@ inline Foam::incompressiblePerfectGas<Specie> Foam::operator+ template<class Specie> inline Foam::incompressiblePerfectGas<Specie> Foam::operator- ( - const incompressiblePerfectGas<Specie>& pg1, - const incompressiblePerfectGas<Specie>& pg2 + const incompressiblePerfectGas<Specie>& ipg1, + const incompressiblePerfectGas<Specie>& ipg2 ) { return incompressiblePerfectGas<Specie> ( - static_cast<const Specie&>(pg1) - - static_cast<const Specie&>(pg2) + static_cast<const Specie&>(ipg1) + - static_cast<const Specie&>(ipg2), + ipg1.pRef_ ); } @@ -201,10 +239,14 @@ template<class Specie> inline Foam::incompressiblePerfectGas<Specie> Foam::operator* ( const scalar s, - const incompressiblePerfectGas<Specie>& pg + const incompressiblePerfectGas<Specie>& ipg ) { - return incompressiblePerfectGas<Specie>(s*static_cast<const Specie&>(pg)); + return incompressiblePerfectGas<Specie> + ( + s*static_cast<const Specie&>(ipg), + ipg.pRef_ + ); } diff --git a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/collapseDict b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/collapseDict index 95602e9516ee1e05fc61bb67816410b81bb08368..29dc22590f5de0448acc84741eceaedd6e6dd490 100644 --- a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/collapseDict +++ b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/collapseDict @@ -22,62 +22,6 @@ collapseEdgesCoeffs // The maximum angle between two edges that share a point attached to // no other edges maximumMergeAngle 5; - - // The amount that minimumEdgeLength will be reduced by for each - // edge if that edge's collapse generates a poor quality face - reductionFactor 0.5; -} - - -collapseFacesCoeffs -{ - // The initial face length factor - initialFaceLengthFactor 0.5; - - // The amount that initialFaceLengthFactor will be reduced by for each - // face if its collapse generates a poor quality face - reductionFactor $initialFaceLengthFactor; - - // If the face can't be collapsed to an edge, and it has a span less than - // the target face length multiplied by this coefficient, collapse it - // to a point. - maxCollapseFaceToPointSideLengthCoeff 0.3; - - // Allow early collapse of edges to a point - allowEarlyCollapseToPoint on; - - // Fraction to premultiply maxCollapseFaceToPointSideLengthCoeff by if - // allowEarlyCollapseToPoint is enabled - allowEarlyCollapseCoeff 0.2; - - // Defining how close to the midpoint (M) of the projected - // vertices line a projected vertex (X) can be before making this - // an invalid edge collapse - // - // X---X-g----------------M----X-----------g----X--X - // - // Only allow a collapse if all projected vertices are outwith - // guardFraction (g) of the distance form the face centre to the - // furthest vertex in the considered direction - guardFraction 0.1; -} - - -meshQualityCoeffs -{ - // Name of the dictionary that has the mesh quality coefficients used - // by motionSmoother::checkMesh - #include "meshQualityDict"; - - // Maximum number of smoothing iterations for the reductionFactors - maximumSmoothingIterations 2; - - // Maximum number of outer iterations is mesh quality checking is enabled - maximumIterations 10; - - // Maximum number of iterations deletion of a point can cause a bad face - // to be constructed before it is forced to not be deleted - maxPointErrorCount 5; } diff --git a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/meshQualityDict b/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/meshQualityDict deleted file mode 100644 index 5f6ea7accc1901b95af03b90126f3ffec84e46fb..0000000000000000000000000000000000000000 --- a/tutorials/compressible/rhoCentralFoam/biconic25-55Run35/system/meshQualityDict +++ /dev/null @@ -1,67 +0,0 @@ -/*--------------------------------*- 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 dictionary; - object meshQualityDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -//- Maximum non-orthogonality allowed. Set to 180 to disable. -maxNonOrtho 180; - -//- Max skewness allowed. Set to <0 to disable. -maxBoundarySkewness 50; - -//- Max skewness allowed. Set to <0 to disable. -maxInternalSkewness 10; - -//- Max concaveness allowed. Is angle (in degrees) below which concavity -// is allowed. 0 is straight face, <0 would be convex face. -// Set to 180 to disable. -maxConcave 80; - -//- Minimum pyramid volume. Is absolute volume of cell pyramid. -// Set to a sensible fraction of the smallest cell volume expected. -// Set to very negative number (e.g. -1E30) to disable. -minVol 1e-20; - -//- Minimum quality of the tet formed by the face-centre -// and variable base point minimum decomposition triangles and -// the cell centre. This has to be a positive number for tracking -// to work. Set to very negative number (e.g. -1E30) to -// disable. -// <0 = inside out tet, -// 0 = flat tet -// 1 = regular tet -minTetQuality 1e-30; - -//- Minimum face area. Set to <0 to disable. -minArea -1; - -//- Minimum face twist. Set to <-1 to disable. dot product of face normal -//- and face centre triangles normal -minTwist 0.0; - -//- minimum normalised cell determinant -//- 1 = hex, <= 0 = folded or flattened illegal cell -minDeterminant 0.001; - -//- minFaceWeight (0 -> 0.5) -minFaceWeight 0.02; - -//- minVolRatio (0 -> 1) -minVolRatio 0.01; - -//must be >0 for Fluent compatibility -minTriangleTwist -1; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvOptions b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvOptions index 246601aa16809058e5c22005e82551c4f7c21e38..2fd3242b6db2cfa6261812c3bf26be434dad3c45 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvOptions +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvOptions @@ -33,12 +33,18 @@ porosity1 coordinateSystem { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } } } } } -************************************************************************* // +//************************************************************************* // diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porosityProperties b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvOptions similarity index 51% rename from tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porosityProperties rename to tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvOptions index 22add8ff299919833276bb7b4770c81785d1ace6..2fd3242b6db2cfa6261812c3bf26be434dad3c45 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/porosityProperties +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvOptions @@ -10,28 +10,41 @@ FoamFile version 2.0; format ascii; class dictionary; - location "constant"; - object porosityProperties; + location "system"; + object fvOptions; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // porosity1 { - type DarcyForchheimer; - active yes; + type explicitPorositySource; + active true; + selectionMode cellZone; cellZone porosity; - DarcyForchheimerCoeffs + explicitPorositySourceCoeffs { - d d [0 -2 0 0 0 0 0] (5e7 -1000 -1000); - f f [0 -1 0 0 0 0 0] (0 0 0); + type DarcyForchheimer; - coordinateSystem + DarcyForchheimerCoeffs { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + d d [0 -2 0 0 0 0 0] (5e7 -1000 -1000); + f f [0 -1 0 0 0 0 0] (0 0 0); + + coordinateSystem + { + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } + } } } } -// ************************************************************************* // + +//************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSolution b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSolution index 084c382e84f96dcde779b055cbbcbd6d39117bc7..d87df4b492666a672b779c554923ed7616b4f5d1 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSolution +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSolution @@ -57,7 +57,7 @@ PIMPLE nCorrectors 1; nNonOrthogonalCorrectors 0; rhoMin rhoMin [ 1 -3 0 0 0 ] 0.5; - rhoMax rhoMax [ 1 -3 0 0 0 ] 2.0; + rhoMax rhoMax [ 1 -3 0 0 0 ] 1.5; residualControl { @@ -76,7 +76,7 @@ relaxationFactors fields { "p.*" 0.3; - "rho.*" 1; + "rho.*" 0.01; } equations { diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/porosityProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/porosityProperties deleted file mode 100644 index 1a76ef1d80b1b22f34ad537480509ea465b31411..0000000000000000000000000000000000000000 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/porosityProperties +++ /dev/null @@ -1,37 +0,0 @@ -/*--------------------------------*- 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 dictionary; - location "constant"; - object porosityProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -porosity1 -{ - type DarcyForchheimer; - active yes; - cellZone stator; - - DarcyForchheimerCoeffs - { - d d [0 -2 0 0 0 0 0] (1e5 -1000 -1000); - f f [0 -1 0 0 0 0 0] (0 0 0); - - coordinateSystem - { - e1 (1 0 0); - e2 (0 1 0); - } - } -} - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvOptions b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvOptions new file mode 100644 index 0000000000000000000000000000000000000000..ad93222fb976459e9afc1d5924b2d40834a29c46 --- /dev/null +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvOptions @@ -0,0 +1,69 @@ +/*--------------------------------*- 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 dictionary; + location "system"; + object fvOptions; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +porosity1 +{ + type explicitPorositySource; + active yes; + selectionMode cellZone; + cellZone stator; + + explicitPorositySourceCoeffs + { + type DarcyForchheimer; + + DarcyForchheimerCoeffs + { + d d [0 -2 0 0 0 0 0] (1e5 -1000 -1000); + f f [0 -1 0 0 0 0 0] (0 0 0); + + coordinateSystem + { + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (1 0 0); + e2 (0 1 0); + } + } + } + } +} + + +MRF1 +{ + type MRFSource; + active yes; + selectionMode cellZone; + cellZone rotor; + + MRFSourceCoeffs + { + // Fixed patches (by default they 'move' with the MRF zone) + nonRotatingPatches (); + + origin (0 0 0); + axis (0 0 1); + omega constant 1047.2; + } +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/porosityProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvOptions similarity index 56% rename from tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/porosityProperties rename to tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvOptions index 650f01268ca7bb4dfe14c25d5d8f2a860cda2544..7dba85c0dcd3f2dc9774bb4a6a9ef91b7034f5f4 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/porosityProperties +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvOptions @@ -10,26 +10,38 @@ FoamFile version 2.0; format ascii; class dictionary; - location "constant"; - object porosityProperties; + location "system"; + object fvOptions; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // porosity1 { - type DarcyForchheimer; - active yes; + type explicitPorositySource; + active true; + selectionMode cellZone; cellZone porosity; - DarcyForchheimerCoeffs + explicitPorositySourceCoeffs { - d d [0 -2 0 0 0 0 0] (5e7 -1000 -1000); - f f [0 -1 0 0 0 0 0] (0 0 0); + type DarcyForchheimer; - coordinateSystem + DarcyForchheimerCoeffs { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + d d [0 -2 0 0 0 0 0] (5e7 -1000 -1000); + f f [0 -1 0 0 0 0 0] (0 0 0); + + coordinateSystem + { + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } + } } } } diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/MRFProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/MRFProperties deleted file mode 100644 index fd749d03963870c76ab4a9d85ad86bd95c33a71f..0000000000000000000000000000000000000000 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/MRFProperties +++ /dev/null @@ -1,20 +0,0 @@ -/*--------------------------------*- 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 dictionary; - location "constant"; - object MRFProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -// none - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties index 650f01268ca7bb4dfe14c25d5d8f2a860cda2544..9795d83b85c0524d4e1a2c92dc2b3235fa7ebdad 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/porosityProperties @@ -28,8 +28,14 @@ porosity1 coordinateSystem { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } } } } diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvOptions b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvOptions index d75a43c56502a9b451c820f3e98561755f44fcf6..43b573b7a90e2e90e0f3d2b85648dbfe00d4f4ba 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvOptions +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvOptions @@ -51,12 +51,18 @@ porosity1 coordinateSystem { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } } } } } -************************************************************************* // +//***************************************************************************// diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution index a1e310922224d85f5ade01fa361b7ed0e1aeba01..56c28a929a15d0a6132817100e86302594d41a60 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSolution @@ -76,7 +76,7 @@ relaxationFactors fields { p 0.3; - rho 0.05; + rho 0.02; } equations { diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/createBafflesDict b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/createBafflesDict index 8dda6535ddd214520faf6f7a65942b85862879d8..bc1ec594fd62af581207933a1c55e8505ab839ff 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/createBafflesDict +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/createBafflesDict @@ -23,7 +23,7 @@ internalFacesOnly true; // Baffles to create. baffles { - baffleFaces + baffleFacesThermoBaffle1D { //- Use predefined faceZone to select faces and orientation. type faceZone; @@ -52,61 +52,27 @@ baffles { T { - type compressible::thermoBaffle; - - // Coupled BC. - neighbourFieldName T; - kappa fluidThermo; - kappaName none; - - // Thermo baffle model - thermoBaffleModel thermoBaffle; - regionName baffleRegion; - infoOutput no; - active yes; - thermoBaffleCoeffs + type compressible::thermoBaffle1D<hConstSolidThermoPhysics>; + baffleActivated yes; + thickness uniform 0.005; // thickness [m] + Qs uniform 100; // heat flux [W/m2] + specie { + nMoles 1; + molWeight 20; } - - // Solid thermo - thermoType + transport { - type heSolidThermo; - mixture pureMixture; - transport constIso; - thermo hConst; - equationOfState rhoConst; - specie specie; - energy sensibleEnthalpy; + kappa 1; } - - mixture + thermodynamics { - specie - { - nMoles 1; - molWeight 20; - } - transport - { - kappa 0.01; - } - thermodynamics - { - Hf 0; - Cp 15; - } - equationOfState - { - rho 80; - } + Hf 0; + Cp 10; } - - radiation + equationOfState { - radiationModel opaqueSolid; - absorptionEmissionModel none; - scatterModel none; + rho 10; } value uniform 300; @@ -160,7 +126,10 @@ baffles offsetMode uniform; offset (0 0 0); - ${..master.patchFields} + patchFields + { + ${...master.patchFields} + } } } } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvOptions b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvOptions index 00978429d9b793b60ee8a71b46e1991097ba27ff..475ac8e04026f46bd037d6bde5a6ece872345137 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvOptions +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvOptions @@ -69,7 +69,7 @@ MRF1 { origin (0.25 0.25 0.25); axis (0 0 1); - omega 5.305; // 500 rpm + omega 477.5; // 500 rpm } } diff --git a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFProperties b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFProperties deleted file mode 100644 index 623823d3ab9ee5cc818a1b745aa3cc9cceefd2a9..0000000000000000000000000000000000000000 --- a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/MRFProperties +++ /dev/null @@ -1,31 +0,0 @@ -/*--------------------------------*- 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 dictionary; - location "constant"; - object MRFProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -zone1 -{ - cellZone rotor; - active yes; - - // Fixed patches (by default they 'move' with the MRF zone) - nonRotatingPatches (); - - origin (0 0 0); - axis (0 0 1); - omega constant 104.72; -} - -// ************************************************************************* // diff --git a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/porosityProperties b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/porosityProperties index 650f01268ca7bb4dfe14c25d5d8f2a860cda2544..80421b7786fe931d968685c97f6069ff94f228fc 100644 --- a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/porosityProperties +++ b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/porosityProperties @@ -28,8 +28,14 @@ porosity1 coordinateSystem { - e1 (0.70710678 0.70710678 0); - e2 (0 0 1); + type cartesian; + origin (0 0 0); + coordinateRotation + { + type axesRotation; + e1 (0.70710678 0.70710678 0); + e2 (0 0 1); + } } } } diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/forceCoeffs b/tutorials/incompressible/simpleFoam/motorBike/system/forceCoeffs index c3a066a07f8053cb5dba6f792bb4bc3d4da318b3..7ecdf6047874fcd47b307c4fbd469df4bf7e2bcc 100644 --- a/tutorials/incompressible/simpleFoam/motorBike/system/forceCoeffs +++ b/tutorials/incompressible/simpleFoam/motorBike/system/forceCoeffs @@ -10,8 +10,7 @@ forceCoeffs1 { type forceCoeffs; functionObjectLibs ( "libforces.so" ); - outputControl timeStep; - outputInterval 1; + outputControl outputTime; log yes; patches ( "motorBike.*" ); diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties index bcb3e3e80d63667f4ed013fb1be631777cff6e33..b59b42445e9092a2997977b7433fd3d158f968d4 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/constant/reactingCloud1Properties @@ -89,7 +89,7 @@ subModels duration 10.0; parcelsPerSecond 200; } - ] + } dispersionModel none; diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/Allrun b/tutorials/lagrangian/reactingParcelFoam/filter/Allrun index 7db81c26764f11073eff2d532bd2f1c1ba524b88..4bebf16ca7c09519359d95eeb65552e919e5657a 100755 --- a/tutorials/lagrangian/reactingParcelFoam/filter/Allrun +++ b/tutorials/lagrangian/reactingParcelFoam/filter/Allrun @@ -13,7 +13,7 @@ runApplication blockMesh runApplication topoSet # create baffles and fields -createBaffles -overwrite +runApplication createBaffles -overwrite runApplication $application diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/porosityProperties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/porosityProperties deleted file mode 100644 index 93c4de650d34640250d9533b2491c143b31daa9a..0000000000000000000000000000000000000000 --- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/porosityProperties +++ /dev/null @@ -1,38 +0,0 @@ -/*--------------------------------*- 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 dictionary; - location "constant"; - object porosityProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -filter1 -{ - cellZone filter; - active true; - type DarcyForchheimer; - - DarcyForchheimerCoeffs - { - d d [0 -2 0 0 0 0 0] (500000 -1000 -1000); - f f [0 -1 0 0 0 0 0] (0 0 0); - - coordinateSystem - { - e1 (1 0 0); - e2 (0 1 0); - } - } -} - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/system/fvOptions b/tutorials/lagrangian/reactingParcelFoam/filter/system/fvOptions index c7dd4992aa7e4c03c46cff585984fe7162ecde89..a6fa8898ba577ffbd6af1c575adf5d43f08ac45c 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/system/fvOptions +++ b/tutorials/lagrangian/reactingParcelFoam/filter/system/fvOptions @@ -15,6 +15,32 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +filter1 +{ + type explicitPorositySource; + selectionMode cellZone; + cellZone filter; + active true; + + explicitPorositySourceCoeffs + { + type DarcyForchheimer; + + DarcyForchheimerCoeffs + { + d d [0 -2 0 0 0 0 0] (500000 -1000 -1000); + f f [0 -1 0 0 0 0 0] (0 0 0); + + coordinateSystem + { + e1 (1 0 0); + e2 (0 1 0); + } + } + } +} + + massSource1 { type scalarSemiImplicitSource; diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/U b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/U index 668d7aba83aea43be5856d2d1b1f17c16bc946f2..a9f5e35e969c3fa46e9af0fb5fdfc30dc61198aa 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/U +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/U @@ -41,6 +41,10 @@ boundaryField type pressureInletOutletVelocity; value uniform (0 0 0); } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -49,10 +53,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1 b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1 index 6e0ae20fd8fd38dab56c824a87642acadfa018b0..67fe78ad7490ec8c0b915a570e98432fa0292a20 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1 +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1 @@ -11,13 +11,2285 @@ FoamFile format ascii; class volScalarField; location "0"; - object alpha1.org; + object alpha1; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 0 0 0 0]; -internalField uniform 0; +internalField nonuniform List<scalar> +2268 +( +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +) +; boundaryField { @@ -39,6 +2311,10 @@ boundaryField inletValue uniform 0; value uniform 0; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -47,10 +2323,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1.org b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1.org index 6e0ae20fd8fd38dab56c824a87642acadfa018b0..bf6106677fc7d27dc3791d3ab7196a30e9a2c411 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1.org +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/alpha1.org @@ -39,6 +39,10 @@ boundaryField inletValue uniform 0; value uniform 0; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -47,10 +51,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/epsilon b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/epsilon index 6a39556a33feb3ded4336046ab48296744df9e67..e8f209f7c1ce1b7aacde6163358e2be901e1d96d 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/epsilon +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/epsilon @@ -24,16 +24,25 @@ boundaryField leftWall { type epsilonWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0.1; } rightWall { type epsilonWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0.1; } lowerWall { type epsilonWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0.1; } atmosphere @@ -42,6 +51,10 @@ boundaryField inletValue uniform 0.1; value uniform 0.1; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -50,10 +63,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/k b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/k index b41cfbed79ce11215fd2a8a0e46db2b7c672294c..dc8fe2b2d099d7d83a2af62cf2875edd0e5899cc 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/k +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/k @@ -42,6 +42,10 @@ boundaryField inletValue uniform 0.1; value uniform 0.1; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -50,10 +54,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nuTilda b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nuTilda index f5c21a8e5af8425613988b61e1a62c9e20a92337..ad8366577c71dc04da878ee639ba0d52b0fb14a9 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nuTilda +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nuTilda @@ -39,6 +39,10 @@ boundaryField inletValue uniform 0; value uniform 0; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -47,10 +51,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nut b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nut index bc57ae2a976bbc40492b22a15c8aa31e1680b7da..53aeee97bf16b8de171f1eff4422b10b1a94095a 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nut +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/nut @@ -24,16 +24,25 @@ boundaryField leftWall { type nutkWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0; } rightWall { type nutkWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0; } lowerWall { type nutkWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; value uniform 0; } atmosphere @@ -41,6 +50,10 @@ boundaryField type calculated; value uniform 0; } + defaultFaces + { + type empty; + } porous_half0 { type cyclic; @@ -49,10 +62,6 @@ boundaryField { type cyclic; } - defaultFaces - { - type empty; - } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh index c085da2cb601d8fefbe9daf36bd3be31cf44688d..cb36fb3b7dfaedd6e882b4e2afe3e553bb0955df 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh @@ -25,19 +25,16 @@ boundaryField { type fixedFluxPressure; gradient uniform 0; - value uniform 0; } rightWall { type fixedFluxPressure; gradient uniform 0; - value uniform 0; } lowerWall { type fixedFluxPressure; gradient uniform 0; - value uniform 0; } atmosphere { @@ -48,29 +45,28 @@ boundaryField p0 uniform 0; value uniform 0; } + defaultFaces + { + type empty; + } porous_half0 { type porousBafflePressure; patchType cyclic; jump uniform 0; + value uniform 0; D 700; I 500; length 1.05; - value uniform 0; } porous_half1 { type porousBafflePressure; patchType cyclic; - jump uniform 0; + value uniform 0; D 700; I 500; length 1.05; - value uniform 0; - } - defaultFaces - { - type empty; } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary new file mode 100644 index 0000000000000000000000000000000000000000..49282f81f06ff1afeface41c55ac7aedfadccc14 --- /dev/null +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary @@ -0,0 +1,73 @@ +/*--------------------------------*- 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; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +7 +( + leftWall + { + type wall; + nFaces 50; + startFace 4419; + } + rightWall + { + type wall; + nFaces 50; + startFace 4469; + } + lowerWall + { + type wall; + nFaces 62; + startFace 4519; + } + atmosphere + { + type patch; + nFaces 46; + startFace 4581; + } + defaultFaces + { + type empty; + inGroups 1(empty); + nFaces 4536; + startFace 4627; + } + porous_half0 + { + type cyclic; + inGroups 1(cyclic); + nFaces 13; + startFace 9163; + matchTolerance 0.0001; + transform unknown; + neighbourPatch porous_half1; + } + porous_half1 + { + type cyclic; + inGroups 1(cyclic); + nFaces 13; + startFace 9176; + matchTolerance 0.0001; + transform unknown; + neighbourPatch porous_half0; + } +) + +// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict index c127ff67d25c8e2175277ec631ffa86c6f6f7730..46e0c66bf817f5a8ee41f406537d8e130e9ad627 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/createBafflesDict @@ -65,7 +65,10 @@ baffles type cyclic; neighbourPatch porous_half0; - ${..master.patchFields} + patchFields + { + ${...master.patchFields} + } } } }