From 2aec2496477ee1492f3ae247b24586d62c4aed89 Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Wed, 21 Jan 2015 19:21:39 +0000 Subject: [PATCH] Updated the whole of OpenFOAM to use the new templated TurbulenceModels library The old separate incompressible and compressible libraries have been removed. Most of the commonly used RANS and LES models have been upgraded to the new framework but there are a few missing which will be added over the next few days, in particular the realizable k-epsilon model. Some of the less common incompressible RANS models have been introduced into the new library instantiated for incompressible flow only. If they prove to be generally useful they can be templated for compressible and multiphase application. The Spalart-Allmaras DDES and IDDES models have been thoroughly debugged, removing serious errors concerning the use of S rather than Omega. The compressible instances of the models have been augmented by a simple backward-compatible eddyDiffusivity model for thermal transport based on alphat and alphaEff. This will be replaced with a separate run-time selectable thermal transport model framework in a few weeks. For simplicity and ease of maintenance and further development the turbulent transport and wall modeling is based on nut/nuEff rather than mut/muEff for compressible models so that all forms of turbulence models can use the same wall-functions and other BCs. All turbulence model selection made in the constant/turbulenceProperties dictionary with RAS and LES as sub-dictionaries rather than in separate files which added huge complexity for multiphase. All tutorials have been updated so study the changes and update your own cases by comparison with similar cases provided. Sorry for the inconvenience in the break in backward-compatibility but this update to the turbulence modeling is an essential step in the future of OpenFOAM to allow more models to be added and maintained for a wider range of cases and physics. Over the next weeks and months more turbulence models will be added of single and multiphase flow, more additional sub-models and further development and testing of existing models. I hope this brings benefits to all OpenFOAM users. Henry G. Weller --- .../solvers/combustion/PDRFoam/Make/options | 8 +- .../solvers/combustion/PDRFoam/PDRFoam.C | 4 +- .../combustion/PDRFoam/PDRFoamAutoRefine.C | 4 +- .../basicXiSubXiEq/basicXiSubXiEq.C | 3 +- .../XiGModels/basicXiSubG/basicXiSubG.C | 3 +- .../dragModels/PDRDragModel/PDRDragModel.H | 4 +- .../PDRModels/dragModels/basic/basic.C | 3 +- .../turbulence/PDRkEpsilon/PDRkEpsilon.C | 40 +- .../turbulence/PDRkEpsilon/PDRkEpsilon.H | 14 +- .../XiModels/XiEqModels/XiEqModel/XiEqModel.C | 3 +- .../XiModels/XiEqModels/XiEqModel/XiEqModel.H | 4 +- .../XiModels/XiGModels/XiGModel/XiGModel.H | 4 +- .../PDRFoam/XiModels/XiModel/XiModel.H | 5 +- .../PDRFoam/XiModels/transport/transport.C | 7 +- .../solvers/combustion/XiFoam/Make/options | 8 +- .../solvers/combustion/XiFoam/XiFoam.C | 4 +- .../solvers/combustion/chemFoam/Make/options | 7 +- .../solvers/combustion/chemFoam/chemFoam.C | 4 +- .../combustion/coldEngineFoam/Make/options | 8 +- .../coldEngineFoam/coldEngineFoam.C | 4 +- .../combustion/engineFoam/Make/options | 8 +- .../combustion/engineFoam/engineFoam.C | 4 +- .../solvers/combustion/fireFoam/Make/options | 7 +- .../solvers/combustion/fireFoam/fireFoam.C | 4 +- .../LTSReactingFoam/LTSReactingFoam.C | 4 +- .../reactingFoam/LTSReactingFoam/Make/options | 8 +- .../combustion/reactingFoam/Make/options | 8 +- .../combustion/reactingFoam/reactingFoam.C | 4 +- .../rhoReactingBuoyantFoam/Make/options | 8 +- .../rhoReactingBuoyantFoam.C | 4 +- .../reactingFoam/rhoReactingFoam/Make/options | 8 +- .../rhoReactingFoam/rhoReactingFoam.C | 4 +- .../compressible/rhoCentralFoam/Make/options | 8 +- .../rhoCentralDyMFoam/Make/options | 8 +- .../rhoCentralDyMFoam/rhoCentralDyMFoam.C | 4 +- .../rhoCentralFoam/rhoCentralFoam.C | 4 +- .../compressible/rhoPimpleFoam/Make/options | 8 +- .../rhoLTSPimpleFoam/Make/options | 8 +- .../rhoLTSPimpleFoam/rhoLTSPimpleFoam.C | 4 +- .../rhoPimpleDyMFoam/Make/options | 8 +- .../rhoPimpleDyMFoam/rhoPimpleDyMFoam.C | 4 +- .../rhoPimpleFoam/rhoPimpleFoam.C | 4 +- .../rhoPimpleFoam/rhoPimplecFoam/Make/options | 8 +- .../rhoPimplecFoam/rhoPimplecFoam.C | 4 +- .../compressible/rhoSimpleFoam/Make/options | 8 +- .../rhoPorousSimpleFoam/Make/options | 8 +- .../rhoPorousSimpleFoam/rhoPorousSimpleFoam.C | 4 +- .../rhoSimpleFoam/rhoSimpleFoam.C | 4 +- .../rhoSimpleFoam/rhoSimplecFoam/Make/options | 7 +- .../rhoSimplecFoam/rhoSimplecFoam.C | 4 +- .../compressible/sonicFoam/Make/options | 8 +- .../sonicFoam/sonicDyMFoam/Make/options | 8 +- .../sonicFoam/sonicDyMFoam/sonicDyMFoam.C | 4 +- .../compressible/sonicFoam/sonicFoam.C | 4 +- .../buoyantBoussinesqPimpleFoam/Make/options | 22 +- .../buoyantBoussinesqPimpleFoam.C | 2 +- .../buoyantBoussinesqSimpleFoam/Make/options | 18 +- .../buoyantBoussinesqSimpleFoam.C | 2 +- .../buoyantPimpleFoam/Make/options | 9 +- .../buoyantPimpleFoam/buoyantPimpleFoam.C | 4 +- .../buoyantSimpleFoam/Make/options | 9 +- .../buoyantSimpleFoam/buoyantSimpleFoam.C | 4 +- .../chtMultiRegionFoam/Make/options | 8 +- .../chtMultiRegionFoam/chtMultiRegionFoam.C | 4 +- .../chtMultiRegionSimpleFoam/Make/options | 10 +- .../chtMultiRegionSimpleFoam.C | 4 +- .../heatTransfer/thermoFoam/Make/options | 12 +- .../heatTransfer/thermoFoam/thermoFoam.C | 6 +- .../adjointShapeOptimizationFoam/Make/options | 8 +- .../adjointShapeOptimizationFoam.C | 2 +- .../incompressible/boundaryFoam/Make/options | 8 +- .../boundaryFoam/boundaryFoam.C | 2 +- .../incompressible/pimpleFoam/Make/options | 8 +- .../pimpleFoam/SRFPimpleFoam/Make/options | 8 +- .../pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C | 2 +- .../pimpleFoam/pimpleDyMFoam/Make/options | 8 +- .../pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C | 2 +- .../incompressible/pimpleFoam/pimpleFoam.C | 2 +- .../incompressible/pisoFoam/Make/options | 8 +- .../incompressible/pisoFoam/pisoFoam.C | 2 +- .../incompressible/simpleFoam/Make/options | 8 +- .../simpleFoam/SRFSimpleFoam/Make/options | 9 +- .../simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C | 2 +- .../simpleFoam/porousSimpleFoam/Make/options | 8 +- .../porousSimpleFoam/porousSimpleFoam.C | 2 +- .../incompressible/simpleFoam/simpleFoam.C | 2 +- .../DPMTurbulenceModels/DPMTurbulenceModels.C | 4 +- .../lagrangian/DPMFoam/MPPICFoam/Make/options | 2 +- .../solvers/lagrangian/DPMFoam/Make/options | 2 +- .../lagrangian/coalChemistryFoam/Make/options | 9 +- .../coalChemistryFoam/coalChemistryFoam.C | 4 +- .../Make/options | 7 +- .../Make/options | 7 +- .../icoUncoupledKinematicParcelDyMFoam.C | 4 +- .../icoUncoupledKinematicParcelFoam.C | 4 +- .../reactingParcelFilmFoam/Make/options | 7 +- .../reactingParcelFilmFoam.C | 4 +- .../LTSReactingParcelFoam.C | 4 +- .../LTSReactingParcelFoam/Make/options | 8 +- .../reactingParcelFoam/Make/options | 8 +- .../reactingParcelFoam/reactingParcelFoam.C | 4 +- .../simpleReactingParcelFoam/Make/options | 8 +- .../simpleReactingParcelFoam.C | 4 +- .../solvers/lagrangian/sprayFoam/Make/options | 8 +- .../sprayFoam/sprayEngineFoam/Make/options | 8 +- .../sprayEngineFoam/sprayEngineFoam.C | 4 +- .../solvers/lagrangian/sprayFoam/sprayFoam.C | 4 +- .../uncoupledKinematicParcelFoam/Make/options | 8 +- .../uncoupledKinematicParcelFoam.C | 4 +- .../multiphase/cavitatingFoam/Make/options | 13 +- .../cavitatingDyMFoam/Make/options | 15 +- .../cavitatingDyMFoam/cavitatingDyMFoam.C | 4 +- .../cavitatingFoam/cavitatingFoam.C | 4 +- .../compressibleInterFoam/Make/options | 8 +- .../compressibleInterDyMFoam/Make/options | 8 +- .../compressibleInterDyMFoam.C | 4 +- .../compressibleInterFoam.C | 4 +- .../Make/options | 8 +- .../compressibleMultiphaseInterFoam.C | 4 +- .../interFoam/LTSInterFoam/LTSInterFoam.C | 4 +- .../interFoam/LTSInterFoam/Make/options | 8 +- .../solvers/multiphase/interFoam/Make/options | 8 +- .../interFoam/interDyMFoam/Make/options | 8 +- .../interFoam/interDyMFoam/interDyMFoam.C | 4 +- .../solvers/multiphase/interFoam/interFoam.C | 4 +- .../interFoam/interMixingFoam/Make/options | 8 +- .../interMixingFoam/interMixingFoam.C | 4 +- .../interFoam/porousInterFoam/Make/options | 8 +- .../porousInterFoam/porousInterFoam.C | 4 +- .../interPhaseChangeFoam/Make/options | 8 +- .../interPhaseChangeDyMFoam/Make/options | 8 +- .../interPhaseChangeDyMFoam.C | 4 +- .../interPhaseChangeFoam.C | 4 +- .../multiphaseEulerFoam/Make/options | 8 +- .../multiphase/multiphaseEulerFoam/UEqns.H | 2 +- .../multiphaseEulerFoam/createFields.H | 6 +- .../multiphaseEulerFoam/multiphaseEulerFoam.C | 6 +- .../multiphaseInterFoam/Make/options | 8 +- .../multiphaseInterDyMFoam/Make/options | 8 +- .../multiphaseInterDyMFoam.C | 4 +- .../multiphaseInterFoam/multiphaseInterFoam.C | 4 +- .../potentialFreeSurfaceFoam/Make/options | 8 +- .../potentialFreeSurfaceDyMFoam/Make/options | 8 +- .../potentialFreeSurfaceDyMFoam.C | 2 +- .../potentialFreeSurfaceFoam.C | 2 +- .../twoLiquidMixingFoam/Make/options | 9 +- .../twoLiquidMixingFoam/twoLiquidMixingFoam.C | 4 +- applications/test/PisoFoam/Make/files | 3 - applications/test/PisoFoam/Make/options | 14 - applications/test/PisoFoam/PisoFoam.C | 149 ----- applications/test/PisoFoam/turbulenceModel.H | 9 - applications/test/RhoPimpleFoam/EEqn.H | 33 - applications/test/RhoPimpleFoam/Make/files | 3 - applications/test/RhoPimpleFoam/Make/options | 21 - .../test/RhoPimpleFoam/rhoPimpleFoam.C | 107 ---- .../test/RhoPimpleFoam/turbulenceModel.H | 9 - .../mesh/advanced/PDRMesh/Make/options | 6 +- .../foamDebugSwitches/Make/options | 13 +- .../miscellaneous/foamHelp/Make/options | 9 +- .../foamHelp/helpTypes/Make/options | 9 +- .../execFlowFunctionObjects/Make/options | 12 +- .../execFlowFunctionObjects.C | 11 +- .../stressField/stressComponents/Make/options | 10 +- .../postProcessing/turbulence/R/Make/options | 15 +- .../utilities/postProcessing/turbulence/R/R.C | 8 +- .../createTurbulenceFields/Make/options | 12 +- .../createTurbulenceFields.C | 7 +- .../velocityField/Pe/Make/options | 12 +- .../postProcessing/velocityField/Pe/Pe.C | 9 +- .../wall/wallHeatFlux/Make/options | 10 +- .../wall/wallHeatFlux/wallHeatFlux.C | 4 +- .../wall/wallShearStress/Make/options | 8 +- .../wall/wallShearStress/wallShearStress.C | 9 +- .../postProcessing/wall/yPlusLES/Make/options | 13 +- .../postProcessing/wall/yPlusLES/yPlusLES.C | 8 +- .../postProcessing/wall/yPlusRAS/Make/options | 16 +- .../postProcessing/wall/yPlusRAS/yPlusRAS.C | 42 +- .../applyBoundaryLayer/Make/options | 12 +- .../applyBoundaryLayer/applyBoundaryLayer.C | 4 +- .../Make/files | 3 - .../Make/options | 13 - .../applyWallFunctionBoundaryConditions.C | 363 ----------- .../Make/options | 3 +- .../faceAgglomerate/Make/options | 1 - .../preProcessing/viewFactorsGen/Make/options | 1 - src/Allwmake | 1 - .../physicoChemicalConstants.H | 2 +- .../CompressibleTurbulenceModel.C | 3 +- .../CompressibleTurbulenceModel.H | 3 +- src/TurbulenceModels/compressible/Make/files | 17 +- .../compressible/Make/options | 6 +- .../SpecificCompressibleTurbulenceModel.C | 99 +++ .../SpecificCompressibleTurbulenceModel.H} | 78 ++- .../compressibleTurbulenceModel.H | 8 +- .../eddyDiffusivity/eddyDiffusivity.C | 146 +++++ .../eddyDiffusivity/eddyDiffusivity.H | 180 ++++++ .../thermalDiffusivity/thermalDiffusivity.C | 124 ++++ .../thermalDiffusivity/thermalDiffusivity.H | 176 +++++ .../compressible}/turbulenceModelDoc.H | 4 +- ...convectiveHeatTransferFvPatchScalarField.C | 26 +- ...convectiveHeatTransferFvPatchScalarField.H | 2 +- ...oupledTemperatureMixedFvPatchScalarField.C | 17 +- ...oupledTemperatureMixedFvPatchScalarField.H | 2 +- ...allHeatFluxTemperatureFvPatchScalarField.C | 2 +- ...allHeatFluxTemperatureFvPatchScalarField.H | 2 +- .../temperatureCoupledBase.C | 13 +- .../temperatureCoupledBase.H | 2 +- .../thermalBaffle1DFvPatchScalarField.C | 8 +- .../thermalBaffle1DFvPatchScalarField.H | 2 +- .../thermalBaffle1DFvPatchScalarFields.C | 2 +- .../thermalBaffle1DFvPatchScalarFields.H | 2 +- ...RateAdvectiveDiffusiveFvPatchScalarField.C | 21 +- ...RateAdvectiveDiffusiveFvPatchScalarField.H | 2 +- ...entHeatFluxTemperatureFvPatchScalarField.C | 2 +- ...entHeatFluxTemperatureFvPatchScalarField.H | 2 +- ...tureCoupledBaffleMixedFvPatchScalarField.C | 2 +- ...tureCoupledBaffleMixedFvPatchScalarField.H | 2 +- ...eratureRadCoupledMixedFvPatchScalarField.C | 2 +- ...eratureRadCoupledMixedFvPatchScalarField.H | 2 +- ...ayatillekeWallFunctionFvPatchScalarField.C | 27 +- ...ayatillekeWallFunctionFvPatchScalarField.H | 2 +- .../alphatWallFunctionFvPatchScalarField.C | 29 +- .../alphatWallFunctionFvPatchScalarField.H | 13 +- .../wallHeatTransferFvPatchScalarField.C | 10 +- .../wallHeatTransferFvPatchScalarField.H | 2 +- .../makeTurbulenceModel.H | 128 ++++ .../turbulentFluidThermoModel.H} | 51 +- .../turbulentFluidThermoModels.C} | 27 +- .../IncompressibleTurbulenceModel.C | 30 +- .../IncompressibleTurbulenceModel.H | 13 +- .../incompressible/Make/files | 19 +- .../incompressible/Make/options | 2 +- .../SpecificIncompressibleTurbulenceModel.C | 98 +++ .../SpecificIncompressibleTurbulenceModel.H} | 76 ++- .../incompressible}/turbulenceModelDoc.H | 4 +- .../RAS/LamBremhorstKE/LamBremhorstKE.C | 133 ++-- .../RAS/LamBremhorstKE/LamBremhorstKE.H | 45 +- .../RAS/LienCubicKE/LienCubicKE.C | 245 +++---- .../RAS/LienCubicKE/LienCubicKE.H | 44 +- .../RAS/LienCubicKELowRe/LienCubicKELowRe.C | 285 +++------ .../RAS/LienCubicKELowRe/LienCubicKELowRe.H | 47 +- .../LienCubicKELowReSetWallDissipation.H | 0 .../LienLeschzinerLowRe/LienLeschzinerLowRe.C | 155 ++--- .../LienLeschzinerLowRe/LienLeschzinerLowRe.H | 46 +- .../LienLeschzinerLowReSetWallDissipation.H | 0 .../RAS/RNGkEpsilon/RNGkEpsilon.C | 142 ++--- .../RAS/RNGkEpsilon/RNGkEpsilon.H | 44 +- .../fWallFunctionFvPatchScalarField.C | 23 +- .../fWallFunctionFvPatchScalarField.H | 6 +- .../v2WallFunctionFvPatchScalarField.C | 22 +- .../v2WallFunctionFvPatchScalarField.H | 6 +- .../RAS/include/nonLinearWallFunctionsI.H | 2 +- .../RAS/include/wallDissipationI.H | 2 +- .../RAS/include/wallNonlinearViscosityI.H | 2 +- .../RAS/kOmega/Changes | 144 +++++ .../RAS/kOmega/kOmega.C | 140 ++-- .../RAS/kOmega/kOmega.H | 45 +- .../RAS/kkLOmega/kkLOmega.C | 152 ++--- .../RAS/kkLOmega/kkLOmega.H | 46 +- .../RAS/nonlinearKEShih/nonlinearKEShih.C} | 188 ++---- .../RAS/nonlinearKEShih/nonlinearKEShih.H} | 63 +- .../RAS/qZeta/qZeta.C | 146 ++--- .../RAS/qZeta/qZeta.H | 80 +-- .../turbulentTransportModels}/RAS/v2f/v2f.C | 164 ++--- .../turbulentTransportModels}/RAS/v2f/v2f.H | 78 +-- ...ayatillekeWallFunctionFvPatchScalarField.C | 22 +- ...ayatillekeWallFunctionFvPatchScalarField.H | 2 +- .../turbulentTransportModel.H} | 49 +- .../turbulentTransportModels.C} | 19 +- .../PhaseCompressibleTurbulenceModel.C | 3 +- .../PhaseCompressibleTurbulenceModel.H | 3 +- .../PhaseIncompressibleTurbulenceModel.C | 3 +- .../PhaseIncompressibleTurbulenceModel.H | 3 +- .../turbulenceModels/LES/LESModel/LESModel.C | 5 +- .../LES/LESdeltas}/IDDESDelta/IDDESDelta.C | 100 +-- .../LES/LESdeltas}/IDDESDelta/IDDESDelta.H | 21 +- .../LES/LESdeltas/LESdelta/LESdelta.C | 32 +- .../LES/LESdeltas/LESdelta/LESdelta.H | 37 +- .../LES/LESdeltas/PrandtlDelta/PrandtlDelta.C | 29 +- .../LES/LESdeltas/PrandtlDelta/PrandtlDelta.H | 9 +- .../cubeRootVolDelta/cubeRootVolDelta.C | 31 +- .../cubeRootVolDelta/cubeRootVolDelta.H | 9 +- .../LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C | 45 +- .../LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H | 9 +- .../LES/LESdeltas/smoothDelta/smoothDelta.C | 53 +- .../LES/LESdeltas/smoothDelta/smoothDelta.H | 31 +- .../smoothDelta/smoothDeltaDeltaDataI.H | 50 +- .../vanDriestDelta/vanDriestDelta.C | 88 +-- .../vanDriestDelta/vanDriestDelta.H | 20 +- .../SpalartAllmarasDDES/SpalartAllmarasDDES.C | 103 +-- .../SpalartAllmarasDDES/SpalartAllmarasDDES.H | 60 +- .../SpalartAllmarasDES/SpalartAllmarasDES.C | 454 +++++++++++++ .../SpalartAllmarasDES/SpalartAllmarasDES.H} | 180 +++--- .../SpalartAllmarasIDDES.C | 137 ++-- .../SpalartAllmarasIDDES.H | 71 ++- .../LES/eddyViscosity/LESeddyViscosity.C | 6 +- .../turbulenceModels/LES/kEqn/kEqn.H | 12 +- .../turbulenceModels/Make/files | 12 +- .../RAS/LaunderSharmaKE/LaunderSharmaKE.C | 310 +++++++++ .../RAS/LaunderSharmaKE/LaunderSharmaKE.H | 109 ++-- .../turbulenceModels/RAS/RASModel/RASModel.C | 3 +- .../turbulenceModels/RAS/RASModel/RASModel.H | 8 +- .../RAS/SpalartAllmaras/SpalartAllmaras.C | 389 +++++++++++ .../RAS/SpalartAllmaras/SpalartAllmaras.H | 108 ++-- .../atmBoundaryLayer/atmBoundaryLayer.C | 5 +- .../atmBoundaryLayer/atmBoundaryLayer.H | 9 +- ...ndaryLayerInletEpsilonFvPatchScalarField.C | 106 +-- ...ndaryLayerInletEpsilonFvPatchScalarField.H | 109 +--- ...atmBoundaryLayerInletKFvPatchScalarField.C | 5 +- ...atmBoundaryLayerInletKFvPatchScalarField.H | 15 +- ...daryLayerInletVelocityFvPatchVectorField.C | 130 +--- ...daryLayerInletVelocityFvPatchVectorField.H | 127 +--- .../v2WallFunctionFvPatchScalarField.C | 11 +- .../turbulenceModels/RAS/kEpsilon/kEpsilon.C | 80 +-- .../turbulenceModels/RAS/kEpsilon/kEpsilon.H | 30 +- .../RAS/kOmegaSST/kOmegaSST.H | 18 +- .../ReynoldsStress/ReynoldsStress.C | 221 +++++++ .../ReynoldsStress/ReynoldsStress.H} | 119 ++-- .../eddyViscosity/eddyViscosity.C | 60 +- .../eddyViscosity/eddyViscosity.H | 14 +- .../turbulenceModels/laminar/laminar.C | 56 +- .../turbulenceModels/laminar/laminar.H | 18 +- .../linearViscousStress/linearViscousStress.C | 129 ++++ .../linearViscousStress.H} | 95 ++- .../nonlinearEddyViscosity.C | 135 ++++ .../nonlinearEddyViscosity.H} | 96 ++- .../turbulenceModels/turbulenceModel.H | 5 +- .../turbulenceModels/turbulenceModelDoc.H | 6 +- src/combustionModels/FSD/FSD.C | 4 +- src/combustionModels/Make/options | 10 +- src/combustionModels/PaSR/PaSR.H | 4 +- .../combustionModel/combustionModel.H | 4 +- src/fvOptions/Make/options | 9 +- .../variableHeatTransfer.C | 9 +- src/lagrangian/Allwmake | 1 - src/lagrangian/Turbulence/Make/options | 1 + .../makeThermoParcelTurbulenceForces.H} | 20 +- .../DispersionRASModel/DispersionRASModel.C | 4 +- .../BrownianMotion/BrownianMotionForce.C | 214 +++++++ .../BrownianMotion/BrownianMotionForce.H | 160 +++++ .../BrownianMotion/BrownianMotionForceI.H} | 26 +- src/lagrangian/coalCombustion/Make/options | 11 +- .../COxidationHurtMitchell.C | 4 +- .../COxidationIntrinsicRate.C | 8 +- .../COxidationKineticDiffusionLimitedRate.C | 6 +- .../COxidationMurphyShaddix.C | 8 +- .../ReactingMultiphaseParcel.C | 4 +- .../Templates/ReactingParcel/ReactingParcel.C | 11 +- .../LiquidEvaporation/LiquidEvaporation.C | 6 +- .../LiquidEvaporationBoil.C | 4 +- .../SingleKineticRateDevolatilisation.C | 4 +- src/lagrangian/spray/Make/options | 11 +- .../Templates/SprayParcel/SprayParcel.C | 10 +- src/lagrangian/turbulence/Make/options | 17 +- .../DispersionRASModel/DispersionRASModel.C | 10 +- .../BrownianMotion/BrownianMotionForce.C | 8 +- src/meshTools/sets/topoSets/topoSet.C | 8 +- .../functionObjects/forces/Make/options | 12 +- .../functionObjects/forces/forces/forces.C | 16 +- .../DESModelRegions/DESModelRegions.C | 10 +- .../functionObjects/utilities/Make/files | 19 +- .../functionObjects/utilities/Make/options | 13 +- .../functionObjects/utilities/Peclet/Peclet.C | 19 +- .../scalarTransport/scalarTransport.C | 16 +- .../turbulenceFields/turbulenceFields.C | 4 +- .../wallShearStress/wallShearStress.C | 10 +- .../utilities/yPlusRAS/yPlusRAS.C | 103 +-- .../utilities/yPlusRAS/yPlusRAS.H | 9 +- src/regionCoupled/Make/options | 6 +- .../energyRegionCoupledFvPatchScalarField.C | 8 +- src/regionModels/pyrolysisModels/Make/options | 13 +- src/regionModels/regionCoupling/Make/options | 11 +- .../wallFunctions/Make/files | 3 +- .../wallFunctions/Make/options | 11 +- ...alphatFilmWallFunctionFvPatchScalarField.C | 31 +- .../nutkFilmWallFunctionFvPatchScalarField.C} | 108 ++-- .../nutkFilmWallFunctionFvPatchScalarField.H} | 48 +- .../thermalBaffleModels/Make/options | 6 +- .../liquidMixtureProperties.C | 2 +- .../solidProperties/solidPropertiesI.H | 2 +- .../PengRobinsonGas/PengRobinsonGas.C | 2 +- .../incompressiblePerfectGasI.H | 2 +- .../equationOfState/perfectGas/perfectGasI.H | 2 +- .../specie/specie/specie.H | 2 +- .../thermo/hExponential/hExponentialThermoI.H | 2 +- .../thermo/hPolynomial/hPolynomialThermo.C | 2 +- .../specie/thermo/janaf/janafThermoI.H | 2 +- .../specie/thermo/thermo/thermo.H | 2 +- .../specie/thermo/thermo/thermoI.H | 2 +- src/turbulenceModels/Allwmake | 14 - src/turbulenceModels/LES/Allwmake | 14 - .../LES/LESdeltas/LESdelta/LESdelta.C | 138 ---- .../LES/LESdeltas/LESdelta/LESdelta.H | 160 ----- src/turbulenceModels/LES/LESdeltas/Make/files | 7 - .../LES/LESdeltas/Make/options | 9 - .../LES/LESdeltas/PrandtlDelta/PrandtlDelta.C | 102 --- .../LES/LESdeltas/PrandtlDelta/PrandtlDelta.H | 110 ---- .../cubeRootVolDelta/cubeRootVolDelta.C | 117 ---- .../cubeRootVolDelta/cubeRootVolDelta.H | 108 ---- .../LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C | 149 ----- .../LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H | 113 ---- .../LES/LESdeltas/smoothDelta/smoothDelta.C | 197 ------ .../LES/LESdeltas/smoothDelta/smoothDelta.H | 290 --------- .../smoothDelta/smoothDeltaDeltaDataI.H | 227 ------- .../LES/LESfilters/LESfilter/LESfilter.C | 67 -- .../LES/LESfilters/LESfilter/LESfilter.H | 158 ----- .../LES/LESfilters/Make/files | 6 - .../LES/LESfilters/Make/options | 4 - .../anisotropicFilter/anisotropicFilter.C | 239 ------- .../anisotropicFilter/anisotropicFilter.H | 131 ---- .../LESfilters/laplaceFilter/laplaceFilter.C | 151 ----- .../LESfilters/laplaceFilter/laplaceFilter.H | 132 ---- .../LESfilters/simpleFilter/simpleFilter.C | 128 ---- .../LESfilters/simpleFilter/simpleFilter.H | 121 ---- src/turbulenceModels/compressible/Allwmake | 13 - .../compressible/LES/DESModel/DESModel.C | 57 -- .../compressible/LES/DESModel/DESModelDoc.H | 32 - .../DeardorffDiffStress/DeardorffDiffStress.C | 166 ----- .../DeardorffDiffStress/DeardorffDiffStress.H | 150 ----- .../LES/GenEddyVisc/GenEddyVisc.C | 157 ----- .../LES/GenEddyVisc/GenEddyVisc.H | 172 ----- .../LES/GenSGSStress/GenSGSStress.C | 178 ------ .../LES/GenSGSStress/GenSGSStress.H | 198 ------ .../compressible/LES/LESModel/LESModel.C | 209 ------ .../compressible/LES/LESModel/LESModel.H | 304 --------- .../compressible/LES/LESModel/LESModelDoc.H | 32 - .../compressible/LES/Make/files | 16 - .../compressible/LES/Make/options | 14 - .../LES/Smagorinsky/Smagorinsky.C | 125 ---- .../LES/Smagorinsky/Smagorinsky.H | 153 ----- .../LES/SpalartAllmaras/SpalartAllmaras.C | 445 ------------- .../LES/SpalartAllmaras/SpalartAllmaras.H | 214 ------- .../compressibleLESdelta.C | 66 -- .../compressibleLESdelta.H | 109 ---- .../homogeneousDynOneEqEddy.C | 191 ------ .../homogeneousDynOneEqEddy.H | 161 ----- .../LES/lowReOneEqEddy/lowReOneEqEddy.C | 165 ----- .../LES/lowReOneEqEddy/lowReOneEqEddy.H | 152 ----- .../compressible/LES/oneEqEddy/oneEqEddy.C | 151 ----- .../compressible/LES/oneEqEddy/oneEqEddy.H | 156 ----- .../LES/vanDriestDelta/vanDriestDelta.C | 161 ----- .../LES/vanDriestDelta/vanDriestDelta.H | 113 ---- .../compressible/RAS/LRR/LRR.C | 483 -------------- .../compressible/RAS/LRR/LRR.H | 210 ------ .../RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C | 524 --------------- .../RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H | 220 ------- .../RAS/LaunderSharmaKE/LaunderSharmaKE.C | 363 ----------- .../compressible/RAS/Make/files | 55 -- .../compressible/RAS/Make/options | 13 - .../compressible/RAS/RASModel/RASModel.C | 210 ------ .../compressible/RAS/RASModel/RASModel.H | 268 -------- .../RAS/RNGkEpsilon/RNGkEpsilon.C | 372 ----------- .../RAS/RNGkEpsilon/RNGkEpsilon.H | 210 ------ .../RAS/SpalartAllmaras/SpalartAllmaras.C | 479 -------------- .../RAS/SpalartAllmaras/SpalartAllmaras.H | 233 ------- .../backwardsCompatibilityWallFunctions.C | 357 ----------- .../backwardsCompatibilityWallFunctions.H | 129 ---- ...wardsCompatibilityWallFunctionsTemplates.C | 169 ----- .../compressibleRASBoundaryConditionsDoc.H | 39 -- ...thDissipationRateInletFvPatchScalarField.C | 179 ------ ...thDissipationRateInletFvPatchScalarField.H | 203 ------ ...ngLengthFrequencyInletFvPatchScalarField.C | 180 ------ ...ngLengthFrequencyInletFvPatchScalarField.H | 202 ------ ...silonLowReWallFunctionFvPatchScalarField.C | 196 ------ ...silonLowReWallFunctionFvPatchScalarField.H | 190 ------ .../epsilonWallFunctionFvPatchScalarField.C | 586 ----------------- .../epsilonWallFunctionFvPatchScalarField.H | 292 --------- .../fWallFunctionFvPatchScalarField.C | 263 -------- .../fWallFunctionFvPatchScalarField.H | 209 ------ .../kLowReWallFunctionFvPatchScalarField.C | 255 -------- .../kLowReWallFunctionFvPatchScalarField.H | 207 ------ .../kqRWallFunctionFvPatchField.C | 150 ----- .../kqRWallFunctionFvPatchField.H | 182 ------ .../kqRWallFunctionFvPatchFields.C | 47 -- .../mutLowReWallFunctionFvPatchScalarField.C | 133 ---- .../mutLowReWallFunctionFvPatchScalarField.H | 168 ----- .../mutURoughWallFunctionFvPatchScalarField.C | 315 --------- .../mutURoughWallFunctionFvPatchScalarField.H | 240 ------- ...tUSpaldingWallFunctionFvPatchScalarField.C | 223 ------- ...tUSpaldingWallFunctionFvPatchScalarField.H | 190 ------ .../mutUWallFunctionFvPatchScalarField.C | 201 ------ .../mutUWallFunctionFvPatchScalarField.H | 176 ----- .../mutWallFunctionFvPatchScalarField.C | 187 ------ .../mutWallFunctionFvPatchScalarField.H | 181 ------ .../mutkRoughWallFunctionFvPatchScalarField.C | 241 ------- .../mutkRoughWallFunctionFvPatchScalarField.H | 206 ------ .../mutkWallFunctionFvPatchScalarField.C | 163 ----- .../mutkWallFunctionFvPatchScalarField.H | 168 ----- .../omegaWallFunctionFvPatchScalarField.C | 603 ------------------ .../omegaWallFunctionFvPatchScalarField.H | 298 --------- .../v2WallFunctionFvPatchScalarField.C | 254 -------- .../v2WallFunctionFvPatchScalarField.H | 211 ------ .../compressible/RAS/kEpsilon/kEpsilon.C | 344 ---------- .../compressible/RAS/kEpsilon/kEpsilon.H | 200 ------ .../compressible/RAS/kOmegaSST/kOmegaSST.C | 511 --------------- .../compressible/RAS/kOmegaSST/kOmegaSST.H | 316 --------- .../compressible/RAS/laminar/laminar.C | 218 ------- .../compressible/RAS/laminar/laminar.H | 140 ---- .../RAS/realizableKE/realizableKE.C | 384 ----------- .../RAS/realizableKE/realizableKE.H | 214 ------- .../compressible/RAS/v2f/v2f.C | 493 -------------- .../compressible/RAS/v2f/v2f.H | 288 --------- .../compressible/turbulenceModel/Make/files | 15 - .../compressible/turbulenceModel/Make/options | 17 - .../turbulenceModel/laminar/laminar.C | 246 ------- .../turbulenceModel/laminar/laminar.H | 177 ----- .../turbulenceModel/turbulenceModel.C | 155 ----- .../turbulenceModel/turbulenceModel.H | 282 -------- .../derivedFvPatchFields/Make/files | 4 - .../derivedFvPatchFields/Make/options | 16 - .../fixedShearStressFvPatchVectorField.C | 186 ------ .../fixedShearStressFvPatchVectorField.H | 154 ----- .../porousBafflePressureFvPatchField.C | 121 ---- .../porousBafflePressureFvPatchField.H | 216 ------- .../porousBafflePressureFvPatchFields.C | 121 ---- src/turbulenceModels/incompressible/Allwmake | 13 - .../incompressible/LES/DESModel/DESModel.C | 56 -- .../incompressible/LES/DESModel/DESModelDoc.H | 32 - .../DeardorffDiffStress/DeardorffDiffStress.C | 162 ----- .../DeardorffDiffStress/DeardorffDiffStress.H | 148 ----- .../LES/GenEddyVisc/GenEddyVisc.C | 149 ----- .../LES/GenEddyVisc/GenEddyVisc.H | 170 ----- .../LES/GenSGSStress/GenSGSStress.C | 230 ------- .../LES/GenSGSStress/GenSGSStress.H | 192 ------ .../incompressible/LES/LESModel/LESModel.C | 207 ------ .../incompressible/LES/LESModel/LESModel.H | 246 ------- .../incompressible/LES/LESModel/LESModelDoc.H | 32 - .../LES/LRRDiffStress/LRRDiffStress.C | 176 ----- .../LES/LRRDiffStress/LRRDiffStress.H | 145 ----- .../incompressible/LES/Make/files | 34 - .../incompressible/LES/Make/options | 14 - .../LES/Smagorinsky/Smagorinsky.C | 112 ---- .../LES/Smagorinsky/Smagorinsky.H | 147 ----- .../LES/Smagorinsky2/Smagorinsky2.C | 147 ----- .../LES/SpalartAllmaras/SpalartAllmaras.C | 463 -------------- .../LES/dynLagrangian/dynLagrangian.C | 197 ------ .../LES/dynLagrangian/dynLagrangian.H | 196 ------ .../LES/dynOneEqEddy/dynOneEqEddy.C | 196 ------ .../LES/dynOneEqEddy/dynOneEqEddy.H | 184 ------ .../homogeneousDynOneEqEddy.C | 209 ------ .../homogeneousDynOneEqEddy.H | 162 ----- .../homogeneousDynSmagorinsky.C | 181 ------ .../homogeneousDynSmagorinsky.H | 166 ----- .../incompressibleLESdelta.C | 66 -- .../incompressibleLESdelta.H | 109 ---- .../LES/kOmegaSSTSAS/kOmegaSSTSAS.C | 492 -------------- .../LES/kOmegaSSTSAS/kOmegaSSTSAS.H | 292 --------- .../incompressible/LES/laminar/laminar.C | 183 ------ .../incompressible/LES/laminar/laminar.H | 138 ---- .../LES/mixedSmagorinsky/mixedSmagorinsky.C | 160 ----- .../LES/mixedSmagorinsky/mixedSmagorinsky.H | 167 ----- .../incompressible/LES/oneEqEddy/oneEqEddy.C | 146 ----- .../incompressible/LES/oneEqEddy/oneEqEddy.H | 154 ----- .../LES/scaleSimilarity/scaleSimilarity.C | 129 ---- .../LES/scaleSimilarity/scaleSimilarity.H | 146 ----- .../LES/spectEddyVisc/spectEddyVisc.C | 174 ----- .../LES/spectEddyVisc/spectEddyVisc.H | 144 ----- .../incompressible/RAS/LRR/LRR.C | 475 -------------- .../incompressible/RAS/LRR/LRR.H | 204 ------ .../RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C | 527 --------------- .../RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H | 216 ------- .../RAS/LaunderSharmaKE/LaunderSharmaKE.C | 309 --------- .../RAS/LaunderSharmaKE/LaunderSharmaKE.H | 195 ------ .../incompressible/RAS/Make/files | 66 -- .../incompressible/RAS/Make/options | 11 - .../incompressible/RAS/RASModel/RASModel.C | 206 ------ .../incompressible/RAS/RASModel/RASModel.H | 243 ------- .../incompressible/RAS/RASModel/RASModelDoc.H | 32 - .../RAS/SpalartAllmaras/SpalartAllmaras.C | 469 -------------- .../backwardsCompatibilityWallFunctions.C | 286 --------- .../backwardsCompatibilityWallFunctions.H | 122 ---- ...wardsCompatibilityWallFunctionsTemplates.C | 169 ----- ...ndaryLayerInletEpsilonFvPatchScalarField.C | 142 ----- ...ndaryLayerInletEpsilonFvPatchScalarField.H | 177 ----- .../incompressibleRASBoundaryConditionsDoc.H | 39 -- ...thDissipationRateInletFvPatchScalarField.C | 179 ------ ...thDissipationRateInletFvPatchScalarField.H | 203 ------ ...ngLengthFrequencyInletFvPatchScalarField.C | 176 ----- ...ngLengthFrequencyInletFvPatchScalarField.H | 203 ------ ...silonLowReWallFunctionFvPatchScalarField.C | 193 ------ ...silonLowReWallFunctionFvPatchScalarField.H | 194 ------ .../epsilonWallFunctionFvPatchScalarField.C | 586 ----------------- .../epsilonWallFunctionFvPatchScalarField.H | 291 --------- .../kLowReWallFunctionFvPatchScalarField.C | 252 -------- .../kLowReWallFunctionFvPatchScalarField.H | 207 ------ .../kqRWallFunctionFvPatchField.C | 150 ----- .../kqRWallFunctionFvPatchField.H | 185 ------ .../kqRWallFunctionFvPatchFields.C | 47 -- .../kqRWallFunctionFvPatchFields.H | 52 -- .../nutLowReWallFunctionFvPatchScalarField.C | 131 ---- .../nutLowReWallFunctionFvPatchScalarField.H | 166 ----- .../nutURoughWallFunctionFvPatchScalarField.C | 313 --------- .../nutURoughWallFunctionFvPatchScalarField.H | 241 ------- ...tUSpaldingWallFunctionFvPatchScalarField.C | 220 ------- ...tUSpaldingWallFunctionFvPatchScalarField.H | 190 ------ ...UTabulatedWallFunctionFvPatchScalarField.C | 218 ------- ...UTabulatedWallFunctionFvPatchScalarField.H | 198 ------ .../nutUWallFunctionFvPatchScalarField.C | 202 ------ .../nutUWallFunctionFvPatchScalarField.H | 176 ----- .../nutWallFunctionFvPatchScalarField.C | 197 ------ .../nutWallFunctionFvPatchScalarField.H | 181 ------ ...tkAtmRoughWallFunctionFvPatchScalarField.C | 197 ------ ...tkAtmRoughWallFunctionFvPatchScalarField.H | 217 ------- .../nutkRoughWallFunctionFvPatchScalarField.C | 241 ------- .../nutkRoughWallFunctionFvPatchScalarField.H | 221 ------- .../nutkWallFunctionFvPatchScalarField.C | 164 ----- .../nutkWallFunctionFvPatchScalarField.H | 166 ----- .../omegaWallFunctionFvPatchScalarField.C | 601 ----------------- .../omegaWallFunctionFvPatchScalarField.H | 298 --------- .../incompressible/RAS/kEpsilon/kEpsilon.C | 290 --------- .../incompressible/RAS/kEpsilon/kEpsilon.H | 197 ------ .../incompressible/RAS/kOmegaSST/kOmegaSST.C | 472 -------------- .../incompressible/RAS/kOmegaSST/kOmegaSST.H | 311 --------- .../incompressible/RAS/laminar/laminar.C | 214 ------- .../RAS/realizableKE/realizableKE.C | 356 ----------- .../RAS/realizableKE/realizableKE.H | 211 ------ .../incompressible/turbulenceModel/Make/files | 7 - .../turbulenceModel/Make/options | 8 - ...daryLayerInletVelocityFvPatchVectorField.C | 142 ----- ...daryLayerInletVelocityFvPatchVectorField.H | 178 ------ ...entHeatFluxTemperatureFvPatchScalarField.C | 256 -------- ...entHeatFluxTemperatureFvPatchScalarField.H | 228 ------- .../turbulenceModel/laminar/laminar.C | 245 ------- .../turbulenceModel/turbulenceModel.C | 143 ----- .../turbulenceModel/turbulenceModel.H | 246 ------- .../ras/counterFlowFlame2D/system/fvSchemes | 2 +- .../0.org/epsilon | 6 +- .../flamePropagationWithObstacles/0.org/k | 6 +- .../flamePropagationWithObstacles/0.org/k.old | 6 +- .../0.org/{mut => nut} | 10 +- .../constant/RASProperties | 36 -- .../constant/turbulenceProperties | 23 +- .../system/changeDictionaryDict | 8 +- .../system/fvSchemes | 2 +- .../ras/moriyoshiHomogeneous/0/{mut => nut} | 4 +- .../constant/turbulenceProperties | 11 +- .../ras/moriyoshiHomogeneous/system/fvSchemes | 2 +- .../engineFoam/kivaTest/-180/epsilon | 6 +- .../combustion/engineFoam/kivaTest/-180/k | 6 +- .../engineFoam/kivaTest/-180/{mut => nut} | 10 +- .../kivaTest/constant/polyMesh/boundary | 3 + .../kivaTest/constant/turbulenceProperties | 11 +- .../engineFoam/kivaTest/system/fvSchemes | 2 +- .../0/{alphaSgs => alphat} | 2 +- .../0/{muSgs => nut} | 8 +- .../constant/LESProperties | 93 --- .../constant/turbulenceProperties | 81 ++- .../system/fvSchemes | 2 +- .../0/{alphaSgs => alphat} | 4 +- .../oppositeBurningPanels/0/{muSgs => nut} | 6 +- .../fireFoam/les/oppositeBurningPanels/Allrun | 6 +- .../constant/LESProperties | 93 --- .../constant/turbulenceProperties | 80 ++- .../oppositeBurningPanels/system/fvSchemes | 2 +- .../les/smallPoolFire2D/0/{muSgs => alphat} | 2 +- .../les/smallPoolFire2D/0/{alphaSgs => nut} | 4 +- .../smallPoolFire2D/constant/LESProperties | 82 --- .../constant/turbulenceProperties | 71 ++- .../les/smallPoolFire2D/system/fvSchemes | 2 +- .../les/smallPoolFire3D/0/{muSgs => alphat} | 3 +- .../les/smallPoolFire3D/0/{alphaSgs => nut} | 5 +- .../smallPoolFire3D/constant/LESProperties | 88 --- .../constant/turbulenceProperties | 74 ++- .../les/smallPoolFire3D/system/fvSchemes | 2 +- .../ras/counterFlowFlame2D/system/fvSchemes | 2 +- .../rhoLTSPimpleFoam/angledDuct/0/epsilon | 10 +- .../rhoLTSPimpleFoam/angledDuct/0/k | 8 +- .../angledDuct/0/{mut => nut} | 12 +- .../angledDuct/constant/turbulenceProperties | 11 +- .../angledDuct/system/fvSchemes | 2 +- .../annularThermalMixer/0.org/{mut => nut} | 10 +- .../constant/boundaryConditions | 10 +- .../constant/turbulenceProperties | 12 +- .../annularThermalMixer/system/fvSchemes | 2 +- .../les/pitzDaily/0/{alphaSgs => alphat} | 0 .../rhoPimpleFoam/les/pitzDaily/0/nut} | 2 +- .../les/pitzDaily/constant/LESProperties | 88 --- .../les/pitzDaily/constant/polyMesh/boundary | 2 + .../pitzDaily/constant/turbulenceProperties | 74 ++- .../les/pitzDaily/system/fvSchemes | 2 +- .../rhoPimpleFoam/ras/angledDuct/0/epsilon | 10 +- .../rhoPimpleFoam/ras/angledDuct/0/k | 8 +- .../ras/angledDuct/0/{mut => nut} | 12 +- .../angledDuct/constant/turbulenceProperties | 11 +- .../ras/angledDuct/system/fvSchemes | 2 +- .../rhoPimpleFoam/ras/cavity/0/epsilon | 4 +- .../compressible/rhoPimpleFoam/ras/cavity/0/k | 4 +- .../rhoPimpleFoam/ras/cavity/0/{mut => nut} | 6 +- .../rhoPimpleFoam/ras/cavity/0/omega | 4 +- .../ras/cavity/constant/turbulenceProperties | 11 +- .../rhoPimpleFoam/ras/cavity/system/fvSchemes | 2 +- .../rhoPimpleFoam/ras/mixerVessel2D/0/epsilon | 4 +- .../rhoPimpleFoam/ras/mixerVessel2D/0/k | 4 +- .../ras/mixerVessel2D/0/{mut => nut} | 8 +- .../ras/mixerVessel2D/constant/RASProperties | 25 - .../constant/turbulenceProperties | 11 +- .../ras/mixerVessel2D/system/fvSchemes | 2 +- .../rhoPimplecFoam/angledDuct/0/alphat | 14 +- .../rhoPimplecFoam/angledDuct/0/epsilon | 10 +- .../rhoPimplecFoam/angledDuct/0/k | 8 +- .../rhoPimplecFoam/angledDuct/0/{mut => nut} | 12 +- .../angledDuct/constant/RASProperties | 25 - .../angledDuct/constant/turbulenceProperties | 11 +- .../angledDuct/system/fvSchemes | 2 +- .../angledDuctExplicit/system/fvSchemes | 2 +- .../angledDuctImplicit/0/epsilon | 10 +- .../angledDuctImplicit/0/k | 8 +- .../angledDuctImplicit/0/nut} | 12 +- .../angledDuctImplicit/constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../angledDuctImplicit/system/fvSchemes | 2 +- .../angledDuctExplicitFixedCoeff/0/epsilon | 10 +- .../angledDuctExplicitFixedCoeff/0/k | 8 +- .../angledDuctExplicitFixedCoeff/0/nut} | 12 +- .../constant/RASProperties | 25 - .../constant/polyMesh/boundary | 4 + .../constant/turbulenceProperties | 28 + .../system/fvSchemes | 2 +- .../rhoSimplecFoam/squareBend/0/epsilon | 4 +- .../rhoSimplecFoam/squareBend/0/k | 2 +- .../rhoSimplecFoam/squareBend/0/{mut => nut} | 6 +- .../squareBend/constant/RASProperties | 25 - .../squareBend/constant/turbulenceProperties | 11 +- .../squareBend/system/fvSchemes | 2 +- .../laminar/forwardStep/system/fvSchemes | 2 +- .../laminar/shockTube/system/fvSchemes | 2 +- .../sonicFoam/ras/nacaAirfoil/0/epsilon | 2 +- .../sonicFoam/ras/nacaAirfoil/0/k | 2 +- .../sonicFoam/ras/nacaAirfoil/0/{mut => nut} | 6 +- .../ras/nacaAirfoil/constant/RASProperties | 25 - .../nacaAirfoil/constant/polyMesh/boundary | 1 + .../nacaAirfoil/constant/turbulenceProperties | 11 +- .../ras/nacaAirfoil/system/fvSchemes | 2 +- .../sonicFoam/ras/prism/0/epsilon | 2 +- .../compressible/sonicFoam/ras/prism/0/k | 2 +- .../sonicFoam/ras/prism/0/{mut => nut} | 6 +- .../ras/prism/constant/RASProperties | 25 - .../ras/prism/constant/turbulenceProperties | 11 +- .../sonicFoam/ras/prism/system/fvSchemes | 2 +- .../hotRoom/constant/RASProperties | 25 - .../hotRoom/constant/turbulenceProperties | 28 + .../hotRoom/system/fvSchemes | 2 +- .../hotRoom/constant/RASProperties | 25 - .../hotRoom/constant/turbulenceProperties | 28 + .../hotRoom/system/fvSchemes | 2 +- .../iglooWithFridges/constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../iglooWithFridges/system/controlDict | 7 - .../iglooWithFridges/system/fvSchemes | 2 +- .../buoyantPimpleFoam/hotRoom/0/epsilon | 6 +- .../buoyantPimpleFoam/hotRoom/0/k | 6 +- .../buoyantPimpleFoam/hotRoom/0/{mut => nut} | 10 +- .../hotRoom/constant/RASProperties | 25 - .../hotRoom/constant/turbulenceProperties | 11 +- .../hotRoom/system/fvSchemes | 2 +- .../buoyantSimpleFoam/buoyantCavity/0/epsilon | 8 +- .../buoyantSimpleFoam/buoyantCavity/0/k | 8 +- .../0/mut => buoyantCavity/0/nut} | 12 +- .../buoyantSimpleFoam/buoyantCavity/0/omega | 8 +- .../buoyantCavity/constant/RASProperties | 23 - .../constant/turbulenceProperties} | 10 +- .../buoyantCavity/system/fvSchemes | 2 +- .../circuitBoardCooling/0.org/epsilon | 4 +- .../0.org/include/wallBafflePatches | 8 +- .../circuitBoardCooling/0.org/k | 4 +- .../circuitBoardCooling/0.org/{mut => nut} | 8 +- .../constant/RASProperties | 23 - .../constant/turbulenceProperties} | 10 +- .../circuitBoardCooling/system/controlDict | 2 +- .../circuitBoardCooling/system/fvSchemes | 10 +- .../externalCoupledCavity/0/epsilon | 8 +- .../externalCoupledCavity/0/k | 8 +- .../0/mut => externalCoupledCavity/0/nut} | 12 +- .../externalCoupledCavity/0/omega | 8 +- .../constant/RASProperties | 23 - .../constant/turbulenceProperties | 27 + .../externalCoupledCavity/system/fvSchemes | 2 +- .../hotRadiationRoom/0/epsilon | 8 +- .../buoyantSimpleFoam/hotRadiationRoom/0/k | 8 +- .../hotRadiationRoom/0/{mut => nut} | 12 +- .../hotRadiationRoom/constant/RASProperties | 25 - .../constant/turbulenceProperties} | 9 +- .../hotRadiationRoom/system/fvSchemes | 2 +- .../hotRadiationRoomFvDOM/0/epsilon | 8 +- .../hotRadiationRoomFvDOM/0/k | 8 +- .../hotRadiationRoomFvDOM/0/{mut => nut} | 12 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties} | 9 +- .../hotRadiationRoomFvDOM/system/fvSchemes | 2 +- .../multiRegionHeater/0/bottomWater/epsilon | 12 +- .../multiRegionHeater/0/bottomWater/k | 12 +- .../multiRegionHeater/Allrun | 2 +- .../system/bottomWater/changeDictionaryDict | 4 +- .../system/bottomWater/fvSchemes | 2 +- .../multiRegionHeater/system/controlDict | 6 - .../system/topAir/changeDictionaryDict | 4 +- .../snappyMultiRegionHeater/Allrun | 2 +- .../constant/bottomAir/RASProperties | 24 - .../constant/topAir/RASProperties | 1 - .../system/bottomAir/changeDictionaryDict | 4 +- .../system/bottomAir/fvSchemes | 2 +- .../system/topAir/changeDictionaryDict | 4 +- .../heatExchanger/0.org/air/alphat | 47 ++ .../heatExchanger/0.org/air/epsilon | 4 +- .../heatExchanger/0.org/air/k | 4 +- .../heatExchanger/0.org/air/nut | 47 ++ .../heatExchanger/constant/air/RASProperties | 25 - .../constant/air/turbulenceProperties | 11 +- .../constant/porous/RASProperties | 24 - .../heatExchanger/system/air/fvSchemes | 2 +- .../heatExchanger/system/porous/fvSchemes | 2 +- .../multiRegionHeaterRadiation/Allrun.pre | 2 +- .../constant/bottomAir/RASProperties | 24 - .../constant/topAir/RASProperties | 1 - .../system/bottomAir/changeDictionaryDict | 4 +- .../system/bottomAir/fvSchemes | 2 +- .../system/topAir/changeDictionaryDict | 4 +- .../rotor2D/constant/RASProperties | 25 - .../rotor2D/constant/polyMesh/boundary | 3 + .../rotor2D/constant/turbulenceProperties | 12 +- .../SRFPimpleFoam/rotor2D/system/fvSchemes | 2 +- .../mixer/constant/RASProperties | 25 - .../mixer/constant/turbulenceProperties | 28 + .../SRFSimpleFoam/mixer/system/fvSchemes | 2 +- .../SRFSimpleFoam/mixer/turbulenceProperties | 28 + .../pitzDaily/constant/RASProperties | 24 - .../pitzDaily/constant/turbulenceProperties} | 9 +- .../pitzDaily/system/fvSchemes | 4 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../boundaryLaunderSharma/system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../boundaryWallFunctions/system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../system/fvSchemes | 2 +- .../mixerVesselAMI2D/constant/RASProperties | 25 - .../mixerVesselAMI2D/system/fvSchemes | 2 +- .../pimpleDyMFoam/movingCone/system/fvSchemes | 2 +- .../oscillatingInletACMI2D/0.org/nut} | 36 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 11 +- .../oscillatingInletACMI2D/system/fvSchemes | 2 +- .../propeller/constant/RASProperties | 25 - .../propeller/constant/turbulenceProperties | 11 +- .../propeller/system/controlDict | 6 - .../pimpleDyMFoam/propeller/system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 11 +- .../system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 27 + .../wingMotion2D_simpleFoam/system/fvSchemes | 2 +- .../wingMotion_snappyHexMesh/system/fvSchemes | 2 +- .../TJunction/constant/RASProperties | 25 - .../TJunction/constant/turbulenceProperties | 12 +- .../pimpleFoam/TJunction/system/controlDict | 7 - .../pimpleFoam/TJunction/system/fvSchemes | 2 +- .../TJunctionFan/constant/RASProperties | 25 - .../constant/turbulenceProperties | 12 +- .../TJunctionFan/system/controlDict | 6 - .../pimpleFoam/TJunctionFan/system/fvSchemes | 2 +- .../channel395/0.org/{nuSgs => nut} | 2 +- .../pimpleFoam/channel395/0/nuSgs.gz | Bin 208201 -> 0 bytes .../pimpleFoam/channel395/Allrun | 2 +- .../channel395/constant/LESProperties | 86 --- .../channel395/constant/turbulenceProperties | 75 ++- .../channel395/system/decomposeParDict | 10 +- .../pimpleFoam/channel395/system/fvSchemes | 7 +- .../pimpleFoam/channel395/system/fvSolution | 4 +- .../elipsekkLOmega/constant/RASProperties | 25 - .../constant/turbulenceProperties | 12 +- .../elipsekkLOmega/system/fvSchemes | 2 +- .../pitzDaily/constant/RASProperties | 25 - .../pitzDaily/constant/polyMesh/boundary | 2 + .../pitzDaily/constant/turbulenceProperties | 11 +- .../pimpleFoam/pitzDaily/system/fvSchemes | 2 +- .../pisoFoam/les/motorBike/lesFiles/Allrun | 8 +- .../les/motorBike/lesFiles/LESProperties | 79 --- .../pisoFoam/les/motorBike/lesFiles/fvSchemes | 3 +- .../les/motorBike/lesFiles/fvSolution | 13 +- .../pisoFoam/les/motorBike/lesFiles/nuSgs | 69 -- .../motorBike/lesFiles/turbulenceProperties | 68 +- .../motorBike/constant/RASProperties | 25 - .../motorBike/constant/polyMesh/boundary | 428 +------------ .../motorBike/constant/turbulenceProperties} | 9 +- .../les/motorBike/motorBike/system/fvSchemes | 2 +- .../pisoFoam/les/pitzDaily/0/{nuSgs => nut} | 2 +- .../les/pitzDaily/constant/LESProperties | 86 --- .../pitzDaily/constant/turbulenceProperties | 74 ++- .../pisoFoam/les/pitzDaily/system/fvSchemes | 2 +- .../pisoFoam/les/pitzDailyMapped/0/nut} | 4 +- .../pitzDailyMapped/constant/LESProperties | 86 --- .../constant/turbulenceProperties | 73 ++- .../les/pitzDailyMapped/system/fvSchemes | 2 +- .../pisoFoam/ras/cavity/0/omega | 41 ++ .../ras/cavity/constant/RASProperties | 25 - .../ras/cavity/constant/turbulenceProperties | 10 +- .../pisoFoam/ras/cavity/system/fvSchemes | 3 +- .../pisoFoam/ras/cavity/system/fvSolution | 2 +- .../ras/cavityCoupledU/constant/RASProperties | 25 - .../constant/turbulenceProperties | 10 +- .../ras/cavityCoupledU/system/fvSchemes | 2 +- .../angledDuctExplicit/system/fvSchemes | 2 +- .../angledDuctImplicit/constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../angledDuctImplicit/system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 28 + .../straightDuctImplicit/system/fvSchemes | 2 +- .../airFoil2D/constant/RASProperties | 25 - .../airFoil2D/constant/turbulenceProperties | 27 + .../simpleFoam/airFoil2D/system/fvSchemes | 2 +- .../mixerVessel2D/constant/RASProperties | 25 - .../constant/turbulenceProperties | 27 + .../simpleFoam/mixerVessel2D/system/fvSchemes | 2 +- .../motorBike/constant/RASProperties | 24 - .../motorBike/constant/turbulenceProperties | 26 + .../simpleFoam/motorBike/system/controlDict | 7 - .../simpleFoam/motorBike/system/fvSchemes | 2 +- .../pipeCyclic/constant/RASProperties | 25 - .../pipeCyclic/constant/turbulenceProperties | 10 +- .../simpleFoam/pipeCyclic/system/controlDict | 7 - .../simpleFoam/pipeCyclic/system/fvSchemes | 2 +- .../pitzDaily/constant/RASProperties | 25 - .../pitzDaily/constant/turbulenceProperties | 28 + .../simpleFoam/pitzDaily/system/fvSchemes | 2 +- .../pitzDailyExptInlet/constant/RASProperties | 25 - .../constant/turbulenceProperties | 27 + .../pitzDailyExptInlet/system/fvSchemes | 2 +- .../{RASProperties => turbulenceProperties} | 33 +- .../turbineSiting/system/controlDict | 4 +- .../simpleFoam/turbineSiting/system/fvSchemes | 4 +- .../counterFlowFlame2D/0/{mut => nut} | 4 +- .../counterFlowFlame2D/constant/RASProperties | 25 - .../constant/turbulenceProperties | 1 - .../counterFlowFlame2D/system/fvSchemes | 2 +- .../verticalChannel/0.org/k | 2 +- .../verticalChannel/0.org/nut} | 6 +- .../verticalChannel/0.org/omega | 6 +- .../LTSReactingParcelFoam/verticalChannel/0/k | 2 +- .../verticalChannel/{0.org/mut => 0/nut} | 6 +- .../verticalChannel/0/omega | 6 +- .../verticalChannel/constant/RASProperties | 24 - .../constant/turbulenceProperties | 11 +- .../verticalChannel/system/fvSchemes | 2 +- .../MPPICFoam/column/constant/RASProperties | 25 - .../simplifiedSiwek/0/epsilon | 6 +- .../coalChemistryFoam/simplifiedSiwek/0/k | 6 +- .../simplifiedSiwek/0/{mut => nut} | 10 +- .../simplifiedSiwek/constant/RASProperties | 24 - .../constant/turbulenceProperties | 11 +- .../simplifiedSiwek/system/fvSchemes | 2 +- .../hopperEmptying/constant/RASProperties | 25 - .../constant/turbulenceProperties | 2 +- .../hopperInitialState/constant/RASProperties | 25 - .../constant/turbulenceProperties | 2 +- .../cylinder/system/fvSchemes | 2 +- .../hotBoxes/0.org/epsilon | 4 +- .../reactingParcelFilmFoam/hotBoxes/0.org/k | 4 +- .../hotBoxes/0.org/{mut => nut} | 8 +- .../hotBoxes/constant/RASProperties | 25 - .../hotBoxes/constant/turbulenceProperties | 11 +- .../hotBoxes/system/changeDictionaryDict | 2 +- .../hotBoxes/system/fvSchemes | 2 +- .../rivuletPanel/system/fvSchemes | 2 +- .../splashPanel/system/fvSchemes | 2 +- .../reactingParcelFoam/filter/0.org/epsilon | 2 +- .../reactingParcelFoam/filter/0.org/k | 2 +- .../filter/0.org/{mut => nut} | 6 +- .../reactingParcelFoam/filter/0/epsilon | 2 +- .../lagrangian/reactingParcelFoam/filter/0/k | 2 +- .../reactingParcelFoam/filter/0/{mut => nut} | 6 +- .../filter/constant/RASProperties | 24 - .../filter/constant/turbulenceProperties | 11 +- .../filter/system/changeDictionaryDict | 2 +- .../filter/system/controlDict | 7 - .../filter/system/fvSchemes | 2 +- .../parcelInBox/system/fvSchemes | 2 +- .../verticalChannel/0.org/k | 2 +- .../verticalChannel/0.org/nut} | 6 +- .../verticalChannel/0.org/omega | 6 +- .../verticalChannel/constant/RASProperties | 24 - .../constant/turbulenceProperties | 11 +- .../verticalChannel/system/fvSchemes | 2 +- .../verticalChannel/0.org/k | 2 +- .../verticalChannel/0.org/nut} | 6 +- .../verticalChannel/0.org/omega | 6 +- .../verticalChannel/0/k | 2 +- .../verticalChannel/0/mut | 58 -- .../verticalChannel/0/nut | 58 ++ .../verticalChannel/0/omega | 6 +- .../verticalChannel/constant/RASProperties | 24 - .../constant/turbulenceProperties | 11 +- .../verticalChannel/system/fvSchemes | 2 +- .../lagrangian/sprayFoam/aachenBomb/0/epsilon | 2 +- tutorials/lagrangian/sprayFoam/aachenBomb/0/k | 2 +- .../sprayFoam/aachenBomb/0/{mut => nut} | 6 +- .../aachenBomb/constant/RASProperties | 25 - .../aachenBomb/constant/turbulenceProperties | 11 +- .../sprayFoam/aachenBomb/system/fvSchemes | 2 +- .../mixerVessel/constant/RASProperties | 25 - .../mixerVessel/constant/turbulenceProperties | 12 +- .../foamyHexMesh/mixerVessel/system/fvSchemes | 2 +- .../DTCHull/constant/RASProperties | 25 - .../DTCHull/constant/turbulenceProperties | 11 +- .../LTSInterFoam/DTCHull/system/fvSchemes | 2 +- .../les/throttle/0/{nuSgs => nut} | 2 +- .../les/throttle/constant/LESProperties | 84 --- .../throttle/constant/turbulenceProperties | 74 ++- .../les/throttle/system/fvSchemes | 2 +- .../les/throttle3D/0.org/{nuSgs => nut} | 2 +- .../les/throttle3D/constant/LESProperties | 84 --- .../throttle3D/constant/turbulenceProperties | 74 ++- .../les/throttle3D/system/fvSchemes | 2 +- .../ras/throttle/constant/RASProperties | 25 - .../throttle/constant/turbulenceProperties | 11 +- .../ras/throttle/system/fvSchemes | 2 +- .../ras/sloshingTank2D/constant/RASProperties | 25 - .../ras/sloshingTank2D/system/fvSchemes | 2 +- .../depthCharge2D/constant/LESProperties | 84 --- .../depthCharge2D/constant/polyMesh/boundary | 1 + .../laminar/depthCharge2D/system/fvSchemes | 2 +- .../depthCharge3D/constant/LESProperties | 84 --- .../laminar/depthCharge3D/system/fvSchemes | 2 +- .../laminar/damBreak4phase/system/fvSchemes | 2 +- .../ras/DTCHull/constant/RASProperties | 25 - .../ras/DTCHull/constant/turbulenceProperties | 11 +- .../interDyMFoam/ras/DTCHull/system/fvSchemes | 2 +- .../constant/RASProperties | 25 - .../constant/turbulenceProperties | 2 +- .../ras/damBreakWithObstacle/system/fvSchemes | 2 +- .../ras/floatingObject/constant/RASProperties | 25 - .../constant/turbulenceProperties | 12 +- .../ras/floatingObject/system/fvSchemes | 2 +- .../ras/mixerVesselAMI/constant/RASProperties | 25 - .../constant/turbulenceProperties | 12 +- .../ras/mixerVesselAMI/system/fvSchemes | 4 +- .../ras/sloshingTank2D/constant/RASProperties | 25 - .../ras/sloshingTank2D/system/fvSchemes | 2 +- .../sloshingTank2D3DoF/constant/RASProperties | 25 - .../ras/sloshingTank2D3DoF/system/fvSchemes | 2 +- .../ras/sloshingTank3D/constant/RASProperties | 25 - .../ras/sloshingTank3D/system/fvSchemes | 2 +- .../ras/sloshingTank3D3DoF/system/fvSchemes | 2 +- .../sloshingTank3D6DoF/constant/RASProperties | 25 - .../ras/sloshingTank3D6DoF/system/fvSchemes | 2 +- .../ras/testTubeMixer/constant/RASProperties | 25 - .../ras/testTubeMixer/system/fvSchemes | 2 +- .../laminar/capillaryRise/system/fvSchemes | 2 +- .../laminar/damBreak/system/fvSchemes | 2 +- .../laminar/mixerVessel2D/system/fvSchemes | 2 +- .../les/nozzleFlow2D/0/{nuSgs => nut} | 2 +- .../les/nozzleFlow2D/constant/LESProperties | 86 --- .../constant/turbulenceProperties | 73 ++- .../les/nozzleFlow2D/system/fvSchemes | 2 +- tutorials/multiphase/interFoam/ras/Allclean | 2 +- .../ras/angledDuct/constant/RASProperties | 25 - .../angledDuct/constant/turbulenceProperties | 11 +- .../interFoam/ras/angledDuct/system/fvSchemes | 2 +- .../ras/damBreak/constant/RASProperties | 25 - .../ras/damBreak/constant/polyMesh/boundary | 3 + .../damBreak/constant/turbulenceProperties | 11 +- .../interFoam/ras/damBreak/system/fvSchemes | 2 +- .../ras/damBreakPorousBaffle/0/p_rgh | 4 +- .../constant/RASProperties | 25 - .../constant/polyMesh/boundary | 19 +- .../constant/turbulenceProperties | 11 +- .../damBreakPorousBaffle/system/controlDict | 6 - .../ras/damBreakPorousBaffle/system/fvSchemes | 2 +- .../LTSInterFoam/system/fvSchemes | 2 +- .../ras/waterChannel/constant/RASProperties | 24 - .../constant/turbulenceProperties | 11 +- .../ras/waterChannel/system/fvSchemes | 2 +- .../ras/weirOverflow/constant/RASProperties | 25 - .../constant/turbulenceProperties | 11 +- .../ras/weirOverflow/system/fvSchemes | 2 +- .../laminar/damBreak/system/fvSchemes | 2 +- .../propeller/constant/RASProperties | 25 - .../propeller/constant/turbulenceProperties | 11 +- .../propeller/system/controlDict | 6 - .../propeller/system/fvSchemes | 2 +- .../cavitatingBullet/system/fvSchemes | 2 +- .../bubbleColumn/constant/LESProperties | 29 - .../bubbleColumn/constant/polyMesh/boundary | 1 + .../constant/turbulenceProperties} | 6 +- .../damBreak4phase/constant/LESProperties | 29 - .../damBreak4phase/constant/polyMesh/boundary | 3 + .../damBreak4phaseFine/constant/LESProperties | 29 - .../constant/polyMesh/boundary | 3 + .../mixerVessel2D/constant/LESProperties | 29 - .../mixerVessel2D/constant/polyMesh/boundary | 2 + .../constant/turbulenceProperties} | 9 +- .../mixerVesselAMI2D/constant/RASProperties | 25 - .../laminar/mixerVesselAMI2D/system/fvSchemes | 2 +- .../laminar/damBreak4phase/system/fvSchemes | 2 +- .../damBreak4phaseFine/system/fvSchemes | 2 +- .../laminar/mixerVessel2D/system/fvSchemes | 2 +- .../oscillatingBox/system/fvSchemes | 2 +- .../oscillatingBox/system/fvSchemes | 2 +- .../lockExchange/system/fvSchemes | 2 +- 1102 files changed, 9071 insertions(+), 54713 deletions(-) delete mode 100644 applications/test/PisoFoam/Make/files delete mode 100644 applications/test/PisoFoam/Make/options delete mode 100644 applications/test/PisoFoam/PisoFoam.C delete mode 100644 applications/test/PisoFoam/turbulenceModel.H delete mode 100644 applications/test/RhoPimpleFoam/EEqn.H delete mode 100644 applications/test/RhoPimpleFoam/Make/files delete mode 100644 applications/test/RhoPimpleFoam/Make/options delete mode 100644 applications/test/RhoPimpleFoam/rhoPimpleFoam.C delete mode 100644 applications/test/RhoPimpleFoam/turbulenceModel.H delete mode 100644 applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/files delete mode 100644 applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/options delete mode 100644 applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C create mode 100644 src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.C rename src/{turbulenceModels/compressible/LES/DESModel/DESModel.H => TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.H} (56%) create mode 100644 src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.C create mode 100644 src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.H create mode 100644 src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.C create mode 100644 src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.H rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible}/turbulenceModelDoc.H (94%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C (87%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H (98%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C (95%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C (95%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H (98%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C (98%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C (97%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H (96%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C (91%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H (98%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H (98%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C (99%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H (99%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C (92%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H (98%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C (82%) rename src/{turbulenceModels/compressible/RAS => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H (94%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C (94%) rename src/{turbulenceModels/compressible/turbulenceModel => TurbulenceModels/compressible/turbulentFluidThermoModels}/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H (98%) create mode 100644 src/TurbulenceModels/compressible/turbulentFluidThermoModels/makeTurbulenceModel.H rename src/{turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H => TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModel.H} (57%) rename src/TurbulenceModels/compressible/{compressibleTurbulenceModels.C => turbulentFluidThermoModels/turbulentFluidThermoModels.C} (78%) create mode 100644 src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.C rename src/{turbulenceModels/incompressible/LES/DESModel/DESModel.H => TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.H} (56%) rename src/{turbulenceModels/incompressible/turbulenceModel => TurbulenceModels/incompressible}/turbulenceModelDoc.H (94%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LamBremhorstKE/LamBremhorstKE.C (72%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LamBremhorstKE/LamBremhorstKE.H (81%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienCubicKE/LienCubicKE.C (67%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienCubicKE/LienCubicKE.H (81%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienCubicKELowRe/LienCubicKELowRe.C (69%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienCubicKELowRe/LienCubicKELowRe.H (84%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienCubicKELowRe/LienCubicKELowReSetWallDissipation.H (100%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C (72%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H (82%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/LienLeschzinerLowRe/LienLeschzinerLowReSetWallDissipation.H (100%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/RNGkEpsilon/RNGkEpsilon.C (71%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/RNGkEpsilon/RNGkEpsilon.H (83%) rename src/{turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions => TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions}/fWallFunction/fWallFunctionFvPatchScalarField.C (92%) rename src/{turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions => TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions}/fWallFunction/fWallFunctionFvPatchScalarField.H (97%) rename src/{turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions => TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions}/v2WallFunction/v2WallFunctionFvPatchScalarField.C (92%) rename src/{turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions => TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions}/v2WallFunction/v2WallFunctionFvPatchScalarField.H (97%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/include/nonLinearWallFunctionsI.H (98%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/include/wallDissipationI.H (95%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/include/wallNonlinearViscosityI.H (97%) create mode 100644 src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/Changes rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/kOmega/kOmega.C (68%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/kOmega/kOmega.H (84%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/kkLOmega/kkLOmega.C (87%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/kkLOmega/kkLOmega.H (89%) rename src/{turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.C => TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.C} (73%) rename src/{turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.H => TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.H} (76%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/qZeta/qZeta.C (72%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/qZeta/qZeta.H (75%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/v2f/v2f.C (74%) rename src/{turbulenceModels/incompressible => TurbulenceModels/incompressible/turbulentTransportModels}/RAS/v2f/v2f.H (77%) rename src/{turbulenceModels/incompressible/RAS => TurbulenceModels/incompressible/turbulentTransportModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C (93%) rename src/{turbulenceModels/incompressible/RAS => TurbulenceModels/incompressible/turbulentTransportModels}/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H (98%) rename src/{turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFieldFwd.H => TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModel.H} (58%) rename src/TurbulenceModels/incompressible/{incompressibleTurbulenceModels.C => turbulentTransportModels/turbulentTransportModels.C} (82%) rename src/{turbulenceModels/incompressible/LES/SpalartAllmarasIDDES => TurbulenceModels/turbulenceModels/LES/LESdeltas}/IDDESDelta/IDDESDelta.C (60%) rename src/{turbulenceModels/incompressible/LES/SpalartAllmarasIDDES => TurbulenceModels/turbulenceModels/LES/LESdeltas}/IDDESDelta/IDDESDelta.H (88%) rename src/{turbulenceModels/incompressible/LES => TurbulenceModels/turbulenceModels/LES/LESdeltas}/vanDriestDelta/vanDriestDelta.C (61%) rename src/{turbulenceModels/incompressible/LES => TurbulenceModels/turbulenceModels/LES/LESdeltas}/vanDriestDelta/vanDriestDelta.H (87%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C (55%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H (64%) create mode 100644 src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C rename src/{turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.H => TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.H} (54%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C (54%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H (63%) create mode 100644 src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C rename src/{turbulenceModels/compressible => TurbulenceModels/turbulenceModels}/RAS/LaunderSharmaKE/LaunderSharmaKE.H (65%) create mode 100644 src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/RAS/SpalartAllmaras/SpalartAllmaras.H (68%) rename src/{turbulenceModels/incompressible/turbulenceModel => TurbulenceModels/turbulenceModels/RAS}/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C (97%) rename src/{turbulenceModels/incompressible/turbulenceModel => TurbulenceModels/turbulenceModels/RAS}/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H (96%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C (96%) rename src/{turbulenceModels/incompressible => TurbulenceModels/turbulenceModels}/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H (91%) create mode 100644 src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C rename src/{turbulenceModels/incompressible/turbulenceModel/laminar/laminar.H => TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H} (52%) create mode 100644 src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C rename src/{turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.H => TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H} (53%) create mode 100644 src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C rename src/{turbulenceModels/incompressible/RAS/laminar/laminar.H => TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H} (56%) rename src/{turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.H => lagrangian/Turbulence/parcels/include/makeThermoParcelTurbulenceForces.H} (77%) create mode 100644 src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C create mode 100644 src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.H rename src/{turbulenceModels/compressible/RAS/RASModel/RASModelDoc.H => lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForceI.H} (74%) rename src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/{mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.C => nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.C} (62%) rename src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/{mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.H => nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.H} (76%) delete mode 100755 src/turbulenceModels/Allwmake delete mode 100755 src/turbulenceModels/LES/Allwmake delete mode 100644 src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C delete mode 100644 src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H delete mode 100644 src/turbulenceModels/LES/LESdeltas/Make/files delete mode 100644 src/turbulenceModels/LES/LESdeltas/Make/options delete mode 100644 src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C delete mode 100644 src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H delete mode 100644 src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C delete mode 100644 src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H delete mode 100644 src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C delete mode 100644 src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H delete mode 100644 src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C delete mode 100644 src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H delete mode 100644 src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H delete mode 100644 src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.C delete mode 100644 src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H delete mode 100644 src/turbulenceModels/LES/LESfilters/Make/files delete mode 100644 src/turbulenceModels/LES/LESfilters/Make/options delete mode 100644 src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C delete mode 100644 src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.H delete mode 100644 src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C delete mode 100644 src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.H delete mode 100644 src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C delete mode 100644 src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.H delete mode 100755 src/turbulenceModels/compressible/Allwmake delete mode 100644 src/turbulenceModels/compressible/LES/DESModel/DESModel.C delete mode 100644 src/turbulenceModels/compressible/LES/DESModel/DESModelDoc.H delete mode 100644 src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.C delete mode 100644 src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.H delete mode 100644 src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.C delete mode 100644 src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.H delete mode 100644 src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.C delete mode 100644 src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.H delete mode 100644 src/turbulenceModels/compressible/LES/LESModel/LESModel.C delete mode 100644 src/turbulenceModels/compressible/LES/LESModel/LESModel.H delete mode 100644 src/turbulenceModels/compressible/LES/LESModel/LESModelDoc.H delete mode 100644 src/turbulenceModels/compressible/LES/Make/files delete mode 100644 src/turbulenceModels/compressible/LES/Make/options delete mode 100644 src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.C delete mode 100644 src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.H delete mode 100644 src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.C delete mode 100644 src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.H delete mode 100644 src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.C delete mode 100644 src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.H delete mode 100644 src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C delete mode 100644 src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H delete mode 100644 src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.C delete mode 100644 src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.H delete mode 100644 src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.C delete mode 100644 src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.H delete mode 100644 src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.C delete mode 100644 src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.H delete mode 100644 src/turbulenceModels/compressible/RAS/LRR/LRR.C delete mode 100644 src/turbulenceModels/compressible/RAS/LRR/LRR.H delete mode 100644 src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C delete mode 100644 src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H delete mode 100644 src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C delete mode 100644 src/turbulenceModels/compressible/RAS/Make/files delete mode 100644 src/turbulenceModels/compressible/RAS/Make/options delete mode 100644 src/turbulenceModels/compressible/RAS/RASModel/RASModel.C delete mode 100644 src/turbulenceModels/compressible/RAS/RASModel/RASModel.H delete mode 100644 src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.C delete mode 100644 src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.H delete mode 100644 src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.C delete mode 100644 src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.H delete mode 100644 src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C delete mode 100644 src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H delete mode 100644 src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/doc/compressibleRASBoundaryConditionsDoc.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.C delete mode 100644 src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.H delete mode 100644 src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C delete mode 100644 src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.H delete mode 100644 src/turbulenceModels/compressible/RAS/laminar/laminar.C delete mode 100644 src/turbulenceModels/compressible/RAS/laminar/laminar.H delete mode 100644 src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.C delete mode 100644 src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.H delete mode 100644 src/turbulenceModels/compressible/RAS/v2f/v2f.C delete mode 100644 src/turbulenceModels/compressible/RAS/v2f/v2f.H delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/Make/files delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/Make/options delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.C delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.H delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.C delete mode 100644 src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.H delete mode 100644 src/turbulenceModels/derivedFvPatchFields/Make/files delete mode 100644 src/turbulenceModels/derivedFvPatchFields/Make/options delete mode 100644 src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C delete mode 100644 src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.H delete mode 100644 src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C delete mode 100644 src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H delete mode 100644 src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.C delete mode 100755 src/turbulenceModels/incompressible/Allwmake delete mode 100644 src/turbulenceModels/incompressible/LES/DESModel/DESModel.C delete mode 100644 src/turbulenceModels/incompressible/LES/DESModel/DESModelDoc.H delete mode 100644 src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.C delete mode 100644 src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.H delete mode 100644 src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.C delete mode 100644 src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.H delete mode 100644 src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.C delete mode 100644 src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.H delete mode 100644 src/turbulenceModels/incompressible/LES/LESModel/LESModel.C delete mode 100644 src/turbulenceModels/incompressible/LES/LESModel/LESModel.H delete mode 100644 src/turbulenceModels/incompressible/LES/LESModel/LESModelDoc.H delete mode 100644 src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.C delete mode 100644 src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.H delete mode 100644 src/turbulenceModels/incompressible/LES/Make/files delete mode 100644 src/turbulenceModels/incompressible/LES/Make/options delete mode 100644 src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C delete mode 100644 src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.H delete mode 100644 src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.C delete mode 100644 src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.C delete mode 100644 src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.C delete mode 100644 src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H delete mode 100644 src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.C delete mode 100644 src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.H delete mode 100644 src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C delete mode 100644 src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H delete mode 100644 src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C delete mode 100644 src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.H delete mode 100644 src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.C delete mode 100644 src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.H delete mode 100644 src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C delete mode 100644 src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H delete mode 100644 src/turbulenceModels/incompressible/LES/laminar/laminar.C delete mode 100644 src/turbulenceModels/incompressible/LES/laminar/laminar.H delete mode 100644 src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.C delete mode 100644 src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.H delete mode 100644 src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.C delete mode 100644 src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.H delete mode 100644 src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.C delete mode 100644 src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.H delete mode 100644 src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.C delete mode 100644 src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.H delete mode 100644 src/turbulenceModels/incompressible/RAS/LRR/LRR.C delete mode 100644 src/turbulenceModels/incompressible/RAS/LRR/LRR.H delete mode 100644 src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C delete mode 100644 src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H delete mode 100644 src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C delete mode 100644 src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H delete mode 100644 src/turbulenceModels/incompressible/RAS/Make/files delete mode 100644 src/turbulenceModels/incompressible/RAS/Make/options delete mode 100644 src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C delete mode 100644 src/turbulenceModels/incompressible/RAS/RASModel/RASModel.H delete mode 100644 src/turbulenceModels/incompressible/RAS/RASModel/RASModelDoc.H delete mode 100644 src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.C delete mode 100644 src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C delete mode 100644 src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H delete mode 100644 src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/doc/incompressibleRASBoundaryConditionsDoc.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.C delete mode 100644 src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.H delete mode 100644 src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C delete mode 100644 src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.H delete mode 100644 src/turbulenceModels/incompressible/RAS/laminar/laminar.C delete mode 100644 src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.C delete mode 100644 src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.H delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/Make/files delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/Make/options delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.C delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.C delete mode 100644 src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.H rename tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/{mut => nut} (89%) delete mode 100644 tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/RASProperties rename tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/{mut => nut} (95%) rename tutorials/combustion/engineFoam/kivaTest/-180/{mut => nut} (87%) rename tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/{alphaSgs => alphat} (98%) rename tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/{muSgs => nut} (89%) delete mode 100644 tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/LESProperties rename tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/{alphaSgs => alphat} (94%) rename tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/{muSgs => nut} (91%) delete mode 100644 tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties rename tutorials/combustion/fireFoam/les/smallPoolFire2D/0/{muSgs => alphat} (98%) rename tutorials/combustion/fireFoam/les/smallPoolFire2D/0/{alphaSgs => nut} (95%) delete mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/LESProperties rename tutorials/combustion/fireFoam/les/smallPoolFire3D/0/{muSgs => alphat} (97%) rename tutorials/combustion/fireFoam/les/smallPoolFire3D/0/{alphaSgs => nut} (94%) delete mode 100644 tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/LESProperties rename tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/{mut => nut} (85%) rename tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/{mut => nut} (86%) rename tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/{alphaSgs => alphat} (100%) rename tutorials/{incompressible/pisoFoam/les/pitzDailyMapped/0/nuSgs => compressible/rhoPimpleFoam/les/pitzDaily/0/nut} (98%) delete mode 100644 tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/LESProperties rename tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/{mut => nut} (85%) rename tutorials/compressible/rhoPimpleFoam/ras/cavity/0/{mut => nut} (91%) rename tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/{mut => nut} (88%) delete mode 100644 tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties rename tutorials/compressible/rhoPimplecFoam/angledDuct/0/{mut => nut} (85%) delete mode 100644 tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties rename tutorials/compressible/{rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut => rhoPorousSimpleFoam/angledDuctImplicit/0/nut} (85%) delete mode 100644 tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties create mode 100644 tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties rename tutorials/compressible/{rhoPorousSimpleFoam/angledDuctImplicit/0/mut => rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/nut} (85%) delete mode 100644 tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties create mode 100644 tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/turbulenceProperties rename tutorials/compressible/rhoSimplecFoam/squareBend/0/{mut => nut} (92%) delete mode 100644 tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties rename tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/{mut => nut} (92%) delete mode 100644 tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/RASProperties rename tutorials/compressible/sonicFoam/ras/prism/0/{mut => nut} (93%) delete mode 100644 tutorials/compressible/sonicFoam/ras/prism/constant/RASProperties delete mode 100644 tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/RASProperties create mode 100644 tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/turbulenceProperties delete mode 100644 tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties create mode 100644 tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/turbulenceProperties delete mode 100644 tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties create mode 100644 tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/turbulenceProperties rename tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/{mut => nut} (85%) delete mode 100644 tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/RASProperties rename tutorials/heatTransfer/buoyantSimpleFoam/{externalCoupledCavity/0/mut => buoyantCavity/0/nut} (83%) delete mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/RASProperties rename tutorials/{compressible/rhoPimpleFoam/ras/cavity/constant/RASProperties => heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/turbulenceProperties} (89%) rename tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/{mut => nut} (91%) delete mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/RASProperties rename tutorials/{compressible/rhoPimpleFoam/ras/angledDuct/constant/RASProperties => heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/turbulenceProperties} (89%) rename tutorials/heatTransfer/buoyantSimpleFoam/{buoyantCavity/0/mut => externalCoupledCavity/0/nut} (83%) delete mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/RASProperties create mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/turbulenceProperties rename tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/{mut => nut} (83%) delete mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties rename tutorials/{combustion/XiFoam/ras/moriyoshiHomogeneous/constant/RASProperties => heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/turbulenceProperties} (90%) rename tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/{mut => nut} (86%) delete mode 100644 tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties rename tutorials/{compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties => heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/turbulenceProperties} (90%) delete mode 100644 tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/bottomAir/RASProperties delete mode 120000 tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/topAir/RASProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/alphat create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/nut delete mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/RASProperties delete mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/porous/RASProperties delete mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/bottomAir/RASProperties delete mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/topAir/RASProperties delete mode 100644 tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/RASProperties delete mode 100644 tutorials/incompressible/SRFSimpleFoam/mixer/constant/RASProperties create mode 100644 tutorials/incompressible/SRFSimpleFoam/mixer/constant/turbulenceProperties create mode 100644 tutorials/incompressible/SRFSimpleFoam/mixer/turbulenceProperties delete mode 100644 tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/RASProperties rename tutorials/{combustion/engineFoam/kivaTest/constant/RASProperties => incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/turbulenceProperties} (90%) delete mode 100644 tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/RASProperties create mode 100644 tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/RASProperties create mode 100644 tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/RASProperties create mode 100644 tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/RASProperties rename tutorials/{multiphase/multiphaseEulerFoam/bubbleColumn/0/nuSgs => incompressible/pimpleDyMFoam/oscillatingInletACMI2D/0.org/nut} (61%) delete mode 100644 tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/RASProperties delete mode 100644 tutorials/incompressible/pimpleDyMFoam/propeller/constant/RASProperties delete mode 100644 tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/RASProperties delete mode 100644 tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/RASProperties create mode 100644 tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/pimpleFoam/TJunction/constant/RASProperties delete mode 100644 tutorials/incompressible/pimpleFoam/TJunctionFan/constant/RASProperties rename tutorials/incompressible/pimpleFoam/channel395/0.org/{nuSgs => nut} (98%) delete mode 100644 tutorials/incompressible/pimpleFoam/channel395/0/nuSgs.gz delete mode 100644 tutorials/incompressible/pimpleFoam/channel395/constant/LESProperties delete mode 100644 tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/RASProperties delete mode 100644 tutorials/incompressible/pimpleFoam/pitzDaily/constant/RASProperties delete mode 100644 tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/LESProperties delete mode 100644 tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/nuSgs delete mode 100644 tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/RASProperties rename tutorials/{compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/RASProperties => incompressible/pisoFoam/les/motorBike/motorBike/constant/turbulenceProperties} (90%) rename tutorials/incompressible/pisoFoam/les/pitzDaily/0/{nuSgs => nut} (98%) delete mode 100644 tutorials/incompressible/pisoFoam/les/pitzDaily/constant/LESProperties rename tutorials/{compressible/rhoPimpleFoam/les/pitzDaily/0/muSgs => incompressible/pisoFoam/les/pitzDailyMapped/0/nut} (95%) delete mode 100644 tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/LESProperties create mode 100644 tutorials/incompressible/pisoFoam/ras/cavity/0/omega delete mode 100644 tutorials/incompressible/pisoFoam/ras/cavity/constant/RASProperties delete mode 100644 tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/RASProperties delete mode 100644 tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/RASProperties create mode 100644 tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/RASProperties create mode 100644 tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/simpleFoam/airFoil2D/constant/RASProperties create mode 100644 tutorials/incompressible/simpleFoam/airFoil2D/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties create mode 100644 tutorials/incompressible/simpleFoam/mixerVessel2D/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties create mode 100644 tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/simpleFoam/pipeCyclic/constant/RASProperties delete mode 100644 tutorials/incompressible/simpleFoam/pitzDaily/constant/RASProperties create mode 100644 tutorials/incompressible/simpleFoam/pitzDaily/constant/turbulenceProperties delete mode 100644 tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/RASProperties create mode 100644 tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/turbulenceProperties rename tutorials/incompressible/simpleFoam/turbineSiting/constant/{RASProperties => turbulenceProperties} (58%) rename tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/{mut => nut} (95%) delete mode 100644 tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/RASProperties rename tutorials/lagrangian/{simpleReactingParcelFoam/verticalChannel/0.org/mut => LTSReactingParcelFoam/verticalChannel/0.org/nut} (93%) rename tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/{0.org/mut => 0/nut} (93%) delete mode 100644 tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/RASProperties delete mode 100644 tutorials/lagrangian/MPPICFoam/column/constant/RASProperties rename tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/{mut => nut} (86%) delete mode 100644 tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties delete mode 100644 tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/RASProperties delete mode 100644 tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/RASProperties rename tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/{mut => nut} (88%) delete mode 100644 tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/RASProperties rename tutorials/lagrangian/reactingParcelFoam/filter/0.org/{mut => nut} (93%) rename tutorials/lagrangian/reactingParcelFoam/filter/0/{mut => nut} (93%) delete mode 100644 tutorials/lagrangian/reactingParcelFoam/filter/constant/RASProperties rename tutorials/lagrangian/{LTSReactingParcelFoam/verticalChannel/0/mut => reactingParcelFoam/verticalChannel/0.org/nut} (93%) delete mode 100644 tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/RASProperties rename tutorials/lagrangian/{reactingParcelFoam/verticalChannel/0.org/mut => simpleReactingParcelFoam/verticalChannel/0.org/nut} (93%) delete mode 100644 tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/mut create mode 100644 tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/nut delete mode 100644 tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/RASProperties rename tutorials/lagrangian/sprayFoam/aachenBomb/0/{mut => nut} (90%) delete mode 100644 tutorials/lagrangian/sprayFoam/aachenBomb/constant/RASProperties delete mode 100644 tutorials/mesh/foamyHexMesh/mixerVessel/constant/RASProperties delete mode 100644 tutorials/multiphase/LTSInterFoam/DTCHull/constant/RASProperties rename tutorials/multiphase/cavitatingFoam/les/throttle/0/{nuSgs => nut} (98%) delete mode 100644 tutorials/multiphase/cavitatingFoam/les/throttle/constant/LESProperties rename tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/{nuSgs => nut} (98%) delete mode 100644 tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/LESProperties delete mode 100644 tutorials/multiphase/cavitatingFoam/ras/throttle/constant/RASProperties delete mode 100644 tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/constant/RASProperties delete mode 100644 tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/LESProperties delete mode 100644 tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/LESProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/constant/RASProperties delete mode 100644 tutorials/multiphase/interDyMFoam/ras/testTubeMixer/constant/RASProperties rename tutorials/multiphase/interFoam/les/nozzleFlow2D/0/{nuSgs => nut} (98%) delete mode 100644 tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/LESProperties delete mode 100644 tutorials/multiphase/interFoam/ras/angledDuct/constant/RASProperties delete mode 100644 tutorials/multiphase/interFoam/ras/damBreak/constant/RASProperties delete mode 100644 tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/RASProperties delete mode 100644 tutorials/multiphase/interFoam/ras/waterChannel/constant/RASProperties delete mode 100644 tutorials/multiphase/interFoam/ras/weirOverflow/constant/RASProperties delete mode 100644 tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/RASProperties delete mode 100644 tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/LESProperties rename tutorials/multiphase/{interDyMFoam/ras/sloshingTank3D3DoF/constant/RASProperties => multiphaseEulerFoam/bubbleColumn/constant/turbulenceProperties} (91%) delete mode 100644 tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/LESProperties delete mode 100644 tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/LESProperties delete mode 100644 tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/LESProperties rename tutorials/{heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomWater/RASProperties => multiphase/multiphaseEulerFoam/mixerVessel2D/constant/turbulenceProperties} (89%) delete mode 100644 tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/RASProperties diff --git a/applications/solvers/combustion/PDRFoam/Make/options b/applications/solvers/combustion/PDRFoam/Make/options index b6c6398fdea..6b89ae63835 100644 --- a/applications/solvers/combustion/PDRFoam/Make/options +++ b/applications/solvers/combustion/PDRFoam/Make/options @@ -8,8 +8,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ @@ -20,8 +20,8 @@ EXE_INC = \ EXE_LIBS = \ -lengine \ -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfluidThermophysicalModels \ -lreactionThermophysicalModels \ -lspecie \ diff --git a/applications/solvers/combustion/PDRFoam/PDRFoam.C b/applications/solvers/combustion/PDRFoam/PDRFoam.C index ad6e2d02986..1d56ab28f84 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoam.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoam.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -69,7 +69,7 @@ Description #include "fvCFD.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "laminarFlameSpeed.H" #include "XiModel.H" #include "PDRDragModel.H" diff --git a/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C b/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C index 88d6305e12a..1904325703b 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,7 +58,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "laminarFlameSpeed.H" #include "XiModel.H" #include "PDRDragModel.H" diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C index 426e65981d3..de5b26c1353 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "basicXiSubXiEq.H" +#include "zeroGradientFvPatchFields.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C index 05aeb059f6a..f5a76fa5c20 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "basicXiSubG.H" +#include "zeroGradientFvPatchFields.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H index feb9ae8d41d..4cf94228048 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,7 +38,7 @@ SourceFiles #include "IOdictionary.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "multivariateSurfaceInterpolationScheme.H" #include "runTimeSelectionTables.H" diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C index d8e3a9ed9cf..be2cc6dab3c 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/dragModels/basic/basic.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "basic.H" +#include "zeroGradientFvPatchFields.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C index 12cfba078b3..73dbee5664c 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C +++ b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,8 +27,6 @@ License #include "PDRDragModel.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -47,15 +45,27 @@ addToRunTimeSelectionTable(RASModel, PDRkEpsilon, dictionary); PDRkEpsilon::PDRkEpsilon ( + const geometricOneField& alpha, const volScalarField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const fluidThermo& thermophysicalModel, const word& turbulenceModelName, const word& modelName ) : - kEpsilon(rho, U, phi, thermophysicalModel, turbulenceModelName, modelName), + Foam::RASModels::kEpsilon<eddyDiffusivity<compressible::turbulenceModel> > + ( + geometricOneField(), + rho, + U, + phi, + phi, + thermophysicalModel, + turbulenceModelName, + modelName + ), C4_ ( @@ -96,12 +106,12 @@ void PDRkEpsilon::correct() if (!turbulence_) { // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); + nut_ = Cmu_*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); + //***HGWalphat_ = mut_/Prt_; + //alphat_.correctBoundaryConditions(); return; } @@ -116,7 +126,7 @@ void PDRkEpsilon::correct() } tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField G(GName(), mut_*(tgradU() && dev(twoSymm(tgradU())))); + volScalarField G(GName(), rho_*nut_*(tgradU() && dev(twoSymm(tgradU())))); tgradU.clear(); // Update espsilon and G at the wall @@ -143,7 +153,7 @@ void PDRkEpsilon::correct() ( betav*fvm::ddt(rho_, epsilon_) + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) + - fvm::laplacian(rho_*DepsilonEff(), epsilon_) == C1_*betav*G*epsilon_/k_ + 1.5*pow(Cmu_, 3.0/4.0)*GR*sqrt(k_)/LI @@ -165,7 +175,7 @@ void PDRkEpsilon::correct() ( betav*fvm::ddt(rho_, k_) + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) + - fvm::laplacian(rho_*DkEff(), k_) == betav*G + GR - fvm::SuSp((2.0/3.0)*betav*rho_*divU, k_) @@ -177,12 +187,12 @@ void PDRkEpsilon::correct() bound(k_, kMin_); // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); + nut_ = Cmu_*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); + //***HGWalphat_ = mut_/Prt_; + //alphat_.correctBoundaryConditions(); } diff --git a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H index d210aab70c5..689a47844a4 100644 --- a/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.H +++ b/applications/solvers/combustion/PDRFoam/PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -60,8 +60,8 @@ SourceFiles #ifndef compressiblePDRkEpsilon_H #define compressiblePDRkEpsilon_H - #include "kEpsilon.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -78,7 +78,13 @@ namespace RASModels class PDRkEpsilon : - public kEpsilon + public Foam::RASModels::kEpsilon + < + eddyDiffusivity + < + compressible::turbulenceModel + > + > { // Private data @@ -97,8 +103,10 @@ public: //- Construct from components PDRkEpsilon ( + const geometricOneField& alpha, const volScalarField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const fluidThermo& thermophysicalModel, const word& turbulenceModelName = turbulenceModel::typeName, diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C index 8fe73daa944..ba0e121e7b5 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "XiEqModel.H" +#include "zeroGradientFvPatchFields.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H index 929c4df11c0..2574c4c1448 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiEqModels/XiEqModel/XiEqModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,7 +43,7 @@ SourceFiles #include "IOdictionary.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H index 3bc4b53a95e..ac61eb7f8a3 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiGModels/XiGModel/XiGModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -40,7 +40,7 @@ SourceFiles #include "IOdictionary.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H index ad091f410fb..ae69d5bab5f 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.H +++ b/applications/solvers/combustion/PDRFoam/XiModels/XiModel/XiModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -92,8 +92,9 @@ SourceFiles #include "IOdictionary.H" #include "psiuReactionThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "multivariateSurfaceInterpolationScheme.H" +#include "fvcDiv.H" #include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.C b/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.C index caf471a15a3..91ad18fdff5 100644 --- a/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.C +++ b/applications/solvers/combustion/PDRFoam/XiModels/transport/transport.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,11 @@ License \*---------------------------------------------------------------------------*/ #include "transport.H" +#include "surfaceInterpolate.H" +#include "fvmDdt.H" +#include "fvcLaplacian.H" +#include "fvmDiv.H" +#include "fvmSup.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // diff --git a/applications/solvers/combustion/XiFoam/Make/options b/applications/solvers/combustion/XiFoam/Make/options index 468cc1919ba..4860d14f4d0 100644 --- a/applications/solvers/combustion/XiFoam/Make/options +++ b/applications/solvers/combustion/XiFoam/Make/options @@ -7,7 +7,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude EXE_LIBS = \ @@ -16,9 +17,8 @@ EXE_LIBS = \ -lsampling \ -lmeshTools \ -lengine \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfluidThermophysicalModels \ -lreactionThermophysicalModels \ -lspecie \ diff --git a/applications/solvers/combustion/XiFoam/XiFoam.C b/applications/solvers/combustion/XiFoam/XiFoam.C index 84fac04820f..898e79f415c 100644 --- a/applications/solvers/combustion/XiFoam/XiFoam.C +++ b/applications/solvers/combustion/XiFoam/XiFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -51,7 +51,7 @@ Description #include "fvCFD.H" #include "psiuReactionThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "laminarFlameSpeed.H" #include "ignition.H" #include "Switch.H" diff --git a/applications/solvers/combustion/chemFoam/Make/options b/applications/solvers/combustion/chemFoam/Make/options index 9facf7ac9c0..79647a86109 100644 --- a/applications/solvers/combustion/chemFoam/Make/options +++ b/applications/solvers/combustion/chemFoam/Make/options @@ -1,6 +1,7 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/thermophysicalFunctions/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ @@ -12,8 +13,8 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lfluidThermophysicalModels \ -lchemistryModel \ diff --git a/applications/solvers/combustion/chemFoam/chemFoam.C b/applications/solvers/combustion/chemFoam/chemFoam.C index 4183045a103..699a929bbce 100644 --- a/applications/solvers/combustion/chemFoam/chemFoam.C +++ b/applications/solvers/combustion/chemFoam/chemFoam.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "psiReactionThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "psiChemistryModel.H" #include "chemistrySolver.H" #include "OFstream.H" diff --git a/applications/solvers/combustion/coldEngineFoam/Make/options b/applications/solvers/combustion/coldEngineFoam/Make/options index d688fb1e2df..c49f5de1b84 100644 --- a/applications/solvers/combustion/coldEngineFoam/Make/options +++ b/applications/solvers/combustion/coldEngineFoam/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -14,9 +15,8 @@ EXE_INC = \ EXE_LIBS = \ -lengine \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfluidThermophysicalModels \ -lspecie \ -lfiniteVolume \ diff --git a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C index 43eb616e173..988cf128b3d 100644 --- a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C +++ b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description #include "engineTime.H" #include "engineMesh.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "OFstream.H" #include "fvIOoptionList.H" #include "pimpleControl.H" diff --git a/applications/solvers/combustion/engineFoam/Make/options b/applications/solvers/combustion/engineFoam/Make/options index fcbc3a4206f..0ede4569ef8 100644 --- a/applications/solvers/combustion/engineFoam/Make/options +++ b/applications/solvers/combustion/engineFoam/Make/options @@ -8,7 +8,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude EXE_LIBS = \ @@ -17,9 +18,8 @@ EXE_LIBS = \ -lsampling \ -lmeshTools \ -lengine \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfluidThermophysicalModels \ -lreactionThermophysicalModels \ -lspecie \ diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C index a35e22dc58d..97c5cc56f2e 100644 --- a/applications/solvers/combustion/engineFoam/engineFoam.C +++ b/applications/solvers/combustion/engineFoam/engineFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -52,7 +52,7 @@ Description #include "engineTime.H" #include "engineMesh.H" #include "psiuReactionThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "laminarFlameSpeed.H" #include "ignition.H" #include "Switch.H" diff --git a/applications/solvers/combustion/fireFoam/Make/options b/applications/solvers/combustion/fireFoam/Make/options index cd5ad097ace..cccf0a7dacf 100644 --- a/applications/solvers/combustion/fireFoam/Make/options +++ b/applications/solvers/combustion/fireFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ -I${LIB_SRC}/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \ @@ -34,8 +35,8 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lspecie \ -lfluidThermophysicalModels \ -lsolidProperties \ diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C index b8c48549a68..b70a9d6ccbd 100644 --- a/applications/solvers/combustion/fireFoam/fireFoam.C +++ b/applications/solvers/combustion/fireFoam/fireFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicReactingCloud.H" #include "surfaceFilmModel.H" #include "pyrolysisModelCollection.H" diff --git a/applications/solvers/combustion/reactingFoam/LTSReactingFoam/LTSReactingFoam.C b/applications/solvers/combustion/reactingFoam/LTSReactingFoam/LTSReactingFoam.C index 0b34210865f..9088b382a4c 100644 --- a/applications/solvers/combustion/reactingFoam/LTSReactingFoam/LTSReactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/LTSReactingFoam/LTSReactingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "psiCombustionModel.H" #include "multivariateScheme.H" #include "pimpleControl.H" diff --git a/applications/solvers/combustion/reactingFoam/LTSReactingFoam/Make/options b/applications/solvers/combustion/reactingFoam/LTSReactingFoam/Make/options index abac9d96a4c..1028061264c 100644 --- a/applications/solvers/combustion/reactingFoam/LTSReactingFoam/Make/options +++ b/applications/solvers/combustion/reactingFoam/LTSReactingFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = -ggdb3 \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -17,9 +18,8 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lspecie \ -lfluidThermophysicalModels \ diff --git a/applications/solvers/combustion/reactingFoam/Make/options b/applications/solvers/combustion/reactingFoam/Make/options index 15cf68cb5e1..5a7c91bce97 100644 --- a/applications/solvers/combustion/reactingFoam/Make/options +++ b/applications/solvers/combustion/reactingFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -16,9 +17,8 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lspecie \ -lfluidThermophysicalModels \ diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C index 831df5c9a3e..755cf14ab28 100644 --- a/applications/solvers/combustion/reactingFoam/reactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,7 +30,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "psiCombustionModel.H" #include "multivariateScheme.H" #include "pimpleControl.H" diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/Make/options b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/Make/options index bf015097e35..a9ea986c0ea 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/Make/options +++ b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -18,9 +19,8 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lspecie \ -lfluidThermophysicalModels \ diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C index fd4b6f58eb5..0adee03a9fa 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C +++ b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "rhoCombustionModel.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "multivariateScheme.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/Make/options b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/Make/options index bf015097e35..a9ea986c0ea 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/Make/options +++ b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -18,9 +19,8 @@ EXE_LIBS = \ -lfvOptions \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lspecie \ -lfluidThermophysicalModels \ diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C index 192fb74051a..bdbf5f594cc 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "rhoCombustionModel.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "multivariateScheme.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/rhoCentralFoam/Make/options b/applications/solvers/compressible/rhoCentralFoam/Make/options index 4ddaa7fb971..1b16a7b364e 100644 --- a/applications/solvers/compressible/rhoCentralFoam/Make/options +++ b/applications/solvers/compressible/rhoCentralFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude @@ -12,7 +13,6 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lrhoCentralFoam \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lmeshTools diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/Make/options b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/Make/options index 33707728f69..f79e10048ee 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/Make/options +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude @@ -13,8 +14,7 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lrhoCentralFoam \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -ldynamicMesh \ -lmeshTools diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C index a4282534217..d8f83da121c 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "zeroGradientFvPatchFields.H" #include "fixedRhoFvPatchScalarField.H" #include "motionSolver.H" diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C index 3ae35694ec7..164f0d1a209 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "zeroGradientFvPatchFields.H" #include "fixedRhoFvPatchScalarField.H" diff --git a/applications/solvers/compressible/rhoPimpleFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/Make/options index c25d7701488..8f38ef182ef 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/Make/options +++ b/applications/solvers/compressible/rhoPimpleFoam/Make/options @@ -1,6 +1,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -10,9 +11,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options index 502938c53c0..669cd4a3d4f 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -11,9 +12,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C index 8f2943f84cf..8ff8c28da27 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoLTSPimpleFoam/rhoLTSPimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "fvIOoptionList.H" #include "fvcSmooth.H" #include "pimpleControl.H" diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/Make/options index 2093b620b5e..f94f65e6ac0 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/Make/options +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -14,9 +15,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/rhoPimpleDyMFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/rhoPimpleDyMFoam.C index fcfc2aa7952..f3676b66dba 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/rhoPimpleDyMFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleDyMFoam/rhoPimpleDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -39,7 +39,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "bound.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C index 6c6c4e99ab4..ae43c950444 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "bound.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options index 502938c53c0..669cd4a3d4f 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -11,9 +12,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C index 308a90e51af..fd3e102dc4b 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimplecFoam/rhoPimplecFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "bound.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/rhoSimpleFoam/Make/options b/applications/solvers/compressible/rhoSimpleFoam/Make/options index 4606400cbdf..dc86432603e 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/Make/options +++ b/applications/solvers/compressible/rhoSimpleFoam/Make/options @@ -1,7 +1,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -11,8 +11,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lsampling \ -lmeshTools \ diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options index 39d6f696eb5..bf3eda58730 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/Make/options @@ -1,8 +1,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -12,8 +12,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lsampling \ -lmeshTools \ diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C index fd30404ae6b..d8598bae475 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "fvIOoptionList.H" #include "IOporosityModelList.H" #include "simpleControl.H" diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C index c0a6282a3e4..1d70a557cd8 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "simpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options index cc82ba958d7..bf3eda58730 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/Make/options @@ -1,8 +1,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -12,7 +12,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lsampling \ -lmeshTools \ diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/rhoSimplecFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/rhoSimplecFoam.C index a7c9b2070b3..bad31d3783c 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/rhoSimplecFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimplecFoam/rhoSimplecFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "mixedFvPatchFields.H" #include "bound.H" #include "simpleControl.H" diff --git a/applications/solvers/compressible/sonicFoam/Make/options b/applications/solvers/compressible/sonicFoam/Make/options index b1663bb8243..92ca5cd17b9 100644 --- a/applications/solvers/compressible/sonicFoam/Make/options +++ b/applications/solvers/compressible/sonicFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ @@ -10,9 +11,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lmeshTools \ -lsampling \ -lfvOptions \ diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options index 761311a8b0b..1561dffa7d1 100644 --- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options +++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I../../rhoPimpleFoam/rhoPimpleDyMFoam \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ @@ -15,9 +16,8 @@ EXE_INC = \ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lsampling \ diff --git a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C index 5a8e0b92edc..a78ef861d68 100644 --- a/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C +++ b/applications/solvers/compressible/sonicFoam/sonicDyMFoam/sonicDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/compressible/sonicFoam/sonicFoam.C b/applications/solvers/compressible/sonicFoam/sonicFoam.C index 875e7afa7d7..1042889dbb9 100644 --- a/applications/solvers/compressible/sonicFoam/sonicFoam.C +++ b/applications/solvers/compressible/sonicFoam/sonicFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options index 1e23e459440..9a60cac4333 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/Make/options @@ -1,21 +1,21 @@ EXE_INC = \ -I../buoyantBoussinesqSimpleFoam \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ - -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude + -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lincompressibleTransportModels \ + -lradiationModels \ -lfiniteVolume \ -lfvOptions \ -lsampling \ - -lmeshTools \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleTransportModels \ - -lradiationModels + -lmeshTools diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C index 5827ddf2c99..1e9fca7f868 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C @@ -47,7 +47,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "radiationModel.H" #include "fvIOoptionList.H" #include "pimpleControl.H" diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/Make/options index 6a6311e47cd..48d83838acd 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/Make/options @@ -1,18 +1,18 @@ EXE_INC = \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/fvOptions/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel + -I$(LIB_SRC)/fvOptions/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lincompressibleTransportModels \ -lfiniteVolume \ -lsampling \ -lmeshTools \ - -lfvOptions \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleTransportModels + -lfvOptions diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C index bcf4729a4b7..e9a964c814a 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C @@ -47,7 +47,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "fvIOoptionList.H" #include "simpleControl.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options index e57cfc441f9..fc4620b28b4 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude EXE_LIBS = \ -lfiniteVolume \ @@ -15,7 +16,5 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lradiationModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels - + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C index 9d62893f18a..3792168548c 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "radiationModel.H" #include "fvIOoptionList.H" #include "pimpleControl.H" diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options b/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options index 11decf6bb42..383ee341f19 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/Make/options @@ -5,9 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/RAS \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude EXE_LIBS = \ -lfiniteVolume \ @@ -17,6 +16,6 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lradiationModels \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lmeshTools diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C index 2e52da8f531..6c05e0cacc1 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "radiationModel.H" #include "simpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options index 359d2d45264..75695454d68 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options @@ -11,7 +11,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude @@ -21,9 +22,8 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lsolidThermo \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lmeshTools \ -lfiniteVolume \ -lradiationModels \ diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index 6aae0cf5b68..7ee8492cbe2 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "fixedGradientFvPatchFields.H" #include "regionProperties.H" #include "compressibleCourantNo.H" diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options index 93b544d0e03..e3c4d178f13 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options @@ -9,9 +9,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude @@ -21,9 +20,8 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lsolidThermo \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lradiationModels \ -lfvOptions \ -lregionModels \ diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index 75720dd51c2..6c07dcbdfc4 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "fixedGradientFvPatchFields.H" #include "regionProperties.H" #include "solidThermo.H" diff --git a/applications/solvers/heatTransfer/thermoFoam/Make/options b/applications/solvers/heatTransfer/thermoFoam/Make/options index d4d56df1b1e..fc4620b28b4 100644 --- a/applications/solvers/heatTransfer/thermoFoam/Make/options +++ b/applications/solvers/heatTransfer/thermoFoam/Make/options @@ -5,11 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude EXE_LIBS = \ -lfiniteVolume \ @@ -19,6 +16,5 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lradiationModels \ -lspecie \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C index f765ca86e8a..a23ce288e3c 100644 --- a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C +++ b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,8 +31,8 @@ Description #include "fvCFD.H" #include "rhoThermo.H" -#include "turbulenceModel.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" +#include "turbulentFluidThermoModel.H" #include "LESModel.H" #include "radiationModel.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options index 1223bdd06f4..50a9de0195a 100644 --- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options +++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/Make/options @@ -1,11 +1,13 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C index 62a083e3653..460e72c5e85 100644 --- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C +++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C @@ -47,7 +47,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "simpleControl.H" template<class Type> diff --git a/applications/solvers/incompressible/boundaryFoam/Make/options b/applications/solvers/incompressible/boundaryFoam/Make/options index d993beac0a2..895199f10ed 100644 --- a/applications/solvers/incompressible/boundaryFoam/Make/options +++ b/applications/solvers/incompressible/boundaryFoam/Make/options @@ -1,14 +1,14 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude EXE_LIBS = \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C index 03ccffccef7..39d214a6e13 100644 --- a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C +++ b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C @@ -37,7 +37,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "wallFvPatch.H" #include "makeGraph.H" diff --git a/applications/solvers/incompressible/pimpleFoam/Make/options b/applications/solvers/incompressible/pimpleFoam/Make/options index a597aafbc7f..bc0201f371c 100644 --- a/applications/solvers/incompressible/pimpleFoam/Make/options +++ b/applications/solvers/incompressible/pimpleFoam/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -9,10 +10,9 @@ EXE_INC = \ EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/Make/options b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/Make/options index 7cdb6a55511..20feab872f6 100644 --- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/Make/options +++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -8,10 +9,9 @@ EXE_INC = \ -I$(LIB_SRC)/sampling/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C index f6beed97336..f9c35f073e6 100644 --- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C @@ -34,7 +34,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "SRFModel.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options index 263fd7375f8..90e43d56aa1 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options +++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/Make/options @@ -1,6 +1,7 @@ EXE_INC = \ -I.. \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -11,10 +12,9 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfiniteVolume \ -lfvOptions \ -lsampling \ diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C index 3feb2a97f55..7c23e6583e8 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C index 8361c546204..85861ae394a 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C @@ -36,7 +36,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "IOporosityModelList.H" diff --git a/applications/solvers/incompressible/pisoFoam/Make/options b/applications/solvers/incompressible/pisoFoam/Make/options index 259f95f7b93..23368faba68 100644 --- a/applications/solvers/incompressible/pisoFoam/Make/options +++ b/applications/solvers/incompressible/pisoFoam/Make/options @@ -1,13 +1,13 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools diff --git a/applications/solvers/incompressible/pisoFoam/pisoFoam.C b/applications/solvers/incompressible/pisoFoam/pisoFoam.C index 14237946a83..b812418fd6a 100644 --- a/applications/solvers/incompressible/pisoFoam/pisoFoam.C +++ b/applications/solvers/incompressible/pisoFoam/pisoFoam.C @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/incompressible/simpleFoam/Make/options b/applications/solvers/incompressible/simpleFoam/Make/options index f9913bf0dd1..bc0201f371c 100644 --- a/applications/solvers/incompressible/simpleFoam/Make/options +++ b/applications/solvers/incompressible/simpleFoam/Make/options @@ -1,6 +1,6 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -10,8 +10,8 @@ EXE_INC = \ EXE_LIBS = \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options index cae6c88fed7..a888499d85d 100644 --- a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options +++ b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/Make/options @@ -1,17 +1,18 @@ EXE_INC = \ -I.. \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude EXE_LIBS = \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C index 354757b66d9..00178524aef 100644 --- a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C @@ -32,7 +32,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "SRFModel.H" #include "simpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/Make/options b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/Make/options index 6cee67f66f7..a888499d85d 100644 --- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/Make/options +++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/Make/options @@ -1,7 +1,7 @@ EXE_INC = \ -I.. \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -11,8 +11,8 @@ EXE_INC = \ EXE_LIBS = \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C index d10ba2d1efb..a6c48d7c19d 100644 --- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "simpleControl.H" #include "IOMRFZoneList.H" #include "IOporosityModelList.H" diff --git a/applications/solvers/incompressible/simpleFoam/simpleFoam.C b/applications/solvers/incompressible/simpleFoam/simpleFoam.C index 9541bcbd1be..807c1e5a086 100644 --- a/applications/solvers/incompressible/simpleFoam/simpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/simpleFoam.C @@ -31,7 +31,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "simpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMTurbulenceModels.C b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMTurbulenceModels.C index 1aeca779573..3ade3bbfdde 100644 --- a/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMTurbulenceModels.C +++ b/applications/solvers/lagrangian/DPMFoam/DPMTurbulenceModels/DPMTurbulenceModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,7 +29,7 @@ License #include "makeTurbulenceModel.H" #include "laminar.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "LESModel.H" makeBaseTurbulenceModel diff --git a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options index 4a0c3a56593..843220db55b 100644 --- a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options +++ b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/Make/options @@ -22,7 +22,7 @@ EXE_LIBS = \ -lmeshTools \ -llagrangian \ -llagrangianIntermediate \ - -llagrangianTurbulentSubModels \ + -llagrangianTurbulence \ -lthermophysicalFunctions \ -lspecie \ -lradiationModels \ diff --git a/applications/solvers/lagrangian/DPMFoam/Make/options b/applications/solvers/lagrangian/DPMFoam/Make/options index 83684e57c44..5734ebb6587 100644 --- a/applications/solvers/lagrangian/DPMFoam/Make/options +++ b/applications/solvers/lagrangian/DPMFoam/Make/options @@ -21,7 +21,7 @@ EXE_LIBS = \ -lmeshTools \ -llagrangian \ -llagrangianIntermediate \ - -llagrangianTurbulentSubModels \ + -llagrangianTurbulence \ -lthermophysicalFunctions \ -lspecie \ -lradiationModels \ diff --git a/applications/solvers/lagrangian/coalChemistryFoam/Make/options b/applications/solvers/lagrangian/coalChemistryFoam/Make/options index 8abe45c5c0c..5689c1bab15 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/Make/options +++ b/applications/solvers/lagrangian/coalChemistryFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ @@ -30,9 +31,8 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ @@ -54,4 +54,3 @@ EXE_LIBS = \ -lcombustionModels \ -lfvOptions \ -lsampling - diff --git a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C index 475e48a1cc0..fc28c3de42b 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C +++ b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicThermoCloud.H" #include "coalCloud.H" #include "psiCombustionModel.H" diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options index 05b6391edae..bec7663b66b 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -21,8 +22,8 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lradiationModels \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options index e35babe8f4e..000a4abb2d8 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -25,8 +26,8 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lradiationModels \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lmeshTools \ diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C index 8f7619cdd3f..b355148a94c 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C index 2bf1238452f..befcb57d02b 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "basicKinematicCollidingCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options index b6f5cf10588..96880c05c03 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I${LIB_SRC}/sampling/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -30,8 +31,8 @@ EXE_LIBS = \ -lfvOptions \ -lsampling \ -lmeshTools \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lspecie \ -lfluidThermophysicalModels \ -lsolidProperties \ diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C index 27f272100af..08bc14d8551 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicReactingCloud.H" #include "surfaceFilmModel.H" #include "psiCombustionModel.H" diff --git a/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/LTSReactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/LTSReactingParcelFoam.C index 7481ae79cda..e81f37593b8 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/LTSReactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/LTSReactingParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicReactingMultiphaseCloud.H" #include "rhoCombustionModel.H" #include "radiationModel.H" diff --git a/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/Make/options index 1eb9a3dba56..f0d8062ecba 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFoam/LTSReactingParcelFoam/Make/options @@ -2,7 +2,8 @@ EXE_INC = \ -I.. \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ @@ -29,9 +30,8 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ diff --git a/applications/solvers/lagrangian/reactingParcelFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFoam/Make/options index 997aeae66b5..cc79d690f73 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ @@ -29,9 +30,8 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C index 1425a3e5f2b..30e44df94c4 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicReactingMultiphaseCloud.H" #include "rhoCombustionModel.H" #include "radiationModel.H" diff --git a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/Make/options b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/Make/options index 997aeae66b5..cc79d690f73 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/Make/options +++ b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/coalCombustion/lnInclude \ @@ -29,9 +30,8 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ diff --git a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C index 6620d2af52d..22667ba1874 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicReactingMultiphaseCloud.H" #include "rhoCombustionModel.H" #include "radiationModel.H" diff --git a/applications/solvers/lagrangian/sprayFoam/Make/options b/applications/solvers/lagrangian/sprayFoam/Make/options index 5c63b0d2f5a..404a0d37319 100644 --- a/applications/solvers/lagrangian/sprayFoam/Make/options +++ b/applications/solvers/lagrangian/sprayFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ -I${LIB_SRC}/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/spray/lnInclude \ @@ -30,9 +31,8 @@ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ diff --git a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/Make/options b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/Make/options index a8a0bfc56a0..487508d3071 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/Make/options +++ b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ -I${LIB_SRC}/sampling/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/intermediate/lnInclude \ -I$(LIB_SRC)/lagrangian/spray/lnInclude \ @@ -32,9 +33,8 @@ EXE_LIBS = \ -lfiniteVolume \ -lmeshTools \ -lsampling \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -llagrangian \ -llagrangianIntermediate \ -llagrangianTurbulence \ diff --git a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C index b91a3ad79de..11caf270ae7 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C +++ b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,7 +33,7 @@ Description #include "fvCFD.H" #include "engineTime.H" #include "engineMesh.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicSprayCloud.H" #include "psiCombustionModel.H" #include "radiationModel.H" diff --git a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C index 1c93d3ab13e..9da22ec75cb 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C +++ b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,7 +31,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicSprayCloud.H" #include "psiCombustionModel.H" #include "radiationModel.H" diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options index 3e975674d03..026161c0d5b 100644 --- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ @@ -19,9 +20,8 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -lradiationModels \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lregionModels \ diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C index 352678f8530..6545c4d72b4 100644 --- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description #include "fvCFD.H" #include "psiThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "basicKinematicCloud.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/multiphase/cavitatingFoam/Make/options b/applications/solvers/multiphase/cavitatingFoam/Make/options index 5efeeb355d6..1bcdc8e8383 100644 --- a/applications/solvers/multiphase/cavitatingFoam/Make/options +++ b/applications/solvers/multiphase/cavitatingFoam/Make/options @@ -4,13 +4,12 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/barotropicCompressibilityModel/lnInclude EXE_LIBS = \ - -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ - -lfiniteVolume \ - -lbarotropicCompressibilityModel + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lbarotropicCompressibilityModel \ + -lfiniteVolume diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/Make/options b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/Make/options index 34590e930b0..5ec5c9a72c2 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/Make/options +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/Make/options @@ -5,19 +5,18 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/barotropicCompressibilityModel/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude EXE_LIBS = \ - -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ - -lfiniteVolume \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lbarotropicCompressibilityModel \ + -lfiniteVolume \ -ldynamicMesh \ - -lmeshTools \ - -ldynamicFvMesh + -ldynamicFvMesh \ + -lmeshTools diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C index 284ca97bd4a..9910f1a4bd7 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description #include "dynamicFvMesh.H" #include "barotropicCompressibilityModel.H" #include "incompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C index 2b04d58fb59..78b92961531 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "barotropicCompressibilityModel.H" #include "incompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/multiphase/compressibleInterFoam/Make/options b/applications/solvers/multiphase/compressibleInterFoam/Make/options index 54e9f74e4af..a36fe054145 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/Make/options +++ b/applications/solvers/multiphase/compressibleInterFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/transportModels/twoPhaseMixture/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ @@ -14,7 +15,6 @@ EXE_LIBS = \ -ltwoPhaseMixture \ -ltwoPhaseProperties \ -linterfaceProperties \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options index 123645b4c36..91f2d03a29d 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/transportModels/twoPhaseMixture/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ @@ -18,9 +19,8 @@ EXE_LIBS = \ -ltwoPhaseMixture \ -ltwoPhaseProperties \ -linterfaceProperties \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -ldynamicMesh \ -lmeshTools \ -ldynamicFvMesh \ diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C index 06444163304..cf35e60beca 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,7 +44,7 @@ Description #include "interfaceProperties.H" #include "twoPhaseMixture.H" #include "twoPhaseMixtureThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "pimpleControl.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C index 030b997f486..0559985b546 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ Description #include "interfaceProperties.H" #include "twoPhaseMixture.H" #include "twoPhaseMixtureThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "pimpleControl.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Make/options b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Make/options index af7020f40f6..900ababa19f 100644 --- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Make/options +++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/transportModels/twoPhaseMixture/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ @@ -13,7 +14,6 @@ EXE_LIBS = \ -lfluidThermophysicalModels \ -lspecie \ -linterfaceProperties \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C index 5648f2d3bd2..24ba56e3e5e 100644 --- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C +++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ Description #include "fvCFD.H" #include "multiphaseMixtureThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "pimpleControl.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/interFoam/LTSInterFoam/LTSInterFoam.C b/applications/solvers/multiphase/interFoam/LTSInterFoam/LTSInterFoam.C index 1e870c42a93..575d8d79346 100644 --- a/applications/solvers/multiphase/interFoam/LTSInterFoam/LTSInterFoam.C +++ b/applications/solvers/multiphase/interFoam/LTSInterFoam/LTSInterFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "immiscibleIncompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "fvcSmooth.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options b/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options index 14861f2b880..f0762e15d2e 100644 --- a/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options +++ b/applications/solvers/multiphase/interFoam/LTSInterFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/immiscibleIncompressibleTwoPhaseMixture/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -13,9 +14,8 @@ EXE_INC = \ EXE_LIBS = \ -limmiscibleIncompressibleTwoPhaseMixture \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/multiphase/interFoam/Make/options b/applications/solvers/multiphase/interFoam/Make/options index 207a796b1da..df659a93d2a 100644 --- a/applications/solvers/multiphase/interFoam/Make/options +++ b/applications/solvers/multiphase/interFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/immiscibleIncompressibleTwoPhaseMixture/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ @@ -12,9 +13,8 @@ EXE_INC = \ EXE_LIBS = \ -limmiscibleIncompressibleTwoPhaseMixture \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lfvOptions \ -lmeshTools \ diff --git a/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options b/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options index b9638e612be..2e8c289ff7f 100644 --- a/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options +++ b/applications/solvers/multiphase/interFoam/interDyMFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/immiscibleIncompressibleTwoPhaseMixture/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ @@ -15,9 +16,8 @@ EXE_INC = \ EXE_LIBS = \ -limmiscibleIncompressibleTwoPhaseMixture \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -ldynamicMesh \ -ldynamicFvMesh \ diff --git a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C index 58d74a62550..ba40cc3e173 100644 --- a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C +++ b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "immiscibleIncompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/interFoam/interFoam.C b/applications/solvers/multiphase/interFoam/interFoam.C index 6b6168bf0e7..deb001c4fb9 100644 --- a/applications/solvers/multiphase/interFoam/interFoam.C +++ b/applications/solvers/multiphase/interFoam/interFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,7 +41,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "immiscibleIncompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/interFoam/interMixingFoam/Make/options b/applications/solvers/multiphase/interFoam/interMixingFoam/Make/options index 43456c90472..7198616b30f 100644 --- a/applications/solvers/multiphase/interFoam/interMixingFoam/Make/options +++ b/applications/solvers/multiphase/interFoam/interMixingFoam/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -IthreePhaseInterfaceProperties \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ -I$(LIB_SRC)/transportModels/twoPhaseProperties/alphaContactAngle/alphaContactAngle \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -17,9 +18,8 @@ EXE_LIBS = \ -ltwoPhaseMixture \ -ltwoPhaseProperties \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C index 09cb7f1c7eb..a39adb3c177 100644 --- a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C +++ b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "immiscibleIncompressibleThreePhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options b/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options index fffa41da94c..7a3dd1e71f0 100644 --- a/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options +++ b/applications/solvers/multiphase/interFoam/porousInterFoam/Make/options @@ -5,7 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ -I$(LIB_SRC)/transportModels/immiscibleIncompressibleTwoPhaseMixture/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ @@ -14,9 +15,8 @@ EXE_INC = \ EXE_LIBS = \ -limmiscibleIncompressibleTwoPhaseMixture \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/multiphase/interFoam/porousInterFoam/porousInterFoam.C b/applications/solvers/multiphase/interFoam/porousInterFoam/porousInterFoam.C index c17847bd3da..ee2b6e4d53d 100644 --- a/applications/solvers/multiphase/interFoam/porousInterFoam/porousInterFoam.C +++ b/applications/solvers/multiphase/interFoam/porousInterFoam/porousInterFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ Description #include "CMULES.H" #include "subCycle.H" #include "immiscibleIncompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "IOporosityModelList.H" #include "pimpleControl.H" #include "fvIOoptionList.H" diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/Make/options b/applications/solvers/multiphase/interPhaseChangeFoam/Make/options index 4721c889611..254f3ad8be1 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/Make/options +++ b/applications/solvers/multiphase/interPhaseChangeFoam/Make/options @@ -3,7 +3,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -IphaseChangeTwoPhaseMixtures/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -16,9 +17,8 @@ EXE_LIBS = \ -linterfaceProperties \ -ltwoPhaseProperties \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/Make/options b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/Make/options index 3bf8a5dfb69..0512ee1946f 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/Make/options +++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I../phaseChangeTwoPhaseMixtures/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ @@ -19,9 +20,8 @@ EXE_LIBS = \ -linterfaceProperties \ -ltwoPhaseProperties \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -ldynamicMesh \ -ldynamicFvMesh \ diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C index e336e4a0c3d..4afaca6ca93 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C +++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -47,7 +47,7 @@ Description #include "subCycle.H" #include "interfaceProperties.H" #include "phaseChangeTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C index 32f94bf303b..7cd7ad43b26 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C +++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,7 +45,7 @@ Description #include "subCycle.H" #include "interfaceProperties.H" #include "phaseChangeTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options index ab8d970994e..86b52d3385a 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/Make/options +++ b/applications/solvers/multiphase/multiphaseEulerFoam/Make/options @@ -7,8 +7,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/LES/LESModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude @@ -17,6 +17,6 @@ EXE_LIBS = \ -linterfaceProperties \ -lincompressibleTransportModels \ -lcompressibleMultiphaseEulerianInterfacialModels \ - -lincompressibleLESModels \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H b/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H index 7584d84f27e..1dd551f8f25 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H +++ b/applications/solvers/multiphase/multiphaseEulerFoam/UEqns.H @@ -10,7 +10,7 @@ forAllIter(PtrDictionary<phaseModel>, fluid.phases(), iter) const volScalarField& alpha = phase; volVectorField& U = phase.U(); - volScalarField nuEff(sgsModel->nut() + iter().nu()); + volScalarField nuEff(turbulence->nut() + iter().nu()); UEqns.set ( diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/createFields.H b/applications/solvers/multiphase/multiphaseEulerFoam/createFields.H index 79fa72d7587..8de6d490215 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/createFields.H +++ b/applications/solvers/multiphase/multiphaseEulerFoam/createFields.H @@ -89,8 +89,8 @@ scalar pRefValue = 0.0; setRefCell(p, mesh.solutionDict().subDict("PIMPLE"), pRefCell, pRefValue); - - autoPtr<incompressible::LESModel> sgsModel + // Construct incompressible turbulence model + autoPtr<incompressible::turbulenceModel> turbulence ( - incompressible::LESModel::New(U, phi, fluid) + incompressible::turbulenceModel::New(U, phi, fluid) ); diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C index d0285dc3577..237a62a7cd4 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C +++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description #include "dragModel.H" #include "heatTransferModel.H" #include "singlePhaseTransportModel.H" -#include "LESModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "IOMRFZoneList.H" #include "fixedFluxPressureFvPatchScalarField.H" @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) // --- Pressure-velocity PIMPLE corrector loop while (pimple.loop()) { - sgsModel->correct(); + turbulence->correct(); fluid.solve(); rho = fluid.rho(); #include "zonePhaseVolumes.H" diff --git a/applications/solvers/multiphase/multiphaseInterFoam/Make/options b/applications/solvers/multiphase/multiphaseInterFoam/Make/options index 27f633d621e..2eb366fd985 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/Make/options +++ b/applications/solvers/multiphase/multiphaseInterFoam/Make/options @@ -4,7 +4,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ @@ -14,9 +15,8 @@ EXE_LIBS = \ -lmultiphaseInterFoam \ -linterfaceProperties \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lfvOptions \ -lmeshTools \ diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/Make/options b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/Make/options index 83653482210..e05b53a9625 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/Make/options +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/Make/options @@ -6,7 +6,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ @@ -18,9 +19,8 @@ EXE_LIBS = \ -lmultiphaseInterFoam \ -linterfaceProperties \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -ldynamicMesh \ -ldynamicFvMesh \ diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C index acfa7eb3eea..7e31d9e4205 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "multiphaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C index fdd93eae5da..78bed884e97 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,7 +34,7 @@ Description #include "fvCFD.H" #include "multiphaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/Make/options b/applications/solvers/multiphase/potentialFreeSurfaceFoam/Make/options index a597aafbc7f..72a106ba1e3 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/Make/options +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/Make/options @@ -1,5 +1,6 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -10,9 +11,8 @@ EXE_INC = \ EXE_LIBS = \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ -lfvOptions \ diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/Make/options b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/Make/options index 6772c7f35a6..df44bd78a00 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/Make/options +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I.. \ -I../../interFoam/interDyMFoam \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -14,9 +15,8 @@ EXE_INC = \ EXE_LIBS = \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume \ -ldynamicMesh \ -ldynamicFvMesh \ diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C index d44f3d2f015..cf0c1af3e30 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C @@ -40,7 +40,7 @@ Description #include "fvCFD.H" #include "dynamicFvMesh.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C index 9cfe6f99e0f..4f4239890e6 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C @@ -36,7 +36,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fvIOoptionList.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/Make/options b/applications/solvers/multiphase/twoLiquidMixingFoam/Make/options index 53ea250a164..32f8d8e6230 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/Make/options +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/Make/options @@ -4,13 +4,12 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels/interfaceProperties/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ -ltwoPhaseMixture \ - -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lfiniteVolume diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C index 7593aeab113..4d1cdd3d936 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ Description #include "MULES.H" #include "subCycle.H" #include "incompressibleTwoPhaseMixture.H" -#include "turbulenceModel.H" +#include "turbulentTransportModel.H" #include "pimpleControl.H" #include "fixedFluxPressureFvPatchScalarField.H" diff --git a/applications/test/PisoFoam/Make/files b/applications/test/PisoFoam/Make/files deleted file mode 100644 index 340f8016c26..00000000000 --- a/applications/test/PisoFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -PisoFoam.C - -EXE = $(FOAM_USER_APPBIN)/PisoFoam diff --git a/applications/test/PisoFoam/Make/options b/applications/test/PisoFoam/Make/options deleted file mode 100644 index d14a833f121..00000000000 --- a/applications/test/PisoFoam/Make/options +++ /dev/null @@ -1,14 +0,0 @@ -EXE_INC = \ - -I$(FOAM_SOLVERS)/incompressible/pisoFoam \ - -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ - -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ - -I$(LIB_SRC)/finiteVolume/lnInclude - -EXE_LIBS = \ - -lturbulenceModels \ - -lincompressibleTurbulenceModels \ - -lincompressibleTransportModels \ - -lfiniteVolume \ - -lmeshTools diff --git a/applications/test/PisoFoam/PisoFoam.C b/applications/test/PisoFoam/PisoFoam.C deleted file mode 100644 index e6fa770876a..00000000000 --- a/applications/test/PisoFoam/PisoFoam.C +++ /dev/null @@ -1,149 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 - pisoFoam - -Description - Transient solver for incompressible flow. - - Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected. - -\*---------------------------------------------------------------------------*/ - -#include "fvCFD.H" -#include "singlePhaseTransportModel.H" -#include "turbulenceModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -int main(int argc, char *argv[]) -{ - #include "setRootCase.H" - - #include "createTime.H" - #include "createMesh.H" - #include "createFields.H" - #include "initContinuityErrs.H" - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - Info<< "\nStarting time loop\n" << endl; - - while (runTime.loop()) - { - Info<< "Time = " << runTime.timeName() << nl << endl; - - #include "readPISOControls.H" - #include "CourantNo.H" - - // Pressure-velocity PISO corrector - { - // Momentum predictor - - fvVectorMatrix UEqn - ( - fvm::ddt(U) - + fvm::div(phi, U) - + turbulence->divDevReff(U) - ); - - UEqn.relax(); - - if (momentumPredictor) - { - solve(UEqn == -fvc::grad(p)); - } - - // --- PISO loop - - for (int corr=0; corr<nCorr; corr++) - { - volScalarField rAU(1.0/UEqn.A()); - - volVectorField HbyA("HbyA", U); - HbyA = rAU*UEqn.H(); - surfaceScalarField phiHbyA - ( - "phiHbyA", - (fvc::interpolate(HbyA) & mesh.Sf()) - + fvc::ddtCorr(rAU, U, phi) - ); - - adjustPhi(phiHbyA, U, p); - - // Non-orthogonal pressure corrector loop - for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) - { - // Pressure corrector - - fvScalarMatrix pEqn - ( - fvm::laplacian(rAU, p) == fvc::div(phiHbyA) - ); - - pEqn.setReference(pRefCell, pRefValue); - - if - ( - corr == nCorr-1 - && nonOrth == nNonOrthCorr - ) - { - pEqn.solve(mesh.solver("pFinal")); - } - else - { - pEqn.solve(); - } - - if (nonOrth == nNonOrthCorr) - { - phi = phiHbyA - pEqn.flux(); - } - } - - #include "continuityErrs.H" - - U = HbyA - rAU*fvc::grad(p); - U.correctBoundaryConditions(); - } - } - - laminarTransport.correct(); - turbulence->correct(); - - runTime.write(); - - Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" - << " ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - } - - Info<< "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/test/PisoFoam/turbulenceModel.H b/applications/test/PisoFoam/turbulenceModel.H deleted file mode 100644 index 77a4ab413d6..00000000000 --- a/applications/test/PisoFoam/turbulenceModel.H +++ /dev/null @@ -1,9 +0,0 @@ -#include "IncompressibleTurbulenceModel.H" - -namespace Foam -{ - namespace incompressible - { - typedef IncompressibleTurbulenceModel<transportModel> turbulenceModel; - } -} diff --git a/applications/test/RhoPimpleFoam/EEqn.H b/applications/test/RhoPimpleFoam/EEqn.H deleted file mode 100644 index 9972bdfff7b..00000000000 --- a/applications/test/RhoPimpleFoam/EEqn.H +++ /dev/null @@ -1,33 +0,0 @@ -{ - volScalarField& he = thermo.he(); - - fvScalarMatrix EEqn - ( - fvm::ddt(rho, he) + fvm::div(phi, he) - + fvc::ddt(rho, K) + fvc::div(phi, K) - + ( - he.name() == "e" - ? fvc::div - ( - fvc::absolute(phi/fvc::interpolate(rho), U), - p, - "div(phiv,p)" - ) - : -dpdt - ) - //- fvm::laplacian(turbulence->alphaEff(), he) - - fvm::laplacian(turbulence->muEff(), he) - == - fvOptions(rho, he) - ); - - EEqn.relax(); - - fvOptions.constrain(EEqn); - - EEqn.solve(); - - fvOptions.correct(he); - - thermo.correct(); -} diff --git a/applications/test/RhoPimpleFoam/Make/files b/applications/test/RhoPimpleFoam/Make/files deleted file mode 100644 index 087a67d2136..00000000000 --- a/applications/test/RhoPimpleFoam/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -rhoPimpleFoam.C - -EXE = $(FOAM_USER_APPBIN)/RhoPimpleFoam diff --git a/applications/test/RhoPimpleFoam/Make/options b/applications/test/RhoPimpleFoam/Make/options deleted file mode 100644 index f8879e9ab5a..00000000000 --- a/applications/test/RhoPimpleFoam/Make/options +++ /dev/null @@ -1,21 +0,0 @@ -EXE_INC = \ - -I$(FOAM_SOLVERS)/compressible/rhoPimpleFoam \ - -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ - -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/finiteVolume/cfdTools \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/fvOptions/lnInclude - -EXE_LIBS = \ - -lfluidThermophysicalModels \ - -lspecie \ - -lturbulenceModels \ - -lcompressibleTurbulenceModels \ - -lincompressibleTransportModels \ - -lfiniteVolume \ - -lmeshTools \ - -lsampling \ - -lfvOptions diff --git a/applications/test/RhoPimpleFoam/rhoPimpleFoam.C b/applications/test/RhoPimpleFoam/rhoPimpleFoam.C deleted file mode 100644 index a73e90e27d2..00000000000 --- a/applications/test/RhoPimpleFoam/rhoPimpleFoam.C +++ /dev/null @@ -1,107 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 - rhoPimpleFoam - -Description - Transient solver for laminar or turbulent flow of compressible fluids - for HVAC and similar applications. - - Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and - pseudo-transient simulations. - -\*---------------------------------------------------------------------------*/ - -#include "fvCFD.H" -#include "psiThermo.H" -#include "turbulenceModel.H" -#include "bound.H" -#include "pimpleControl.H" -#include "fvIOoptionList.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -int main(int argc, char *argv[]) -{ - #include "setRootCase.H" - #include "createTime.H" - #include "createMesh.H" - - pimpleControl pimple(mesh); - - #include "createFields.H" - #include "createFvOptions.H" - #include "initContinuityErrs.H" - - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - Info<< "\nStarting time loop\n" << endl; - - while (runTime.run()) - { - #include "readTimeControls.H" - #include "compressibleCourantNo.H" - #include "setDeltaT.H" - - runTime++; - - Info<< "Time = " << runTime.timeName() << nl << endl; - - if (pimple.nCorrPIMPLE() <= 1) - { - #include "rhoEqn.H" - } - - // --- Pressure-velocity PIMPLE corrector loop - while (pimple.loop()) - { - #include "UEqn.H" - #include "EEqn.H" - - // --- Pressure corrector loop - while (pimple.correct()) - { - #include "pEqn.H" - } - - if (pimple.turbCorr()) - { - turbulence->correct(); - } - } - - runTime.write(); - - Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" - << " ClockTime = " << runTime.elapsedClockTime() << " s" - << nl << endl; - } - - Info<< "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/test/RhoPimpleFoam/turbulenceModel.H b/applications/test/RhoPimpleFoam/turbulenceModel.H deleted file mode 100644 index 23547aa0c52..00000000000 --- a/applications/test/RhoPimpleFoam/turbulenceModel.H +++ /dev/null @@ -1,9 +0,0 @@ -#include "CompressibleTurbulenceModel.H" - -namespace Foam -{ - namespace compressible - { - typedef CompressibleTurbulenceModel<fluidThermo> turbulenceModel; - } -} diff --git a/applications/utilities/mesh/advanced/PDRMesh/Make/options b/applications/utilities/mesh/advanced/PDRMesh/Make/options index 4ce2e001eaa..9544389ab3c 100644 --- a/applications/utilities/mesh/advanced/PDRMesh/Make/options +++ b/applications/utilities/mesh/advanced/PDRMesh/Make/options @@ -4,7 +4,9 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ + -lfluidThermophysicalModels \ -lmeshTools \ -ldynamicMesh \ - -lfiniteVolume \ - -lcompressibleRASModels + -lfiniteVolume diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options index 43f0c24cb53..23e78b6bf53 100644 --- a/applications/utilities/miscellaneous/foamDebugSwitches/Make/options +++ b/applications/utilities/miscellaneous/foamDebugSwitches/Make/options @@ -6,9 +6,7 @@ EXE_LIBS = \ -lblockMesh \ -lchemistryModel \ -lcoalCombustion \ - -lcompressibleLESModels \ - -lcompressibleRASModels \ - -lcompressibleTurbulenceModel \ + -lcompressibleTurbulenceModels \ -lconversion \ -ldecompositionMethods \ -ldistributed \ @@ -25,27 +23,21 @@ EXE_LIBS = \ -lforces \ -lfvMotionSolvers \ -lgenericPatchFields \ - -lincompressibleLESModels \ - -lincompressibleRASModels \ -lincompressibleTransportModels \ - -lincompressibleTurbulenceModel \ + -lincompressibleTurbulenceModels \ -linterfaceProperties \ -lIOFunctionObjects \ -ljobControl \ -llagrangian \ -llagrangianIntermediate \ -llaminarFlameSpeedModels \ - -lLESdeltas \ - -lLESfilters \ -lliquidMixtureProperties \ -lliquidProperties \ -lmeshTools \ -lmolecularMeasurements \ -lmolecule \ -/* -lmultiphaseInterFoam */ \ -lODE \ -lOpenFOAM \ -/* -lphaseModel */ \ -lpotential \ -lradiationModels \ -lrandomProcesses \ @@ -63,5 +55,6 @@ EXE_LIBS = \ -lthermophysicalFunctions \ -ltopoChangerFvMesh \ -ltriSurface \ + -lturbulenceModels \ -ltwoPhaseProperties \ -lutilityFunctionObjects diff --git a/applications/utilities/miscellaneous/foamHelp/Make/options b/applications/utilities/miscellaneous/foamHelp/Make/options index 41ca9e9b573..8191b8b00dd 100644 --- a/applications/utilities/miscellaneous/foamHelp/Make/options +++ b/applications/utilities/miscellaneous/foamHelp/Make/options @@ -5,11 +5,8 @@ EXE_INC = \ EXE_LIBS = \ -lhelpTypes \ -lfiniteVolume \ - -lincompressibleTurbulenceModel \ - -lcompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lcompressibleRASModels \ - -lincompressibleLESModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lradiationModels \ -lfluidThermophysicalModels diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/Make/options b/applications/utilities/miscellaneous/foamHelp/helpTypes/Make/options index 01b25c79aaa..b3d092f1026 100644 --- a/applications/utilities/miscellaneous/foamHelp/helpTypes/Make/options +++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/Make/options @@ -3,11 +3,8 @@ EXE_INC = \ LIB_LIBS = \ -lfiniteVolume \ - -lincompressibleTurbulenceModel \ - -lcompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lcompressibleRASModels \ - -lincompressibleLESModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lradiationModels \ -lfluidThermophysicalModels diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options index 012600720f3..220589ea78c 100644 --- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options +++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options @@ -1,7 +1,8 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/fvOptions/lnInclude \ @@ -9,13 +10,12 @@ EXE_INC = \ -I$(LIB_SRC)/sampling/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ -lfiniteVolume \ -lfvOptions \ -lmeshTools \ diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C index 246a36fcc60..99d7de9b956 100644 --- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C +++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -46,13 +46,8 @@ Description #include "fvIOoptionList.H" #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" - -#include "incompressible/RAS/RASModel/RASModel.H" -#include "incompressible/LES/LESModel/LESModel.H" - -#include "fluidThermo.H" -#include "compressible/RAS/RASModel/RASModel.H" -#include "compressible/LES/LESModel/LESModel.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" using namespace Foam; diff --git a/applications/utilities/postProcessing/stressField/stressComponents/Make/options b/applications/utilities/postProcessing/stressField/stressComponents/Make/options index d1016e9d4d6..c5c3ac8e97b 100644 --- a/applications/utilities/postProcessing/stressField/stressComponents/Make/options +++ b/applications/utilities/postProcessing/stressField/stressComponents/Make/options @@ -1,10 +1,8 @@ EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/RAS \ - -I$(LIB_SRC)/transportModels + -I$(LIB_SRC)/transportModels \ + -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lincompressibleTransportModels \ -lfiniteVolume \ - -lgenericPatchFields \ - -lincompressibleRASModels \ - -lincompressibleTransportModels + -lgenericPatchFields diff --git a/applications/utilities/postProcessing/turbulence/R/Make/options b/applications/utilities/postProcessing/turbulence/R/Make/options index 27b70cae0a7..fefdc6b7800 100644 --- a/applications/utilities/postProcessing/turbulence/R/Make/options +++ b/applications/utilities/postProcessing/turbulence/R/Make/options @@ -1,18 +1,19 @@ EXE_INC = \ - -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ -lfiniteVolume \ -lgenericPatchFields \ -lmeshTools \ diff --git a/applications/utilities/postProcessing/turbulence/R/R.C b/applications/utilities/postProcessing/turbulence/R/R.C index 708cda72141..f487a13e548 100644 --- a/applications/utilities/postProcessing/turbulence/R/R.C +++ b/applications/utilities/postProcessing/turbulence/R/R.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,11 +30,9 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" - -#include "fluidThermo.H" -#include "compressible/turbulenceModel/turbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options index 88625658635..980dabb8d25 100644 --- a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options +++ b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/Make/options @@ -1,11 +1,13 @@ EXE_INC = \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ - -lincompressibleRASModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lfiniteVolume \ - -lgenericPatchFields + -lgenericPatchFields \ + -lfiniteVolume diff --git a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C index 1982b4f2428..ce074ccc547 100644 --- a/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C +++ b/applications/utilities/postProcessing/turbulence/createTurbulenceFields/createTurbulenceFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,8 +35,8 @@ Source files: \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "RASModel.H" +#include "singlePhaseTransportModel.H" +#include "turbulentTransportModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -133,4 +133,3 @@ int main(int argc, char *argv[]) // ************************************************************************* // - diff --git a/applications/utilities/postProcessing/velocityField/Pe/Make/options b/applications/utilities/postProcessing/velocityField/Pe/Make/options index 1d984aa9b55..09f921715f8 100644 --- a/applications/utilities/postProcessing/velocityField/Pe/Make/options +++ b/applications/utilities/postProcessing/velocityField/Pe/Make/options @@ -1,21 +1,21 @@ EXE_INC = \ -I$(LIB_SRC)/postProcessing/postCalc \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ $(FOAM_LIBBIN)/postCalc.o \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ -lfiniteVolume \ -lgenericPatchFields \ -lmeshTools diff --git a/applications/utilities/postProcessing/velocityField/Pe/Pe.C b/applications/utilities/postProcessing/velocityField/Pe/Pe.C index 544a1169210..e4d0833ba0a 100644 --- a/applications/utilities/postProcessing/velocityField/Pe/Pe.C +++ b/applications/utilities/postProcessing/velocityField/Pe/Pe.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,12 +36,9 @@ Description #include "calc.H" #include "fvc.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "incompressible/RAS/RASModel/RASModel.H" -#include "incompressible/LES/LESModel/LESModel.H" -#include "fluidThermo.H" -#include "compressible/RAS/RASModel/RASModel.H" -#include "compressible/LES/LESModel/LESModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options b/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options index cd09f8d5b76..c1b5ad47e8d 100644 --- a/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options +++ b/applications/utilities/postProcessing/wall/wallHeatFlux/Make/options @@ -1,6 +1,6 @@ EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ @@ -8,10 +8,8 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lLESdeltas \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lreactionThermophysicalModels \ -lfiniteVolume \ -lgenericPatchFields \ diff --git a/applications/utilities/postProcessing/wall/wallHeatFlux/wallHeatFlux.C b/applications/utilities/postProcessing/wall/wallHeatFlux/wallHeatFlux.C index c45c48b35e6..8c80f0cf217 100644 --- a/applications/utilities/postProcessing/wall/wallHeatFlux/wallHeatFlux.C +++ b/applications/utilities/postProcessing/wall/wallHeatFlux/wallHeatFlux.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "solidThermo.H" #include "wallFvPatch.H" diff --git a/applications/utilities/postProcessing/wall/wallShearStress/Make/options b/applications/utilities/postProcessing/wall/wallShearStress/Make/options index 240bf953ba5..3235acdec90 100644 --- a/applications/utilities/postProcessing/wall/wallShearStress/Make/options +++ b/applications/utilities/postProcessing/wall/wallShearStress/Make/options @@ -1,14 +1,18 @@ EXE_INC = \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/postProcessing/wall/wallShearStress/wallShearStress.C b/applications/utilities/postProcessing/wall/wallShearStress/wallShearStress.C index 360f03b39c5..3cf944ea4ca 100644 --- a/applications/utilities/postProcessing/wall/wallShearStress/wallShearStress.C +++ b/applications/utilities/postProcessing/wall/wallShearStress/wallShearStress.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,12 +34,9 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" - +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" #include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "incompressible/RAS/RASModel/RASModel.H" - -#include "fluidThermo.H" -#include "compressible/RAS/RASModel/RASModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/postProcessing/wall/yPlusLES/Make/options b/applications/utilities/postProcessing/wall/yPlusLES/Make/options index d7446846b06..a3e31c2203c 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusLES/Make/options @@ -1,13 +1,14 @@ EXE_INC = \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/LES/LESModel \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/finiteVolume/lnInclude + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lfiniteVolume \ -lgenericPatchFields diff --git a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C index e8d5f431a03..731c6ea6b51 100644 --- a/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C +++ b/applications/utilities/postProcessing/wall/yPlusLES/yPlusLES.C @@ -31,8 +31,10 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "LESModel.H" +#include "singlePhaseTransportModel.H" +#include "turbulentTransportModel.H" +#include "nutWallFunctionFvPatchScalarField.H" + #include "nearWallDist.H" #include "wallFvPatch.H" @@ -50,7 +52,7 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - fvMesh::readUpdateState state = mesh.readUpdate(); + mesh.readUpdate(); volScalarField yPlus ( diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options index 27b70cae0a7..cacf4eb319a 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/Make/options +++ b/applications/utilities/postProcessing/wall/yPlusRAS/Make/options @@ -1,18 +1,20 @@ EXE_INC = \ - -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions \ + -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ -lfiniteVolume \ -lgenericPatchFields \ -lmeshTools \ diff --git a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C index c66f8837391..dde81571e73 100644 --- a/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C +++ b/applications/utilities/postProcessing/wall/yPlusRAS/yPlusRAS.C @@ -34,14 +34,10 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" - -#include "incompressible/singlePhaseTransportModel/singlePhaseTransportModel.H" -#include "incompressible/RAS/RASModel/RASModel.H" -#include "nutWallFunction/nutWallFunctionFvPatchScalarField.H" - -#include "fluidThermo.H" -#include "compressible/RAS/RASModel/RASModel.H" -#include "mutWallFunction/mutWallFunctionFvPatchScalarField.H" +#include "singlePhaseTransportModel.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" +#include "nutWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -53,8 +49,7 @@ void calcIncompressibleYPlus volScalarField& yPlus ) { - typedef incompressible::nutWallFunctionFvPatchScalarField - wallFunctionPatchField; + typedef nutWallFunctionFvPatchScalarField wallFunctionPatchField; #include "createPhi.H" @@ -105,8 +100,7 @@ void calcCompressibleYPlus volScalarField& yPlus ) { - typedef compressible::mutWallFunctionFvPatchScalarField - wallFunctionPatchField; + typedef nutWallFunctionFvPatchScalarField wallFunctionPatchField; IOobject rhoHeader ( @@ -145,31 +139,31 @@ void calcCompressibleYPlus ) ); - const volScalarField::GeometricBoundaryField mutPatches = - RASModel->mut()().boundaryField(); + const volScalarField::GeometricBoundaryField nutPatches = + RASModel->nut()().boundaryField(); - bool foundMutPatch = false; - forAll(mutPatches, patchi) + bool foundNutPatch = false; + forAll(nutPatches, patchi) { - if (isA<wallFunctionPatchField>(mutPatches[patchi])) + if (isA<wallFunctionPatchField>(nutPatches[patchi])) { - foundMutPatch = true; + foundNutPatch = true; - const wallFunctionPatchField& mutPw = + const wallFunctionPatchField& nutPw = dynamic_cast<const wallFunctionPatchField&> - (mutPatches[patchi]); + (nutPatches[patchi]); - yPlus.boundaryField()[patchi] = mutPw.yPlus(); + yPlus.boundaryField()[patchi] = nutPw.yPlus(); const scalarField& Yp = yPlus.boundaryField()[patchi]; Info<< "Patch " << patchi - << " named " << mutPw.patch().name() + << " named " << nutPw.patch().name() << " y+ : min: " << gMin(Yp) << " max: " << gMax(Yp) << " average: " << gAverage(Yp) << nl << endl; } } - if (!foundMutPatch) + if (!foundNutPatch) { Info<< " no " << wallFunctionPatchField::typeName << " patches" << endl; @@ -200,7 +194,7 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); Info<< "Time = " << runTime.timeName() << endl; - fvMesh::readUpdateState state = mesh.readUpdate(); + mesh.readUpdate(); volScalarField yPlus ( diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options index e4ea36c3cf0..9778b15c09d 100644 --- a/applications/utilities/preProcessing/applyBoundaryLayer/Make/options +++ b/applications/utilities/preProcessing/applyBoundaryLayer/Make/options @@ -1,15 +1,15 @@ EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/RASModel \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ - -lfiniteVolume \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lgenericPatchFields \ + -lfiniteVolume \ -lmeshTools diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C index 18fa6a61ef6..4f2a30fb5f4 100644 --- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C +++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,7 +37,7 @@ Description #include "fvCFD.H" #include "singlePhaseTransportModel.H" -#include "RASModel.H" +#include "turbulentTransportModel.H" #include "wallDist.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/files b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/files deleted file mode 100644 index 41d3c8b6a54..00000000000 --- a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/files +++ /dev/null @@ -1,3 +0,0 @@ -applyWallFunctionBoundaryConditions.C - -EXE = $(FOAM_APPBIN)/applyWallFunctionBoundaryConditions diff --git a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/options b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/options deleted file mode 100644 index 60692ce6739..00000000000 --- a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/Make/options +++ /dev/null @@ -1,13 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude - -EXE_LIBS = \ - -lincompressibleRASModels \ - -lfluidThermophysicalModels \ - -lspecie \ - -lcompressibleRASModels \ - -lfiniteVolume \ - -lgenericPatchFields diff --git a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C b/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C deleted file mode 100644 index 95222a4a7ab..00000000000 --- a/applications/utilities/preProcessing/applyWallFunctionBoundaryConditions/applyWallFunctionBoundaryConditions.C +++ /dev/null @@ -1,363 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Application - applyWallFunctionBounaryConditions - -Description - Updates OpenFOAM RAS cases to use the new (v1.6) wall function framework. - - Attempts to determine whether case is compressible or incompressible, or - can be supplied with -compressible command line argument. - -\*---------------------------------------------------------------------------*/ - -#include "argList.H" -#include "fvMesh.H" -#include "Time.H" -#include "volFields.H" -#include "surfaceFields.H" - -#include "wallPolyPatch.H" - -#include "incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H" -#include "incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H" -#include "incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H" -#include "incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H" - -#include "compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H" -#include "compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H" -#include "compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.H" -#include "compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H" - -using namespace Foam; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -bool caseIsCompressible(const fvMesh& mesh) -{ - // Attempt flux field - IOobject phiHeader - ( - "phi", - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (phiHeader.headerOk()) - { - surfaceScalarField phi(phiHeader, mesh); - if (phi.dimensions() == dimDensity*dimVelocity*dimArea) - { - return true; - } - } - - // Attempt density field - IOobject rhoHeader - ( - "rho", - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (rhoHeader.headerOk()) - { - volScalarField rho(rhoHeader, mesh); - if (rho.dimensions() == dimDensity) - { - return true; - } - } - - // Attempt pressure field - IOobject pHeader - ( - "p", - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (pHeader.headerOk()) - { - volScalarField p(pHeader, mesh); - if (p.dimensions() == dimMass/sqr(dimTime)/dimLength) - { - return true; - } - } - - // If none of the above are true, assume that the case is incompressible - return false; -} - - -void createVolScalarField -( - const fvMesh& mesh, - const word& fieldName, - const dimensionSet& dims -) -{ - IOobject fieldHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (!fieldHeader.headerOk()) - { - Info<< "Creating field " << fieldName << nl << endl; - - volScalarField field - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionedScalar("zero", dims, 0.0) - ); - - field.write(); - } -} - - -void replaceBoundaryType -( - const fvMesh& mesh, - const word& fieldName, - const word& boundaryType, - const string& boundaryValue -) -{ - IOobject header - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ); - - if (!header.headerOk()) - { - return; - } - - Info<< "Updating boundary types for field " << header.name() << endl; - - const word oldTypeName = IOdictionary::typeName; - const_cast<word&>(IOdictionary::typeName) = word::null; - - IOdictionary dict(header); - - const_cast<word&>(IOdictionary::typeName) = oldTypeName; - const_cast<word&>(dict.type()) = dict.headerClassName(); - - // Make a backup of the old file - if (mvBak(dict.objectPath(), "old")) - { - Info<< " Backup original file to " - << (dict.objectPath() + ".old") << endl; - } - - // Loop through boundary patches and update - const polyBoundaryMesh& bMesh = mesh.boundaryMesh(); - dictionary& boundaryDict = dict.subDict("boundaryField"); - forAll(bMesh, patchI) - { - if (isA<wallPolyPatch>(bMesh[patchI])) - { - word patchName = bMesh[patchI].name(); - dictionary& oldPatch = boundaryDict.subDict(patchName); - - dictionary newPatch(dictionary::null); - newPatch.add("type", boundaryType); - newPatch.add("value", ("uniform " + boundaryValue).c_str()); - - oldPatch = newPatch; - } - } - - Info<< " writing updated " << dict.name() << nl << endl; - dict.regIOobject::write(); -} - - -void updateCompressibleCase(const fvMesh& mesh) -{ - Info<< "Case treated as compressible" << nl << endl; - createVolScalarField - ( - mesh, - "mut", - dimArea/dimTime*dimDensity - ); - replaceBoundaryType - ( - mesh, - "mut", - compressible::mutkWallFunctionFvPatchScalarField::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "epsilon", - compressible::epsilonWallFunctionFvPatchScalarField::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "omega", - compressible::omegaWallFunctionFvPatchScalarField::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "k", - compressible::kqRWallFunctionFvPatchField<scalar>::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "q", - compressible::kqRWallFunctionFvPatchField<scalar>::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "R", - compressible::kqRWallFunctionFvPatchField<symmTensor>:: - typeName, - "(0 0 0 0 0 0)" - ); -} - - -void updateIncompressibleCase(const fvMesh& mesh) -{ - Info<< "Case treated as incompressible" << nl << endl; - createVolScalarField(mesh, "nut", dimArea/dimTime); - - replaceBoundaryType - ( - mesh, - "nut", - incompressible::nutkWallFunctionFvPatchScalarField::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "epsilon", - incompressible::epsilonWallFunctionFvPatchScalarField:: - typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "omega", - incompressible::omegaWallFunctionFvPatchScalarField:: - typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "k", - incompressible::kqRWallFunctionFvPatchField<scalar>::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "q", - incompressible::kqRWallFunctionFvPatchField<scalar>::typeName, - "0" - ); - replaceBoundaryType - ( - mesh, - "R", - incompressible::kqRWallFunctionFvPatchField<symmTensor>::typeName, - "(0 0 0 0 0 0)" - ); -} - - -int main(int argc, char *argv[]) -{ - #include "addTimeOptions.H" - argList::addBoolOption - ( - "compressible", - "force use of compressible wall functions. Default is auto-detect." - ); - - #include "setRootCase.H" - #include "createTime.H" - #include "createMesh.H" - - const bool compressible = args.optionFound("compressible"); - - Info<< "Updating turbulence fields to operate using new run time " - << "selectable" << nl << "wall functions" - << nl << endl; - - if (compressible || caseIsCompressible(mesh)) - { - updateCompressibleCase(mesh); - } - else - { - updateIncompressibleCase(mesh); - } - - Info<< "End\n" << endl; - - return 0; -} - - -// ************************************************************************* // diff --git a/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/Make/options b/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/Make/options index a5b0bb57772..c719bbebe0a 100644 --- a/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/Make/options +++ b/applications/utilities/preProcessing/createExternalCoupledPatchGeometry/Make/options @@ -3,4 +3,5 @@ EXE_INC = \ EXE_LIBS = \ -lfiniteVolume \ - -lcompressibleTurbulenceModel + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/applications/utilities/preProcessing/faceAgglomerate/Make/options b/applications/utilities/preProcessing/faceAgglomerate/Make/options index c2b07c70247..3facebbe198 100644 --- a/applications/utilities/preProcessing/faceAgglomerate/Make/options +++ b/applications/utilities/preProcessing/faceAgglomerate/Make/options @@ -4,7 +4,6 @@ EXE_INC = \ -I$(LIB_SRC)/fvAgglomerationMethods/pairPatchAgglomeration/lnInclude EXE_LIBS = \ - -lOpenFOAM \ -lfiniteVolume \ -lpairPatchAgglomeration \ -ltriSurface \ diff --git a/applications/utilities/preProcessing/viewFactorsGen/Make/options b/applications/utilities/preProcessing/viewFactorsGen/Make/options index b0dbd4000fe..89eb06d829f 100644 --- a/applications/utilities/preProcessing/viewFactorsGen/Make/options +++ b/applications/utilities/preProcessing/viewFactorsGen/Make/options @@ -8,7 +8,6 @@ EXE_INC = \ EXE_LIBS = \ -lmeshTools \ -lfiniteVolume \ - -lOpenFOAM \ -lmeshTools \ -ltriSurface \ -ldistributed \ diff --git a/src/Allwmake b/src/Allwmake index 925b3f211ec..c0ea041c37a 100755 --- a/src/Allwmake +++ b/src/Allwmake @@ -61,7 +61,6 @@ wmake $targetType randomProcesses transportModels/Allwmake $targetType $* thermophysicalModels/Allwmake $targetType $* -turbulenceModels/Allwmake $targetType $* TurbulenceModels/Allwmake $targetType $* wmake $targetType combustionModels regionModels/Allwmake $targetType $* diff --git a/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.H b/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.H index 40cee9b5f3d..93c7e16ac1f 100644 --- a/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.H +++ b/src/OpenFOAM/global/constants/physicoChemical/physicoChemicalConstants.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.C b/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.C index 97ecb28ec42..92b7aa226e5 100644 --- a/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.C +++ b/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ template<class TransportModel> Foam::CompressibleTurbulenceModel<TransportModel>:: CompressibleTurbulenceModel ( + const word& type, const geometricOneField& alpha, const volScalarField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.H b/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.H index 38ba5f90fdc..0a9cdfe58b8 100644 --- a/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.H +++ b/src/TurbulenceModels/compressible/CompressibleTurbulenceModel/CompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,6 +72,7 @@ public: //- Construct CompressibleTurbulenceModel ( + const word& type, const geometricOneField& alpha, const volScalarField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/compressible/Make/files b/src/TurbulenceModels/compressible/Make/files index c4107f10501..2f6e9f1dd35 100644 --- a/src/TurbulenceModels/compressible/Make/files +++ b/src/TurbulenceModels/compressible/Make/files @@ -1,4 +1,19 @@ compressibleTurbulenceModel.C -compressibleTurbulenceModels.C +turbulentFluidThermoModels/turbulentFluidThermoModels.C + +BCs = turbulentFluidThermoModels/derivedFvPatchFields +$(BCs)/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C +$(BCs)/temperatureCoupledBase/temperatureCoupledBase.C +$(BCs)/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C +$(BCs)/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C +$(BCs)/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C +$(BCs)/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C +$(BCs)/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C +$(BCs)/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C +$(BCs)/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C +$(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C + +turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C +turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C LIB = $(FOAM_LIBBIN)/libcompressibleTurbulenceModels diff --git a/src/TurbulenceModels/compressible/Make/options b/src/TurbulenceModels/compressible/Make/options index 55388cb598c..1d4b638c6a8 100644 --- a/src/TurbulenceModels/compressible/Make/options +++ b/src/TurbulenceModels/compressible/Make/options @@ -4,11 +4,15 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude LIB_LIBS = \ -lfiniteVolume \ -lmeshTools \ -lfluidThermophysicalModels \ + -lsolidThermo \ + -lsolidSpecie \ -lturbulenceModels \ -lspecie diff --git a/src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.C b/src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.C new file mode 100644 index 00000000000..b7430341b2d --- /dev/null +++ b/src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.C @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "SpecificCompressibleTurbulenceModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicCompressibleTurbulenceModel> +Foam::SpecificCompressibleTurbulenceModel +< + BasicCompressibleTurbulenceModel +>::SpecificCompressibleTurbulenceModel +( + const word& type, + const geometricOneField& alpha, + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + BasicCompressibleTurbulenceModel + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ) +{} + + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +template<class BasicCompressibleTurbulenceModel> +Foam::autoPtr +< + Foam::SpecificCompressibleTurbulenceModel + < + BasicCompressibleTurbulenceModel + > +> +Foam::SpecificCompressibleTurbulenceModel +< + BasicCompressibleTurbulenceModel +>::New +( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +{ + return autoPtr<SpecificCompressibleTurbulenceModel> + ( + static_cast<SpecificCompressibleTurbulenceModel*>( + BasicCompressibleTurbulenceModel::New + ( + geometricOneField(), + rho, + U, + phi, + phi, + transport, + propertiesName + ).ptr()) + ); +} + + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/DESModel/DESModel.H b/src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.H similarity index 56% rename from src/turbulenceModels/compressible/LES/DESModel/DESModel.H rename to src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.H index bf0532e03ae..d8cacd876b3 100644 --- a/src/turbulenceModels/compressible/LES/DESModel/DESModel.H +++ b/src/TurbulenceModels/compressible/SpecificCompressibleTurbulenceModel/SpecificCompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,93 +22,89 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::compressible::DESModel - -Group - grpCmpDESTurbulence + Foam::SpecificCompressibleTurbulenceModel Description - Extension of LES models to provide an interface for Detached Eddy - Simulation turbulence models - -SeeAlso - Foam::LESModel + Templated abstract base class for specific (RAS/LES) compressible + turbulence models SourceFiles - DESModel.C + SpecificCompressibleTurbulenceModel.C \*---------------------------------------------------------------------------*/ -#ifndef compressibleDESModel_H -#define compressibleDESModel_H - -// note: use full(er) path so that derived utilities can bring in -// incompressible and compressible variants +#ifndef SpecificCompressibleTurbulenceModel_H +#define SpecificCompressibleTurbulenceModel_H -#include "compressible/LES/LESModel/LESModel.H" +#include "CompressibleTurbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace compressible -{ /*---------------------------------------------------------------------------*\ - Class DESModel Declaration + Class SpecificCompressibleTurbulenceModel Declaration \*---------------------------------------------------------------------------*/ -class DESModel +template<class BasicCompressibleTurbulenceModel> +class SpecificCompressibleTurbulenceModel : - public LESModel + public BasicCompressibleTurbulenceModel { -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - DESModel(const DESModel&); - - //- Disallow default bitwise assignment - DESModel& operator=(const DESModel&); - - public: + typedef typename BasicCompressibleTurbulenceModel::transportModel + transportModel; + // Constructors //- Construct from components - DESModel + SpecificCompressibleTurbulenceModel ( const word& type, + const geometricOneField& alpha, const volScalarField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName + const transportModel& transport, + const word& propertiesName ); //- Destructor - virtual ~DESModel() + virtual ~SpecificCompressibleTurbulenceModel() {} - // Public Member Functions + // Selectors - //- Return the LES field indicator - virtual tmp<volScalarField> LESRegion() const = 0; + //- Return a reference to the selected RAS model + static autoPtr<SpecificCompressibleTurbulenceModel> New + ( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName = turbulenceModel::propertiesName + ); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace compressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpecificCompressibleTurbulenceModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H b/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H index 533d8992bc9..0019bd281fa 100644 --- a/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H +++ b/src/TurbulenceModels/compressible/compressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -98,6 +98,12 @@ public: // Member functions + //- Return the density field + const volScalarField& rho() const + { + return rho_; + } + //- Return the volumetric flux field virtual tmp<surfaceScalarField> phi() const; diff --git a/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.C b/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.C new file mode 100644 index 00000000000..a6dbee759f0 --- /dev/null +++ b/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.C @@ -0,0 +1,146 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "eddyDiffusivity.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +void Foam::eddyDiffusivity<BasicTurbulenceModel>::correctAlphat() +{ + alphat_ = this->rho_*this->nut()/Prt_; + alphat_.correctBoundaryConditions(); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::eddyDiffusivity<BasicTurbulenceModel>::eddyDiffusivity +( + const word& type, + const geometricOneField& alpha, + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + BasicTurbulenceModel + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + // Prt_ + // ( + // dimensioned<scalar>::lookupOrAddToDict + // ( + // "Prt", + // this->coeffDict_, + // 1.0 + // ) + // ), + + Prt_("Prt", dimless, 1.0), + + alphat_ + ( + IOobject + ( + "alphat", + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ) +{} + + +// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::autoPtr<Foam::eddyDiffusivity<BasicTurbulenceModel> > +Foam::eddyDiffusivity<BasicTurbulenceModel>::New +( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +{ + return autoPtr<eddyDiffusivity> + ( + static_cast<eddyDiffusivity*>( + BasicTurbulenceModel::New + ( + rho, + U, + phi, + transport, + propertiesName + ).ptr()) + ); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool Foam::eddyDiffusivity<BasicTurbulenceModel>::read() +{ + if (BasicTurbulenceModel::read()) + { + Prt_.readIfPresent(this->coeffDict()); + + return true; + } + else + { + return false; + } +} + + +template<class BasicTurbulenceModel> +void Foam::eddyDiffusivity<BasicTurbulenceModel>::correct() +{ + BasicTurbulenceModel::correct(); + correctAlphat(); +} + + +// ************************************************************************* // diff --git a/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.H b/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.H new file mode 100644 index 00000000000..18d5c98281b --- /dev/null +++ b/src/TurbulenceModels/compressible/eddyDiffusivity/eddyDiffusivity.H @@ -0,0 +1,180 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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::eddyDiffusivity + +Description + Templated abstract base class for single-phase compressible + turbulence models. + +SourceFiles + eddyDiffusivity.C + +\*---------------------------------------------------------------------------*/ + +#ifndef eddyDiffusivity_H +#define eddyDiffusivity_H + +#include "CompressibleTurbulenceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class eddyDiffusivity Declaration +\*---------------------------------------------------------------------------*/ + +template<class BasicTurbulenceModel> +class eddyDiffusivity +: + public BasicTurbulenceModel +{ + +protected: + + // Protected data + + // Model coefficients + + dimensionedScalar Prt_; + + // Fields + + volScalarField alphat_; + + + // Protected Member Functions + + virtual void correctAlphat(); + + +public: + + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + + // Constructors + + //- Construct + eddyDiffusivity + ( + const word& type, + const geometricOneField& alpha, + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& trasport, + const word& propertiesName + ); + + + // Selectors + + //- Return a reference to the selected turbulence model + static autoPtr<eddyDiffusivity> New + ( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& trasportModel, + const word& propertiesName = turbulenceModel::propertiesName + ); + + + //- Destructor + virtual ~eddyDiffusivity() + {} + + + // Member Functions + + //- Re-read model coefficients if they have changed + virtual bool read(); + + //- Return the turbulent thermal diffusivity for enthalpy [kg/m/s] + virtual tmp<volScalarField> alphat() const + { + return alphat_; + } + + //- Return the turbulent thermal diffusivity for enthalpy for a patch + // [kg/m/s] + virtual tmp<scalarField> alphat(const label patchi) const + { + return alphat()().boundaryField()[patchi]; + } + + //- Return the effective turbulent thermal diffusivity for temperature + // [J/m/s/K] + virtual tmp<volScalarField> kappaEff() const + { + return this->transport_.kappaEff(alphat()); + } + + //- Return the effective turbulent thermal diffusivity for temperature + // [J/m/s/K] + virtual tmp<scalarField> kappaEff(const label patchi) const + { + return this->transport_.kappaEff(alphat(patchi), patchi); + } + + //- Return the effective turbulent thermal diffusivity for enthalpy + // [kg/m/s] + virtual tmp<volScalarField> alphaEff() const + { + return this->transport_.alphaEff(alphat()); + } + + //- Return the effective turbulent thermal diffusivity for enthalpy + // for a patch [kg/m/s] + virtual tmp<scalarField> alphaEff(const label patchi) const + { + return this->transport_.alphaEff(alphat(patchi), patchi); + } + + //- Correct the turbulent thermal diffusivity for enthalpy + virtual void correct(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "eddyDiffusivity.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.C b/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.C new file mode 100644 index 00000000000..5b25fe8d8e6 --- /dev/null +++ b/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.C @@ -0,0 +1,124 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "thermalDiffusivity.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class TransportModel> +Foam::thermalDiffusivity<TransportModel>::thermalDiffusivity +( + const word& type, + const geometricOneField& alpha, + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + CompressibleTurbulenceModel<TransportModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ) +{} + + +// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // + +template<class TransportModel> +Foam::autoPtr<Foam::thermalDiffusivity<TransportModel> > +Foam::thermalDiffusivity<TransportModel>::New +( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +{ + return autoPtr<thermalDiffusivity> + ( + static_cast<thermalDiffusivity*>( + CompressibleTurbulenceModel<transportModel>::New + ( + rho, + U, + phi, + transport, + propertiesName + ).ptr()) + ); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volScalarField> +Foam::thermalDiffusivity<BasicTurbulenceModel>::alphat() const +{ + return tmp<volScalarField> + ( + new volScalarField + ( + IOobject + ( + IOobject::groupName("alphat", this->U_.group()), + this->runTime_.timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + this->mesh_, + dimensionedScalar("alphat", dimDensity*dimViscosity, 0.0) + ) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::scalarField> +Foam::thermalDiffusivity<BasicTurbulenceModel>::alphat +( + const label patchi +) const +{ + return tmp<scalarField> + ( + new scalarField(this->mesh_.boundary()[patchi].size(), 0.0) + ); +} + + +// ************************************************************************* // diff --git a/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.H b/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.H new file mode 100644 index 00000000000..b62cfa2e95e --- /dev/null +++ b/src/TurbulenceModels/compressible/thermalDiffusivity/thermalDiffusivity.H @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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::thermalDiffusivity + +Description + Templated abstract base class for single-phase compressible + turbulence models. + +SourceFiles + thermalDiffusivity.C + +\*---------------------------------------------------------------------------*/ + +#ifndef thermalDiffusivity_H +#define thermalDiffusivity_H + +#include "CompressibleTurbulenceModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class thermalDiffusivity Declaration +\*---------------------------------------------------------------------------*/ + +template<class TransportModel> +class thermalDiffusivity +: + public CompressibleTurbulenceModel<TransportModel> +{ + +public: + + typedef geometricOneField alphaField; + typedef volScalarField rhoField; + typedef TransportModel transportModel; + + + // Constructors + + //- Construct + thermalDiffusivity + ( + const word& type, + const geometricOneField& alpha, + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& trasport, + const word& propertiesName + ); + + + // Selectors + + //- Return a reference to the selected turbulence model + static autoPtr<thermalDiffusivity> New + ( + const volScalarField& rho, + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& trasportModel, + const word& propertiesName = turbulenceModel::propertiesName + ); + + + //- Destructor + virtual ~thermalDiffusivity() + {} + + + // Member Functions + + //- Return the thermal diffusivity for temperature [J/m/s/K] + virtual tmp<volScalarField> kappa() const + { + return this->transport_.kappa(); + } + + //- Return the laminar thermal diffusivity for temperature on patch + // [J/m/s/K] + virtual tmp<scalarField> kappa(const label patchi) const + { + return this->transport_.kappa(patchi); + } + + //- Return the laminar thermal diffusivity for enthalpy [kg/m/s] + virtual tmp<volScalarField> alpha() const + { + return this->transport_.alpha(); + } + + //- Return the laminar thermal diffusivity for enthalpy on patch + // [kg/m/s] + virtual tmp<scalarField> alpha(const label patchi) const + { + return this->transport_.alpha(patchi); + } + + //- Return the turbulent thermal diffusivity for enthalpy [kg/m/s] + virtual tmp<volScalarField> alphat() const; + + //- Return the turbulent thermal diffusivity for enthalpy for a patch + // [kg/m/s] + virtual tmp<scalarField> alphat(const label patchi) const; + + //- Return the effective turbulent thermal diffusivity for temperature + // [J/m/s/K] + virtual tmp<volScalarField> kappaEff() const + { + return kappa(); + } + + //- Return the effective turbulent thermal diffusivity for temperature + // [J/m/s/K] + virtual tmp<scalarField> kappaEff(const label patchi) const + { + return kappa(patchi); + } + + //- Return the effective turbulent thermal diffusivity for enthalpy + // [kg/m/s] + virtual tmp<volScalarField> alphaEff() const + { + return alpha(); + } + + //- Return the effective turbulent thermal diffusivity for enthalpy + // for a patch [kg/m/s] + virtual tmp<scalarField> alphaEff(const label patchi) const + { + return alpha(patchi); + } +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "thermalDiffusivity.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModelDoc.H b/src/TurbulenceModels/compressible/turbulenceModelDoc.H similarity index 94% rename from src/turbulenceModels/compressible/turbulenceModel/turbulenceModelDoc.H rename to src/TurbulenceModels/compressible/turbulenceModelDoc.H index 17bc210959f..5722cee54e8 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModelDoc.H +++ b/src/TurbulenceModels/compressible/turbulenceModelDoc.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,5 +27,5 @@ License @{ This group contains compressible turbulence models. @} - + \*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C similarity index 87% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C index 65405445628..02e87c7a776 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "convectiveHeatTransferFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "fvPatchFieldMapper.H" #include "addToRunTimeSelectionTable.H" @@ -110,16 +110,26 @@ void convectiveHeatTransferFvPatchScalarField::updateCoeffs() const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + const scalarField alphaEffw(turbModel.alphaEff(patchi)); - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; + + const tmp<scalarField> tmuw = turbModel.mu(patchi); + const scalarField& muw = tmuw(); + const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; const vectorField& Uc = turbModel.U(); const vectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField& Tw = turbModel.thermo().T().boundaryField()[patchi]; - const scalarField& pw = turbModel.thermo().p().boundaryField()[patchi]; - const scalarField Cpw(turbModel.thermo().Cp(pw, Tw, patchi)); + const scalarField& Tw = turbModel.transport().T().boundaryField()[patchi]; + const scalarField& pw = turbModel.transport().p().boundaryField()[patchi]; + const scalarField Cpw(turbModel.transport().Cp(pw, Tw, patchi)); const scalarField kappaw(Cpw*alphaEffw); const scalarField Pr(muw*Cpw/kappaw); diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H index cbbd7869bef..f1af5d9185c 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C similarity index 95% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C index c4d54b83b27..36b6ce87968 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,11 +24,11 @@ License \*---------------------------------------------------------------------------*/ #include "externalCoupledTemperatureMixedFvPatchScalarField.H" +#include "turbulentFluidThermoModel.H" #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "OFstream.H" -#include "turbulenceModel.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // @@ -127,7 +127,16 @@ void Foam::externalCoupledTemperatureMixedFvPatchScalarField::transferData scalarField qDot(this->patch().size(), 0.0); typedef compressible::turbulenceModel cmpTurbModelType; - static word turbName("turbulenceModel"); + + static word turbName + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + static word thermoName("thermophysicalProperties"); if (db().foundObject<cmpTurbModelType>(turbName)) @@ -135,7 +144,7 @@ void Foam::externalCoupledTemperatureMixedFvPatchScalarField::transferData const cmpTurbModelType& turbModel = db().lookupObject<cmpTurbModelType>(turbName); - const basicThermo& thermo = turbModel.thermo(); + const basicThermo& thermo = turbModel.transport(); const fvPatchScalarField& hep = thermo.he().boundaryField()[patchI]; diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H index 3d17d955a69..47fb9153185 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C index e6470981e61..27306f29c55 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H index ad4bc5fd8b4..0799e9dd789 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C similarity index 95% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C index b128e562e8f..ff6c5e9f262 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,7 +27,7 @@ License #include "volFields.H" #include "fluidThermo.H" #include "solidThermo.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * // @@ -111,10 +111,15 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa { typedef compressible::turbulenceModel turbulenceModel; - if (mesh.foundObject<turbulenceModel>("turbulenceModel")) + word turbName(turbulenceModel::propertiesName); + + if + ( + mesh.foundObject<turbulenceModel>(turbName) + ) { const turbulenceModel& turbModel = - mesh.lookupObject<turbulenceModel>("turbulenceModel"); + mesh.lookupObject<turbulenceModel>(turbName); return turbModel.kappaEff(patchI); } diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H similarity index 98% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H index f90c8d90f31..7385c39df26 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C similarity index 98% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C index 490bec5c712..caef4180990 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,7 +26,7 @@ License #include "volFields.H" #include "surfaceFields.H" #include "mappedPatchBase.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "mapDistribute.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -356,7 +356,7 @@ void thermalBaffle1DFvPatchScalarField<solidType>::updateCoeffs() const compressible::turbulenceModel& turbModel = db().template lookupObject<compressible::turbulenceModel> ( - "turbulenceModel" + turbulenceModel::propertiesName ); // local properties @@ -383,7 +383,7 @@ void thermalBaffle1DFvPatchScalarField<solidType>::updateCoeffs() // nrb properties scalarField nbrTp = - turbModel.thermo().T().boundaryField()[nbrPatchi]; + turbModel.transport().T().boundaryField()[nbrPatchi]; mapDist.distribute(nbrTp); // solid properties diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H index bed019f4bd2..4df0d438206 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C similarity index 97% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C index ca3f232992d..8eab8013249 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H similarity index 96% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H index db7dcf0c9fc..8a3187abcd1 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C similarity index 91% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C index e3d00dea694..646fbed6620 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,8 +29,7 @@ License #include "volFields.H" #include "surfaceFields.H" #include "IOobjectList.H" -#include "turbulenceModel.H" - +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::totalFlowRateAdvectiveDiffusiveFvPatchScalarField:: @@ -154,16 +153,22 @@ void Foam::totalFlowRateAdvectiveDiffusiveFvPatchScalarField::updateCoeffs() const label patchI = patch().index(); - const compressible::turbulenceModel& turbulence = - db().lookupObject<compressible::turbulenceModel> - ( - "turbulenceModel" + const LESModel<eddyDiffusivity<compressible::turbulenceModel> >& turbModel = + db().lookupObject + < + LESModel<eddyDiffusivity<compressible::turbulenceModel> > + > ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) ); const fvsPatchField<scalar>& phip = patch().lookupPatchField<surfaceScalarField, scalar>(phiName_); - const scalarField alphap(turbulence.alphaEff(patchI)); + const scalarField alphap(turbModel.alphaEff(patchI)); refValue() = massFluxFraction_; refGrad() = 0.0; diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H index 79a1da68ef5..a6313f71ae7 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C index 9f0f1a3367f..4ebd0c18037 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H index 740183e3590..fc816b3d67c 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C index dff61c39896..d304e598eee 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H index ac17f3c330d..862abc18522 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C index 19f8a971a58..e610afc80e9 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H similarity index 99% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H index bbfe48c631e..8c332402e92 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C similarity index 92% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C index 16b69874f0e..98a5a05f5e7 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "alphatJayatillekeWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "addToRunTimeSelectionTable.H" @@ -199,16 +199,27 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); + // Retrieve turbulence properties from model + + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); const scalar Cmu25 = pow025(Cmu_); const scalarField& y = turbModel.y()[patchi]; - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; + const tmp<scalarField> tmuw = turbModel.mu(patchi); + const scalarField& muw = tmuw(); + + const tmp<scalarField> talphaw = turbModel.alpha(patchi); + const scalarField& alphaw = talphaw(); - const scalarField& alphaw = turbModel.alpha().boundaryField()[patchi]; scalarField& alphatw = *this; const tmp<volScalarField> tk = turbModel.k(); @@ -220,12 +231,12 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; const fvPatchScalarField& hew = - turbModel.thermo().he().boundaryField()[patchi]; + turbModel.transport().he().boundaryField()[patchi]; // Heat flux [W/m2] - lagging alphatw const scalarField qDot ( - turbModel.thermo().alphaEff(alphatw, patchi)*hew.snGrad() + turbModel.transport().alphaEff(alphatw, patchi)*hew.snGrad() ); // Populate boundary values diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H index 5a43d7773e4..2626bafc37d 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C similarity index 82% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C index dcf694ad1ab..90d22360056 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,7 +44,8 @@ alphatWallFunctionFvPatchScalarField::alphatWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - mutName_("mut"), + rhoName_("rho"), + nutName_("nut"), Prt_(0.85) {} @@ -58,7 +59,8 @@ alphatWallFunctionFvPatchScalarField::alphatWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(ptf, p, iF, mapper), - mutName_(ptf.mutName_), + rhoName_(ptf.rhoName_), + nutName_(ptf.nutName_), Prt_(ptf.Prt_) {} @@ -71,7 +73,8 @@ alphatWallFunctionFvPatchScalarField::alphatWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF, dict), - mutName_(dict.lookupOrDefault<word>("mut", "mut")), + rhoName_(dict.lookupOrDefault<word>("rho", "rho")), + nutName_(dict.lookupOrDefault<word>("nut", "nut")), Prt_(dict.lookupOrDefault<scalar>("Prt", 0.85)) {} @@ -82,7 +85,8 @@ alphatWallFunctionFvPatchScalarField::alphatWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(awfpsf), - mutName_(awfpsf.mutName_), + rhoName_(awfpsf.rhoName_), + nutName_(awfpsf.nutName_), Prt_(awfpsf.Prt_) {} @@ -94,7 +98,8 @@ alphatWallFunctionFvPatchScalarField::alphatWallFunctionFvPatchScalarField ) : fixedValueFvPatchScalarField(awfpsf, iF), - mutName_(awfpsf.mutName_), + rhoName_(awfpsf.rhoName_), + nutName_(awfpsf.nutName_), Prt_(awfpsf.Prt_) {} @@ -108,10 +113,13 @@ void alphatWallFunctionFvPatchScalarField::updateCoeffs() return; } - const scalarField& mutw = - patch().lookupPatchField<volScalarField, scalar>(mutName_); + const scalarField& rhow = + patch().lookupPatchField<volScalarField, scalar>(rhoName_); - operator==(mutw/Prt_); + const scalarField& nutw = + patch().lookupPatchField<volScalarField, scalar>(nutName_); + + operator==(rhow*nutw/Prt_); fixedValueFvPatchScalarField::updateCoeffs(); } @@ -120,7 +128,8 @@ void alphatWallFunctionFvPatchScalarField::updateCoeffs() void alphatWallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField<scalar>::write(os); - writeEntryIfDifferent<word>(os, "mut", "mut", mutName_); + writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_); + writeEntryIfDifferent<word>(os, "nut", "nut", nutName_); os.writeKeyword("Prt") << Prt_ << token::END_STATEMENT << nl; writeEntry("value", os); } diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H similarity index 94% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H index 0500caec6b3..f44ee6b8cf1 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -50,7 +50,7 @@ Description \table Property | Description | Required | Default value - mut | turbulence viscosity field name | no | mut + nut | turbulence viscosity field name | no | nut Prt | turbulent Prandtl number | no | 0.85 \endtable @@ -59,7 +59,7 @@ Description myPatch { type alphatWallFunction; - mut mut; + nut nut; Prt 0.85; value uniform 0; // optional value entry } @@ -95,8 +95,11 @@ class alphatWallFunctionFvPatchScalarField { // Private data - //- Name of turbulent viscosity field (default = mut) - word mutName_; + //- Name of density field (default = rho) + word rhoName_; + + //- Name of turbulent viscosity field (default = nut) + word nutName_; //- Turbulent Prandtl number (default = 0.85) scalar Prt_; diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C similarity index 94% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C index 2efdccde5e1..bc5f23ced42 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,7 +26,7 @@ License #include "wallHeatTransferFvPatchScalarField.H" #include "addToRunTimeSelectionTable.H" #include "fvPatchFieldMapper.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -151,7 +151,11 @@ void Foam::wallHeatTransferFvPatchScalarField::updateCoeffs() const compressible::turbulenceModel& turbModel = db().lookupObject<compressible::turbulenceModel> ( - "turbulenceModel" + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) ); const label patchi = patch().index(); diff --git a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H index a33ce4e4729..1524f6c0b4e 100644 --- a/src/turbulenceModels/compressible/turbulenceModel/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/makeTurbulenceModel.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/makeTurbulenceModel.H new file mode 100644 index 00000000000..ae0b0cb5977 --- /dev/null +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/makeTurbulenceModel.H @@ -0,0 +1,128 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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/>. + +\*---------------------------------------------------------------------------*/ + +#define makeBaseTurbulenceModel(Alpha, Rho, baseModel, BaseModel, Transport) \ + \ + namespace Foam \ + { \ + typedef TurbulenceModel \ + < \ + Alpha, \ + Rho, \ + baseModel, \ + Transport \ + > Transport##baseModel; \ + \ + defineTemplateRunTimeSelectionTable \ + ( \ + Transport##baseModel, \ + dictionary \ + ); \ + \ + typedef BaseModel<Transport> Transport##BaseModel; \ + \ + \ + typedef laminar<Transport##BaseModel> Laminar##Transport##BaseModel; \ + \ + defineNamedTemplateTypeNameAndDebug(Laminar##Transport##BaseModel, 0); \ + \ + addToRunTimeSelectionTable \ + ( \ + Transport##baseModel, \ + Laminar##Transport##BaseModel, \ + dictionary \ + ); \ + \ + \ + typedef RASModel<eddyDiffusivity<Transport##BaseModel> > \ + RAS##Transport##BaseModel; \ + \ + defineNamedTemplateTypeNameAndDebug(RAS##Transport##BaseModel, 0); \ + \ + defineTemplateRunTimeSelectionTable \ + (RAS##Transport##BaseModel, dictionary); \ + \ + addToRunTimeSelectionTable \ + ( \ + Transport##baseModel, \ + RAS##Transport##BaseModel, \ + dictionary \ + ); \ + \ + \ + typedef LESModel<eddyDiffusivity<Transport##BaseModel> > \ + LES##Transport##BaseModel; \ + \ + defineNamedTemplateTypeNameAndDebug(LES##Transport##BaseModel, 0); \ + \ + defineTemplateRunTimeSelectionTable \ + (LES##Transport##BaseModel, dictionary); \ + \ + addToRunTimeSelectionTable \ + ( \ + Transport##baseModel, \ + LES##Transport##BaseModel, \ + dictionary \ + ); \ + } + + +#define makeTemplatedTurbulenceModel(BaseModel, SType, Type) \ + namespace Foam \ + { \ + namespace SType##Models \ + { \ + typedef Type<eddyDiffusivity<BaseModel> > Type##SType##BaseModel; \ + \ + defineNamedTemplateTypeNameAndDebug(Type##SType##BaseModel, 0); \ + \ + addToRunTimeSelectionTable \ + ( \ + SType##BaseModel, \ + Type##SType##BaseModel, \ + dictionary \ + ); \ + } \ + } + + +#define makeTurbulenceModel(BaseModel, SType, Type) \ + namespace Foam \ + { \ + namespace SType##Models \ + { \ + defineTypeNameAndDebug(Type, 0); \ + \ + addToRunTimeSelectionTable \ + ( \ + SType##BaseModel, \ + Type, \ + dictionary \ + ); \ + } \ + } + + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModel.H similarity index 57% rename from src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModel.H index a62cd0806ed..7725dee9717 100644 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModel.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) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -21,29 +21,54 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +Typedef + Foam::compressible::turbulenceModel + +Typedef + Foam::compressible::RASModel + +Typedef + Foam::compressible::LESModel + +Description + Typedefs for turbulence, RAS and LES models for compressible flow + based on the standard laminar transport package. + +SourceFiles + turbulentFluidThermoModels.C + \*---------------------------------------------------------------------------*/ -#ifndef kqRWallFunctionFvPatchFields_H -#define kqRWallFunctionFvPatchFields_H +#ifndef turbulentFluidThermoModel_H +#define turbulentFluidThermoModel_H -#include "kqRWallFunctionFvPatchField.H" -#include "fieldTypes.H" +#include "SpecificCompressibleTurbulenceModel.H" +#include "thermalDiffusivity.H" +#include "eddyDiffusivity.H" +#include "RASModel.H" +#include "LESModel.H" +#include "fluidThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace compressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + namespace compressible + { + typedef thermalDiffusivity<fluidThermo> turbulenceModel; -makePatchTypeFieldTypedefs(kqRWallFunction); + typedef SpecificCompressibleTurbulenceModel + < + RASModel<eddyDiffusivity<turbulenceModel> > + > RASModel; -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + typedef SpecificCompressibleTurbulenceModel + < + LESModel<eddyDiffusivity<turbulenceModel> > + > LESModel; + } +} -} // End namespace compressible -} // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/compressible/compressibleTurbulenceModels.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C similarity index 78% rename from src/TurbulenceModels/compressible/compressibleTurbulenceModels.C rename to src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C index 054dee88845..ad86b169aa2 100644 --- a/src/TurbulenceModels/compressible/compressibleTurbulenceModels.C +++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,11 +23,13 @@ License \*---------------------------------------------------------------------------*/ -#include "CompressibleTurbulenceModel.H" #include "fluidThermo.H" #include "addToRunTimeSelectionTable.H" #include "makeTurbulenceModel.H" +#include "thermalDiffusivity.H" +#include "eddyDiffusivity.H" + #include "laminar.H" #include "RASModel.H" #include "LESModel.H" @@ -37,17 +39,20 @@ makeBaseTurbulenceModel geometricOneField, volScalarField, compressibleTurbulenceModel, - CompressibleTurbulenceModel, + thermalDiffusivity, fluidThermo ); #define makeRASModel(Type) \ makeTemplatedTurbulenceModel \ - (fluidThermoCompressibleTurbulenceModel, RAS, Type) + (fluidThermothermalDiffusivity, RAS, Type) #define makeLESModel(Type) \ makeTemplatedTurbulenceModel \ - (fluidThermoCompressibleTurbulenceModel, LES, Type) + (fluidThermothermalDiffusivity, LES, Type) + +#include "SpalartAllmaras.H" +makeRASModel(SpalartAllmaras); #include "kEpsilon.H" makeRASModel(kEpsilon); @@ -55,6 +60,9 @@ makeRASModel(kEpsilon); #include "buoyantKEpsilon.H" makeRASModel(buoyantKEpsilon); +#include "LaunderSharmaKE.H" +makeRASModel(LaunderSharmaKE); + #include "kOmegaSST.H" makeRASModel(kOmegaSST); @@ -64,5 +72,14 @@ makeLESModel(Smagorinsky); #include "kEqn.H" makeLESModel(kEqn); +#include "SpalartAllmarasDES.H" +makeLESModel(SpalartAllmarasDES); + +#include "SpalartAllmarasDDES.H" +makeLESModel(SpalartAllmarasDDES); + +#include "SpalartAllmarasIDDES.H" +makeLESModel(SpalartAllmarasIDDES); + // ************************************************************************* // diff --git a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C index ce93b0d5915..447af12fff9 100644 --- a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C +++ b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,12 +31,13 @@ template<class TransportModel> Foam::IncompressibleTurbulenceModel<TransportModel>:: IncompressibleTurbulenceModel ( + const word& type, const geometricOneField& alpha, const geometricOneField& rho, const volVectorField& U, const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, - const TransportModel& transportModel, + const TransportModel& transport, const word& propertiesName ) : @@ -53,7 +54,7 @@ IncompressibleTurbulenceModel U, alphaRhoPhi, phi, - transportModel, + transport, propertiesName ) {} @@ -67,7 +68,7 @@ Foam::IncompressibleTurbulenceModel<TransportModel>::New ( const volVectorField& U, const surfaceScalarField& phi, - const TransportModel& transportModel, + const TransportModel& transport, const word& propertiesName ) { @@ -87,7 +88,7 @@ Foam::IncompressibleTurbulenceModel<TransportModel>::New U, phi, phi, - transportModel, + transport, propertiesName ).ptr()) ); @@ -148,4 +149,23 @@ divDevRhoReff } +template<class TransportModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::IncompressibleTurbulenceModel<TransportModel>:: +divDevRhoReff +( + const volScalarField& rho, + volVectorField& U +) const +{ + notImplemented + ( + "IncompressibleTurbulenceModel<TransportModel>::" + "divDevRhoReff(const volScalarField& rho, volVectorField& U)" + ); + + return divDevReff(U); +} + + // ************************************************************************* // diff --git a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H index c0d4af42a56..eb9d8bfb06a 100644 --- a/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H +++ b/src/TurbulenceModels/incompressible/IncompressibleTurbulenceModel/IncompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,6 +38,7 @@ SourceFiles #include "TurbulenceModel.H" #include "incompressibleTurbulenceModel.H" +#include "fvMatrix.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -72,12 +73,13 @@ public: //- Construct IncompressibleTurbulenceModel ( + const word& type, const geometricOneField& alpha, const geometricOneField& rho, const volVectorField& U, const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, - const TransportModel& trasportModel, + const TransportModel& transport, const word& propertiesName ); @@ -112,6 +114,13 @@ public: //- Return the source term for the momentum equation virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; + + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevRhoReff + ( + const volScalarField& rho, + volVectorField& U + ) const; }; diff --git a/src/TurbulenceModels/incompressible/Make/files b/src/TurbulenceModels/incompressible/Make/files index 4b3ca65c16b..4d4d5729bdc 100644 --- a/src/TurbulenceModels/incompressible/Make/files +++ b/src/TurbulenceModels/incompressible/Make/files @@ -1,4 +1,21 @@ incompressibleTurbulenceModel.C -incompressibleTurbulenceModels.C + +turbulentTransportModels/turbulentTransportModels.C +turbulentTransportModels/RAS/kOmega/kOmega.C +turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.C +turbulentTransportModels/RAS/v2f/v2f.C +turbulentTransportModels/RAS/qZeta/qZeta.C +turbulentTransportModels/RAS/kkLOmega/kkLOmega.C +turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C +turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C +turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.C +turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C +turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.C + +BCs = turbulentTransportModels/RAS/derivedFvPatchFields +$(BCs)/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C +$(BCs)/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C + +turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C LIB = $(FOAM_LIBBIN)/libincompressibleTurbulenceModels diff --git a/src/TurbulenceModels/incompressible/Make/options b/src/TurbulenceModels/incompressible/Make/options index 617607373e8..acb769c06fe 100644 --- a/src/TurbulenceModels/incompressible/Make/options +++ b/src/TurbulenceModels/incompressible/Make/options @@ -2,7 +2,7 @@ EXE_INC = \ -I../turbulenceModels/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/transportModels/incompressible/lnInclude + -I$(LIB_SRC)/transportModels LIB_LIBS = \ -lincompressibleTransportModels \ diff --git a/src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.C b/src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.C new file mode 100644 index 00000000000..f6ba580c0f7 --- /dev/null +++ b/src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.C @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "SpecificIncompressibleTurbulenceModel.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicIncompressibleTurbulenceModel> +Foam::SpecificIncompressibleTurbulenceModel +< + BasicIncompressibleTurbulenceModel +>::SpecificIncompressibleTurbulenceModel +( + const word& type, + const geometricOneField& alpha, + const geometricOneField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + BasicIncompressibleTurbulenceModel + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ) +{} + + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +template<class BasicIncompressibleTurbulenceModel> +Foam::autoPtr +< + Foam::SpecificIncompressibleTurbulenceModel + < + BasicIncompressibleTurbulenceModel + > +> +Foam::SpecificIncompressibleTurbulenceModel +< + BasicIncompressibleTurbulenceModel +>::New +( + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +{ + return autoPtr<SpecificIncompressibleTurbulenceModel> + ( + static_cast<SpecificIncompressibleTurbulenceModel*>( + BasicIncompressibleTurbulenceModel::New + ( + geometricOneField(), + geometricOneField(), + U, + phi, + phi, + transport, + propertiesName + ).ptr()) + ); +} + + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/DESModel/DESModel.H b/src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.H similarity index 56% rename from src/turbulenceModels/incompressible/LES/DESModel/DESModel.H rename to src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.H index 6aec3ee060b..e7cc38118b5 100644 --- a/src/turbulenceModels/incompressible/LES/DESModel/DESModel.H +++ b/src/TurbulenceModels/incompressible/SpecificIncompressibleTurbulenceModel/SpecificIncompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,92 +22,88 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::DESModel - -Group - grpIcoDESTurbulence + Foam::SpecificIncompressibleTurbulenceModel Description - Extension of LES models to provide an interface for Detached Eddy - Simulation turbulence models - -SeeAlso - Foam::LESModel + Templated abstract base class for specific (RAS/LES) incompressible + turbulence models SourceFiles - DESModel.C + SpecificIncompressibleTurbulenceModel.C \*---------------------------------------------------------------------------*/ -#ifndef incompressibleDESModel_H -#define incompressibleDESModel_H - -// note: use full(er) path so that derived utilities can bring in -// incompressible and compressible variants +#ifndef SpecificIncompressibleTurbulenceModel_H +#define SpecificIncompressibleTurbulenceModel_H -#include "incompressible/LES/LESModel/LESModel.H" +#include "IncompressibleTurbulenceModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ /*---------------------------------------------------------------------------*\ - Class DESModel Declaration + Class SpecificIncompressibleTurbulenceModel Declaration \*---------------------------------------------------------------------------*/ -class DESModel +template<class BasicIncompressibleTurbulenceModel> +class SpecificIncompressibleTurbulenceModel : - public LESModel + public BasicIncompressibleTurbulenceModel { -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - DESModel(const DESModel&); - - //- Disallow default bitwise assignment - DESModel& operator=(const DESModel&); - - public: + typedef typename BasicIncompressibleTurbulenceModel::transportModel + transportModel; + // Constructors //- Construct from components - DESModel + SpecificIncompressibleTurbulenceModel ( const word& type, + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName + const word& propertiesName ); //- Destructor - virtual ~DESModel() + virtual ~SpecificIncompressibleTurbulenceModel() {} - // Public Member Functions + // Selectors - //- Return the LES field indicator - virtual tmp<volScalarField> LESRegion() const = 0; + //- Return a reference to the selected RAS model + static autoPtr<SpecificIncompressibleTurbulenceModel> New + ( + const volVectorField& U, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName = turbulenceModel::propertiesName + ); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpecificIncompressibleTurbulenceModel.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModelDoc.H b/src/TurbulenceModels/incompressible/turbulenceModelDoc.H similarity index 94% rename from src/turbulenceModels/incompressible/turbulenceModel/turbulenceModelDoc.H rename to src/TurbulenceModels/incompressible/turbulenceModelDoc.H index f9751dc542e..2e5547351f1 100644 --- a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModelDoc.H +++ b/src/TurbulenceModels/incompressible/turbulenceModelDoc.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -27,5 +27,5 @@ License @{ This group contains incompressible turbulence models. @} - + \*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C similarity index 72% rename from src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C index c23bc4b0b21..aa7e9457dc4 100644 --- a/src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.C @@ -24,10 +24,10 @@ License \*---------------------------------------------------------------------------*/ #include "LamBremhorstKE.H" +#include "wallDist.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -42,18 +42,40 @@ namespace RASModels defineTypeNameAndDebug(LamBremhorstKE, 0); addToRunTimeSelectionTable(RASModel, LamBremhorstKE, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void LamBremhorstKE::correctNut() +{ + nut_ = Cmu_*fMu_*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // LamBremhorstKE::LamBremhorstKE ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), Cmu_ ( @@ -96,7 +118,7 @@ LamBremhorstKE::LamBremhorstKE ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -109,7 +131,7 @@ LamBremhorstKE::LamBremhorstKE ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -126,103 +148,24 @@ LamBremhorstKE::LamBremhorstKE ( sqr(scalar(1) - exp(-0.0165*(sqrt(k_)*y_/nu()))) *(scalar(1) + 20.5/(Rt_ + SMALL)) - ), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateLowReNut("nut", mesh_) ) { bound(k_, kMin_); // already bounded: bound(epsilon_, epsilonMin_); - nut_ = Cmu_*fMu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> LamBremhorstKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LamBremhorstKE::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LamBremhorstKE::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> LamBremhorstKE::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool LamBremhorstKE::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { Cmu_.readIfPresent(coeffDict()); C1_.readIfPresent(coeffDict()); @@ -240,7 +183,7 @@ bool LamBremhorstKE::read() void LamBremhorstKE::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -293,9 +236,7 @@ void LamBremhorstKE::correct() solve(kEqn); bound(k_, kMin_); - - // Re-calculate viscosity - nut_ == Cmu_*fMu_*sqr(k_)/epsilon_; + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.H similarity index 81% rename from src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.H index 30e590cad7d..4041e045210 100644 --- a/src/turbulenceModels/incompressible/RAS/LamBremhorstKE/LamBremhorstKE.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LamBremhorstKE/LamBremhorstKE.H @@ -39,8 +39,8 @@ SourceFiles #ifndef LamBremhorstKE_H #define LamBremhorstKE_H -#include "RASModel.H" -#include "wallDist.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -57,7 +57,7 @@ namespace RASModels class LamBremhorstKE : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -80,7 +80,11 @@ protected: volScalarField Rt_; volScalarField fMu_; - volScalarField nut_; + + + // Protected Member Functions + + virtual void correctNut(); public: @@ -94,11 +98,14 @@ public: //- Construct from components LamBremhorstKE ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -109,11 +116,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -145,27 +149,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C similarity index 67% rename from src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C index 4065ab267ef..30f7de7b591 100644 --- a/src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.C @@ -24,10 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "LienCubicKE.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -42,18 +41,82 @@ namespace RASModels defineTypeNameAndDebug(LienCubicKE, 0); addToRunTimeSelectionTable(RASModel, LienCubicKE, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void LienCubicKE::correctNut() +{ + nut_ = + Cmu_*sqr(k_)/epsilon_ + // C5 term, implicit + + max + ( + C5viscosity_, + dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) + ); + + nut_.correctBoundaryConditions(); +} + + +void LienCubicKE::correctNonlinearStress(const volTensorField& gradU) +{ + nonlinearStress_ = symm + ( + // quadratic terms + pow3(k_)/sqr(epsilon_) + *( + Ctau1_/fEta_ + *( + (gradU & gradU) + + (gradU & gradU)().T() + ) + + Ctau2_/fEta_*(gradU & gradU.T()) + + Ctau3_/fEta_*(gradU.T() & gradU) + ) + // cubic term C4 + - 20.0*pow4(k_)/pow3(epsilon_) + *pow3(Cmu_) + *( + ((gradU & gradU) & gradU.T()) + + ((gradU & gradU.T()) & gradU.T()) + - ((gradU.T() & gradU) & gradU) + - ((gradU.T() & gradU.T()) & gradU) + ) + // cubic term C5, explicit part + + min + ( + C5viscosity_, + dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) + )*gradU + ); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // LienCubicKE::LienCubicKE ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + nonlinearEddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), C1_ ( @@ -150,25 +213,25 @@ LienCubicKE::LienCubicKE ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateK("k", mesh_) + mesh_ ), epsilon_ ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateEpsilon("epsilon", mesh_) + mesh_ ), eta_ @@ -182,142 +245,34 @@ LienCubicKE::LienCubicKE *sqrt(2.0*magSqr(0.5*(fvc::grad(U) - T(fvc::grad(U))))) ), Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))), - fEta_(A2_ + pow(eta_, 3.0)), + fEta_(A2_ + pow3(eta_)), C5viscosity_ ( - - 2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) + -2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) *( magSqr(fvc::grad(U) + T(fvc::grad(U))) - magSqr(fvc::grad(U) - T(fvc::grad(U))) ) - ), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ), - - nonlinearStress_ - ( - "nonlinearStress", - // quadratic terms - symm - ( - pow(k_, 3.0)/sqr(epsilon_) - *( - Ctau1_/fEta_ - *( - (fvc::grad(U) & fvc::grad(U)) - + (fvc::grad(U) & fvc::grad(U))().T() - ) - + Ctau2_/fEta_*(fvc::grad(U) & T(fvc::grad(U))) - + Ctau3_/fEta_*(T(fvc::grad(U)) & fvc::grad(U)) - ) - // cubic term C4 - - 20.0*pow(k_, 4.0)/pow(epsilon_, 3.0) - *pow(Cmu_, 3.0) - *( - ((fvc::grad(U) & fvc::grad(U)) & T(fvc::grad(U))) - + ((fvc::grad(U) & T(fvc::grad(U))) & T(fvc::grad(U))) - - ((T(fvc::grad(U)) & fvc::grad(U)) & fvc::grad(U)) - - ((T(fvc::grad(U)) & T(fvc::grad(U))) & fvc::grad(U)) - ) - ) ) { bound(k_, kMin_); // already bounded: bound(epsilon_, epsilonMin_); - nut_ = Cmu_*sqr(k_)/epsilon_ + C5viscosity_; - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + correctNonlinearStress(fvc::grad(U)); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> LienCubicKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)) + nonlinearStress_, - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LienCubicKE::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) + nonlinearStress_ - ) - ); -} - - -tmp<fvVectorMatrix> LienCubicKE::divDevReff(volVectorField& U) const -{ - return - ( - fvc::div(nonlinearStress_) - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> LienCubicKE::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - fvc::div(rho*nonlinearStress_) - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool LienCubicKE::read() { - if (RASModel::read()) + if (nonlinearEddyViscosity<incompressible::RASModel>::read()) { C1_.readIfPresent(coeffDict()); C2_.readIfPresent(coeffDict()); @@ -341,7 +296,7 @@ bool LienCubicKE::read() void LienCubicKE::correct() { - RASModel::correct(); + nonlinearEddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -404,38 +359,14 @@ void LienCubicKE::correct() eta_ = k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU + gradU.T()))); ksi_ = k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU - gradU.T()))); Cmu_ = 2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_)); - fEta_ = A2_ + pow(eta_, 3.0); + fEta_ = A2_ + pow3(eta_); C5viscosity_ = - - 2.0*pow(Cmu_, 3.0)*pow(k_, 4.0)/pow(epsilon_, 3.0) + -2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) *(magSqr(gradU + gradU.T()) - magSqr(gradU - gradU.T())); - nut_ = Cmu_*sqr(k_)/epsilon_ + C5viscosity_; - nut_.correctBoundaryConditions(); - - nonlinearStress_ = symm - ( - // quadratic terms - pow(k_, 3.0)/sqr(epsilon_)* - ( - Ctau1_/fEta_* - ( - (gradU & gradU) - + (gradU & gradU)().T() - ) - + Ctau2_/fEta_*(gradU & gradU.T()) - + Ctau3_/fEta_*(gradU.T() & gradU) - ) - // cubic term C4 - - 20.0*pow(k_, 4.0)/pow(epsilon_, 3.0) - *pow(Cmu_, 3.0) - *( - ((gradU & gradU) & gradU.T()) - + ((gradU & gradU.T()) & gradU.T()) - - ((gradU.T() & gradU) & gradU) - - ((gradU.T() & gradU.T()) & gradU) - ) - ); + correctNut(); + correctNonlinearStress(gradU); } diff --git a/src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.H similarity index 81% rename from src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.H index 9367a766efc..411244cc7fd 100644 --- a/src/turbulenceModels/incompressible/RAS/LienCubicKE/LienCubicKE.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKE/LienCubicKE.H @@ -38,7 +38,8 @@ SourceFiles #ifndef LienCubicKE_H #define LienCubicKE_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "nonlinearEddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -55,7 +56,7 @@ namespace RASModels class LienCubicKE : - public RASModel + public nonlinearEddyViscosity<incompressible::RASModel> { protected: @@ -87,9 +88,11 @@ protected: volScalarField fEta_; volScalarField C5viscosity_; - volScalarField nut_; - volSymmTensorField nonlinearStress_; + // Protected Member Functions + + virtual void correctNut(); + virtual void correctNonlinearStress(const volTensorField& gradU); public: @@ -102,11 +105,14 @@ public: //- Construct from components LienCubicKE ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -117,11 +123,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -153,27 +156,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.C similarity index 69% rename from src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.C index 12a05b4feff..cef1ad5bf31 100644 --- a/src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.C @@ -24,11 +24,11 @@ License \*---------------------------------------------------------------------------*/ #include "LienCubicKELowRe.H" +#include "wallDist.H" #include "wallFvPatch.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -43,18 +43,90 @@ namespace RASModels defineTypeNameAndDebug(LienCubicKELowRe, 0); addToRunTimeSelectionTable(RASModel, LienCubicKELowRe, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +tmp<volScalarField> LienCubicKELowRe::fMu() +{ + return + (scalar(1) - exp(-Am_*yStar_)) + /(scalar(1) - exp(-Aepsilon_*yStar_) + SMALL); +} + + +void LienCubicKELowRe::correctNut() +{ + nut_ = + Cmu_*fMu()*sqr(k_)/epsilon_ + // C5 term, implicit + + max + ( + C5viscosity_, + dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) + ); + + nut_.correctBoundaryConditions(); +} + + +void LienCubicKELowRe::correctNonlinearStress(const volTensorField& gradU) +{ + nonlinearStress_ = symm + ( + // quadratic terms + pow3(k_)/sqr(epsilon_) + *( + Ctau1_/fEta_ + *( + (gradU & gradU) + + (gradU & gradU)().T() + ) + + Ctau2_/fEta_*(gradU & gradU.T()) + + Ctau3_/fEta_*(gradU.T() & gradU) + ) + // cubic term C4 + - 20.0*pow4(k_)/pow3(epsilon_) + *pow3(Cmu_) + *( + ((gradU & gradU) & gradU.T()) + + ((gradU & gradU.T()) & gradU.T()) + - ((gradU.T() & gradU) & gradU) + - ((gradU.T() & gradU.T()) & gradU) + ) + // cubic term C5, explicit part + + min + ( + C5viscosity_, + dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) + )*gradU + ); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // LienCubicKELowRe::LienCubicKELowRe ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + nonlinearEddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), C1_ ( @@ -196,7 +268,7 @@ LienCubicKELowRe::LienCubicKELowRe ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -209,7 +281,7 @@ LienCubicKELowRe::LienCubicKELowRe ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -235,156 +307,32 @@ LienCubicKELowRe::LienCubicKELowRe C5viscosity_ ( - -2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) + -2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) *( - magSqr(fvc::grad(U) + T(fvc::grad(U))) - - magSqr(fvc::grad(U) - T(fvc::grad(U))) + magSqr(fvc::grad(U) + T(fvc::grad(U))) + - magSqr(fvc::grad(U) - T(fvc::grad(U))) ) ), - yStar_(sqrt(k_)*y_/nu() + SMALL), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateLowReNut("nut", mesh_) - ), - - nonlinearStress_ - ( - "nonlinearStress", - symm - ( - // quadratic terms - pow3(k_)/sqr(epsilon_) - *( - Ctau1_/fEta_ - *( - (fvc::grad(U) & fvc::grad(U)) - + (fvc::grad(U) & fvc::grad(U))().T() - ) - + Ctau2_/fEta_*(fvc::grad(U) & T(fvc::grad(U))) - + Ctau3_/fEta_*(T(fvc::grad(U)) & fvc::grad(U)) - ) - // cubic term C4 - - 20.0*pow4(k_)/pow3(epsilon_) - *pow3(Cmu_) - *( - ((fvc::grad(U) & fvc::grad(U)) & T(fvc::grad(U))) - + ((fvc::grad(U) & T(fvc::grad(U))) & T(fvc::grad(U))) - - ((T(fvc::grad(U)) & fvc::grad(U)) & fvc::grad(U)) - - ((T(fvc::grad(U)) & T(fvc::grad(U))) & fvc::grad(U)) - ) - // cubic term C5, explicit part - + min - ( - C5viscosity_, - dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) - )*fvc::grad(U) - ) - ) + yStar_(sqrt(k_)*y_/nu() + SMALL) { bound(k_, kMin_); // already bounded: bound(epsilon_, epsilonMin_); - nut_ = Cmu_ - * (scalar(1) - exp(-Am_*yStar_)) - / (scalar(1) - exp(-Aepsilon_*yStar_) + SMALL) - * sqr(k_)/epsilon_ - // cubic term C5, implicit part - + max - ( - C5viscosity_, - dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) - ); - - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + correctNonlinearStress(fvc::grad(U)); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> LienCubicKELowRe::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)) + nonlinearStress_, - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LienCubicKELowRe::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) + nonlinearStress_ - ) - ); -} - - -tmp<fvVectorMatrix> LienCubicKELowRe::divDevReff(volVectorField& U) const -{ - return - ( - fvc::div(nonlinearStress_) - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> LienCubicKELowRe::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - fvc::div(rho*nonlinearStress_) - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool LienCubicKELowRe::read() { - if (RASModel::read()) + if (nonlinearEddyViscosity<incompressible::RASModel>::read()) { C1_.readIfPresent(coeffDict()); C2_.readIfPresent(coeffDict()); @@ -413,7 +361,7 @@ bool LienCubicKELowRe::read() void LienCubicKELowRe::correct() { - RASModel::correct(); + nonlinearEddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -429,11 +377,6 @@ void LienCubicKELowRe::correct() yStar_ = sqrt(k_)*y_/nu() + SMALL; tmp<volScalarField> Rt = sqr(k_)/(nu()*epsilon_); - const volScalarField fMu - ( - (scalar(1) - exp(-Am_*yStar_)) - /(scalar(1) - exp(-Aepsilon_*yStar_) + SMALL) - ); const volScalarField f2 ( scalar(1) - 0.3*exp(-sqr(Rt)) @@ -442,7 +385,7 @@ void LienCubicKELowRe::correct() volScalarField G ( GName(), - Cmu_*fMu*sqr(k_)/epsilon_*S2 - (nonlinearStress_ && gradU) + Cmu_*fMu()*sqr(k_)/epsilon_*S2 - (nonlinearStress_ && gradU) ); // Dissipation equation @@ -491,50 +434,14 @@ void LienCubicKELowRe::correct() eta_ = k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU + gradU.T()))); ksi_ = k_/epsilon_*sqrt(2.0*magSqr(0.5*(gradU - gradU.T()))); Cmu_ = 2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_)); - fEta_ = A2_ + pow(eta_, 3.0); + fEta_ = A2_ + pow3(eta_); C5viscosity_ = - - 2.0*pow(Cmu_, 3.0)*pow(k_, 4.0)/pow(epsilon_, 3.0) + -2.0*pow3(Cmu_)*pow4(k_)/pow3(epsilon_) *(magSqr(gradU + gradU.T()) - magSqr(gradU - gradU.T())); - nut_ = - Cmu_*fMu*sqr(k_)/epsilon_ - // C5 term, implicit - + max - ( - C5viscosity_, - dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) - ); - - nonlinearStress_ = symm - ( - // quadratic terms - pow(k_, 3.0)/sqr(epsilon_) - *( - Ctau1_/fEta_ - *( - (gradU & gradU) - + (gradU & gradU)().T() - ) - + Ctau2_/fEta_*(gradU & gradU.T()) - + Ctau3_/fEta_*(gradU.T() & gradU) - ) - // cubic term C4 - - 20.0*pow(k_, 4.0)/pow(epsilon_, 3.0) - *pow(Cmu_, 3.0) - *( - ((gradU & gradU) & gradU.T()) - + ((gradU & gradU.T()) & gradU.T()) - - ((gradU.T() & gradU) & gradU) - - ((gradU.T() & gradU.T()) & gradU) - ) - // cubic term C5, explicit part - + min - ( - C5viscosity_, - dimensionedScalar("0", C5viscosity_.dimensions(), 0.0) - )*gradU - ); + correctNut(); + correctNonlinearStress(gradU); } diff --git a/src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.H similarity index 84% rename from src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.H index a7dcac84c2c..40faf67621d 100644 --- a/src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowRe.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowRe.H @@ -53,8 +53,8 @@ SourceFiles #ifndef LienCubicKELowRe_H #define LienCubicKELowRe_H -#include "RASModel.H" -#include "wallDist.H" +#include "turbulentTransportModel.H" +#include "nonlinearEddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -71,7 +71,7 @@ namespace RASModels class LienCubicKELowRe : - public RASModel + public nonlinearEddyViscosity<incompressible::RASModel> { protected: @@ -117,9 +117,13 @@ protected: volScalarField yStar_; - volScalarField nut_; - volSymmTensorField nonlinearStress_; + // Protected Member Functions + + tmp<volScalarField> fMu(); + + virtual void correctNut(); + virtual void correctNonlinearStress(const volTensorField& gradU); public: @@ -132,11 +136,14 @@ public: //- Construct from components LienCubicKELowRe ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -147,11 +154,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -183,27 +187,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowReSetWallDissipation.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowReSetWallDissipation.H similarity index 100% rename from src/turbulenceModels/incompressible/RAS/LienCubicKELowRe/LienCubicKELowReSetWallDissipation.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienCubicKELowRe/LienCubicKELowReSetWallDissipation.H diff --git a/src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C similarity index 72% rename from src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C index 5b4c77477cd..65880a8a825 100644 --- a/src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.C @@ -24,11 +24,11 @@ License \*---------------------------------------------------------------------------*/ #include "LienLeschzinerLowRe.H" +#include "wallDist.H" #include "wallFvPatch.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -43,18 +43,48 @@ namespace RASModels defineTypeNameAndDebug(LienLeschzinerLowRe, 0); addToRunTimeSelectionTable(RASModel, LienLeschzinerLowRe, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +tmp<volScalarField> LienLeschzinerLowRe::fMu() +{ + return + (scalar(1) - exp(-Am_*yStar_)) + /(scalar(1) - exp(-Aepsilon_*yStar_) + SMALL); +} + + +void LienLeschzinerLowRe::correctNut() +{ + nut_ = Cmu_*fMu()*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // LienLeschzinerLowRe::LienLeschzinerLowRe ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), C1_ ( @@ -142,7 +172,7 @@ LienLeschzinerLowRe::LienLeschzinerLowRe ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -155,7 +185,7 @@ LienLeschzinerLowRe::LienLeschzinerLowRe ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -166,107 +196,24 @@ LienLeschzinerLowRe::LienLeschzinerLowRe y_(wallDist::New(mesh_).y()), - yStar_(sqrt(k_)*y_/nu() + SMALL), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateLowReNut("nut", mesh_) - ) + yStar_(sqrt(k_)*y_/nu() + SMALL) { bound(k_, kMin_); bound(epsilon_, epsilonMin_); - nut_ = Cmu_*(scalar(1) - exp(-Am_*yStar_)) - /(scalar(1) - exp(-Aepsilon_*yStar_) + SMALL)*sqr(k_) - /(epsilon_); - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> LienLeschzinerLowRe::R() const -{ - tmp<volTensorField> gradU = fvc::grad(U_); - - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(gradU), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LienLeschzinerLowRe::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LienLeschzinerLowRe::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*T(fvc::grad(U))) - ); -} - - -tmp<fvVectorMatrix> LienLeschzinerLowRe::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool LienLeschzinerLowRe::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { C1_.readIfPresent(coeffDict()); C2_.readIfPresent(coeffDict()); @@ -289,7 +236,7 @@ bool LienLeschzinerLowRe::read() void LienLeschzinerLowRe::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -306,15 +253,9 @@ void LienLeschzinerLowRe::correct() yStar_ = sqrt(k_)*y_/nu() + SMALL; tmp<volScalarField> Rt = sqr(k_)/(nu()*epsilon_); - volScalarField fMu - ( - (scalar(1) - exp(-Am_*yStar_)) - /(scalar(1) - exp(-Aepsilon_*yStar_) + SMALL) - ); - const volScalarField f2(scalar(1) - 0.3*exp(-sqr(Rt))); - volScalarField G(GName(), Cmu_*fMu*sqr(k_)/epsilon_*S2); + volScalarField G(GName(), Cmu_*fMu()*sqr(k_)/epsilon_*S2); // Dissipation equation @@ -357,9 +298,7 @@ void LienLeschzinerLowRe::correct() solve(kEqn); bound(k_, kMin_); - - // Re-calculate viscosity - nut_ = Cmu_*fMu*sqr(k_)/epsilon_; + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H similarity index 82% rename from src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H index c9d664ce0d4..206abb09b25 100644 --- a/src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowRe.H @@ -39,8 +39,8 @@ SourceFiles #ifndef LienLeschzinerLowRe_H #define LienLeschzinerLowRe_H -#include "RASModel.H" -#include "wallDist.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -57,7 +57,7 @@ namespace RASModels class LienLeschzinerLowRe : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -90,7 +90,12 @@ protected: volScalarField yStar_; - volScalarField nut_; + + // Protected Member Functions + + tmp<volScalarField> fMu(); + + virtual void correctNut(); public: @@ -102,11 +107,14 @@ public: //- Construct from components LienLeschzinerLowRe ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -117,11 +125,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -153,27 +158,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowReSetWallDissipation.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowReSetWallDissipation.H similarity index 100% rename from src/turbulenceModels/incompressible/RAS/LienLeschzinerLowRe/LienLeschzinerLowReSetWallDissipation.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/LienLeschzinerLowRe/LienLeschzinerLowReSetWallDissipation.H diff --git a/src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.C similarity index 71% rename from src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.C index 12cbbfcd8ec..1dd88649828 100644 --- a/src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.C @@ -24,10 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "RNGkEpsilon.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -42,18 +41,40 @@ namespace RASModels defineTypeNameAndDebug(RNGkEpsilon, 0); addToRunTimeSelectionTable(RASModel, RNGkEpsilon, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void RNGkEpsilon::correctNut() +{ + nut_ = Cmu_*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // RNGkEpsilon::RNGkEpsilon ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), Cmu_ ( @@ -123,122 +144,43 @@ RNGkEpsilon::RNGkEpsilon ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateK("k", mesh_) + mesh_ ), epsilon_ ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateEpsilon("epsilon", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) + mesh_ ) { bound(k_, kMin_); bound(epsilon_, epsilonMin_); - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> RNGkEpsilon::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> RNGkEpsilon::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> RNGkEpsilon::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> RNGkEpsilon::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool RNGkEpsilon::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { Cmu_.readIfPresent(coeffDict()); C1_.readIfPresent(coeffDict()); @@ -259,7 +201,7 @@ bool RNGkEpsilon::read() void RNGkEpsilon::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -286,7 +228,6 @@ void RNGkEpsilon::correct() - fvm::laplacian(DepsilonEff(), epsilon_) == (C1_ - R)*G*epsilon_/k_ - //- fvm::SuSp(R*G/k_, epsilon_) - fvm::Sp(C2_*epsilon_/k_, epsilon_) ); @@ -313,10 +254,7 @@ void RNGkEpsilon::correct() solve(kEqn); bound(k_, kMin_); - - // Re-calculate viscosity - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.H similarity index 83% rename from src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.H index caaa4f2d84a..1d32e4aaadc 100644 --- a/src/turbulenceModels/incompressible/RAS/RNGkEpsilon/RNGkEpsilon.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/RNGkEpsilon/RNGkEpsilon.H @@ -60,7 +60,8 @@ SourceFiles #ifndef RNGkEpsilon_H #define RNGkEpsilon_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -77,7 +78,7 @@ namespace RASModels class RNGkEpsilon : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -99,7 +100,11 @@ protected: volScalarField k_; volScalarField epsilon_; - volScalarField nut_; + + + // Protected Member Functions + + virtual void correctNut(); public: @@ -112,11 +117,14 @@ public: //- Construct from components RNGkEpsilon ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -127,11 +135,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -163,27 +168,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C similarity index 92% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C index c24937c520d..fa2652446bc 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,11 +24,10 @@ License \*---------------------------------------------------------------------------*/ #include "fWallFunctionFvPatchScalarField.H" -#include "RASModel.H" +#include "v2f.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "wallFvPatch.H" -#include "v2f.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -174,13 +173,19 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() return; } - const label patchI = patch().index(); + const label patchi = patch().index(); - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); + const turbulenceModel& turbulence = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); const v2f& v2fModel = refCast<const v2f>(turbulence); - const scalarField& y = v2fModel.y()[patchI]; + const scalarField& y = v2fModel.y()[patchi]; const tmp<volScalarField> tk = v2fModel.k(); const volScalarField& k = tk(); @@ -191,8 +196,8 @@ void fWallFunctionFvPatchScalarField::updateCoeffs() const tmp<volScalarField> tv2 = v2fModel.v2(); const volScalarField& v2 = tv2(); - const tmp<volScalarField> tnu = v2fModel.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; + const tmp<scalarField> tnuw = turbulence.nu(patchi); + const scalarField& nuw = tnuw(); const scalar Cmu25 = pow025(Cmu_); diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H similarity index 97% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H index b5d92d94213..d99d1610264 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,10 +22,10 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::RASModels::fWallFunctionFvPatchScalarField + Foam::RASModels::fWallFunctionFvPatchScalarField Group - grpIcoWallFunctions + grpWallFunctions Description This boundary condition provides a turbulence damping function, f, wall diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C similarity index 92% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C index 19ae103d79f..c2df8e4a94e 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "v2WallFunctionFvPatchScalarField.H" -#include "RASModel.H" +#include "turbulenceModel.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "addToRunTimeSelectionTable.H" @@ -173,17 +173,23 @@ void v2WallFunctionFvPatchScalarField::updateCoeffs() return; } - const label patchI = patch().index(); + const label patchi = patch().index(); - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbulence.y()[patchI]; + const turbulenceModel& turbulence = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + const scalarField& y = turbulence.y()[patchi]; const tmp<volScalarField> tk = turbulence.k(); const volScalarField& k = tk(); - const tmp<volScalarField> tnu = turbulence.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; + const tmp<scalarField> tnuw = turbulence.nu(patchi); + const scalarField& nuw = tnuw(); const scalar Cmu25 = pow025(Cmu_); diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H similarity index 97% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H index a0a8cde8e71..e4e8fdafa06 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,10 +22,10 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::RASModels::v2WallFunctionFvPatchScalarField + Foam::RASModels::v2WallFunctionFvPatchScalarField Group - grpIcoWallFunctions + grpWallFunctions Description This boundary condition provides a turbulence stress normal to streamlines diff --git a/src/turbulenceModels/incompressible/RAS/include/nonLinearWallFunctionsI.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/nonLinearWallFunctionsI.H similarity index 98% rename from src/turbulenceModels/incompressible/RAS/include/nonLinearWallFunctionsI.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/nonLinearWallFunctionsI.H index 90b21921b79..46bf81176f4 100644 --- a/src/turbulenceModels/incompressible/RAS/include/nonLinearWallFunctionsI.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/nonLinearWallFunctionsI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/incompressible/RAS/include/wallDissipationI.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallDissipationI.H similarity index 95% rename from src/turbulenceModels/incompressible/RAS/include/wallDissipationI.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallDissipationI.H index 3e60bffec7a..a5193336223 100644 --- a/src/turbulenceModels/incompressible/RAS/include/wallDissipationI.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallDissipationI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/incompressible/RAS/include/wallNonlinearViscosityI.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallNonlinearViscosityI.H similarity index 97% rename from src/turbulenceModels/incompressible/RAS/include/wallNonlinearViscosityI.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallNonlinearViscosityI.H index 6b1080d2a57..b6936b49c2e 100644 --- a/src/turbulenceModels/incompressible/RAS/include/wallNonlinearViscosityI.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/include/wallNonlinearViscosityI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/Changes b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/Changes new file mode 100644 index 00000000000..51cb377b02b --- /dev/null +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/Changes @@ -0,0 +1,144 @@ +turbulenceModelName -> propertiesName +modelName -> type + +* Header +*** Includes + - Remove + #include "RASModel.H" + + Add + #include "turbulentTransportModel.H" + #include "eddyViscosity.H" +*** Base class + - Change + RASModel -> eddyViscosity<RASModel> +*** Protected data + - Remove + volScalarField nut_; +*** Constructor + + Add + const geometricOneField& alpha, + const geometricOneField& rho, + . + const surfaceScalarField& alphaRhoPhi, + +*** Private member functions + + Add + // Protected Member Functions + + virtual void correctNut(); + +*** Member functions + - Remove + //- Return the turbulence viscosity + virtual tmp<volScalarField> nut() const + { + return nut_; + } + + //- Return the Reynolds stress tensor + virtual tmp<volSymmTensorField> R() const; + + //- Return the effective stress tensor including the laminar stress + virtual tmp<volSymmTensorField> devReff() const; + + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; + + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevRhoReff + ( + const volScalarField& rho, + volVectorField& U + ) const; + + + Move to top + //- Read RASProperties dictionary + virtual bool read(); + +* Source +*** Includes + + Add + #include "bound.H" + - Remove + #include "backwardsCompatibilityWallFunctions.H" +*** Constructor + + Add arguments + const geometricOneField& alpha, + const geometricOneField& rho, + . + const surfaceScalarField& alphaRhoPhi, + + Replace + RASModel(modelName, U, phi, transport, turbulenceModelName), + with + eddyViscosity<RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + Replace + autoCreate.*mesh_) -> mesh_ + NO_READ -> MUST_READ + - Remove + nut_ + ( + IOobject + ( + "nut", + runTime_.timeName(), + mesh_, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + autoCreateNut("nut", mesh_) + ) + + Replace + nut_ = k_/omega_; + nut_.correctBoundaryConditions(); + + printCoeffs(); + + with + + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } +*** Member functions + + Move read to top + + Add after read +void kOmega::correctNut() +{ + .... + nut_.correctBoundaryConditions(); +} + - Remove + //- Return the Reynolds stress tensor + virtual tmp<volSymmTensorField> R() const; + + //- Return the effective stress tensor including the laminar stress + virtual tmp<volSymmTensorField> devReff() const; + + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; + + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevRhoReff + ( + const volScalarField& rho, + volVectorField& U + ) const; + +*** correct() + - Replace + // Re-calculate viscosity + nut_ = Cmu_*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); + with + correctNut(); diff --git a/src/turbulenceModels/incompressible/RAS/kOmega/kOmega.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.C similarity index 68% rename from src/turbulenceModels/incompressible/RAS/kOmega/kOmega.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.C index 8394f986e97..12a95d07f6b 100644 --- a/src/turbulenceModels/incompressible/RAS/kOmega/kOmega.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.C @@ -24,10 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "kOmega.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -42,18 +41,40 @@ namespace RASModels defineTypeNameAndDebug(kOmega, 0); addToRunTimeSelectionTable(RASModel, kOmega, dictionary); +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void kOmega::correctNut() +{ + nut_ = k_/omega_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // kOmega::kOmega ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), Cmu_ ( @@ -105,121 +126,43 @@ kOmega::kOmega ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateK("k", mesh_) + mesh_ ), omega_ ( IOobject ( - "omega", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateOmega("omega", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", + IOobject::groupName("omega", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateNut("nut", mesh_) + mesh_ ) { bound(k_, kMin_); bound(omega_, omegaMin_); - nut_ = k_/omega_; - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> kOmega::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kOmega::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kOmega::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> kOmega::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool kOmega::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { Cmu_.readIfPresent(coeffDict()); beta_.readIfPresent(coeffDict()); @@ -237,7 +180,7 @@ bool kOmega::read() void kOmega::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -283,10 +226,7 @@ void kOmega::correct() solve(kEqn); bound(k_, kMin_); - - // Re-calculate viscosity - nut_ = k_/omega_; - nut_.correctBoundaryConditions(); + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/kOmega/kOmega.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.H similarity index 84% rename from src/turbulenceModels/incompressible/RAS/kOmega/kOmega.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.H index f2c091305c1..a0b6b732cff 100644 --- a/src/turbulenceModels/incompressible/RAS/kOmega/kOmega.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kOmega/kOmega.H @@ -62,7 +62,8 @@ SourceFiles #ifndef kOmega_H #define kOmega_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -79,7 +80,7 @@ namespace RASModels class kOmega : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -99,7 +100,11 @@ protected: volScalarField k_; volScalarField omega_; - volScalarField nut_; + + + // Protected Member Functions + + virtual void correctNut(); public: @@ -107,16 +112,20 @@ public: //- Runtime type information TypeName("kOmega"); + // Constructors //- Construct from components kOmega ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -127,11 +136,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -182,27 +188,8 @@ public: ); } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C similarity index 87% rename from src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C index b7e8231ca34..a32ce3b4afe 100644 --- a/src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.C @@ -24,10 +24,10 @@ License \*---------------------------------------------------------------------------*/ #include "kkLOmega.H" +#include "bound.H" +#include "wallDist.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -42,7 +42,7 @@ namespace RASModels defineTypeNameAndDebug(kkLOmega, 0); addToRunTimeSelectionTable(RASModel, kkLOmega, dictionary); -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // tmp<volScalarField> kkLOmega::fv(const volScalarField& Ret) const { @@ -200,18 +200,40 @@ tmp<volScalarField> kkLOmega::gammaNAT } +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void kkLOmega::correctNut() +{ + nut_ = kt_/omega_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // kkLOmega::kkLOmega ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), A0_ ( @@ -460,49 +482,37 @@ kkLOmega::kkLOmega ( IOobject ( - "kt", + IOobject::groupName("kt", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateK("kt", mesh_) + mesh_ ), omega_ ( IOobject ( - "omega", + IOobject::groupName("omega", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateOmega("omega", mesh_) + mesh_ ), kl_ ( IOobject ( - "kl", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("kl", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", + IOobject::groupName("kl", U.group()), runTime_.timeName(), mesh_, - IOobject::NO_READ, + IOobject::MUST_READ, IOobject::AUTO_WRITE ), - autoCreateNut("nut", mesh_) + mesh_ ), y_(wallDist::New(mesh_).y()) { @@ -510,85 +520,22 @@ kkLOmega::kkLOmega bound(kl_, kMin_); bound(omega_, omegaMin_); - nut_ = kt_/(omega_ + omegaMin_); - nut_.correctBoundaryConditions(); + if (type == typeName) + { + // This is only an approximate nut, so only good for initialization + // not restart + // correctNut(); - printCoeffs(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> kkLOmega::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*(kt_) - nut_*twoSymm(fvc::grad(U_)), - kt_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kkLOmega::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kkLOmega::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> kkLOmega::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool kkLOmega::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { A0_.readIfPresent(coeffDict()); As_.readIfPresent(coeffDict()); @@ -630,7 +577,7 @@ bool kkLOmega::read() void kkLOmega::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -641,7 +588,6 @@ void kkLOmega::correct() const volScalarField kT(kt_ + kl_); const volScalarField lambdaT(sqrt(kT)/(omega_ + omegaMin_)); - const volScalarField lambdaEff(min(Clambda_*y_, lambdaT)); const volScalarField fw @@ -650,9 +596,7 @@ void kkLOmega::correct() ); const volTensorField gradU(fvc::grad(U_)); - const volScalarField omega(sqrt(2.0)*mag(skew(gradU))); - const volScalarField S2(2.0*magSqr(symm(gradU))); const volScalarField ktS(fSS(omega)*fw*kt_); @@ -663,6 +607,7 @@ void kkLOmega::correct() *fINT() *Cmu(sqrt(S2))*sqrt(ktS)*lambdaEff ); + const volScalarField Pkt(nuts*S2); const volScalarField ktL(kt_ - ktS); @@ -674,7 +619,7 @@ void kkLOmega::correct() C11_*fTaul(lambdaEff, ktL)*omega*sqr(lambdaEff) * sqrt(ktL)*lambdaEff/nu() + C12_*BetaTS(ReOmega)*ReOmega*sqr(y_)*omega - , + , 0.5*(kl_ + ktL)/sqrt(S2) ) ); @@ -748,6 +693,7 @@ void kkLOmega::correct() omega_.boundaryField().updateCoeffs(); + // Turbulence specific dissipation rate equation tmp<fvScalarMatrix> omegaEqn ( diff --git a/src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H similarity index 89% rename from src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H index 65a14ce357e..0b45136b895 100644 --- a/src/turbulenceModels/incompressible/RAS/kkLOmega/kkLOmega.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/kkLOmega/kkLOmega.H @@ -80,8 +80,8 @@ SourceFiles #ifndef kkLOmega_H #define kkLOmega_H -#include "RASModel.H" -#include "wallDist.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -98,7 +98,7 @@ namespace RASModels class kkLOmega : - public RASModel + public eddyViscosity<incompressible::RASModel> { // Private memmber functions @@ -180,7 +180,6 @@ protected: volScalarField kt_; volScalarField omega_; volScalarField kl_; - volScalarField nut_; //- Wall distance // Note: different to wall distance in parent RASModel @@ -188,21 +187,30 @@ protected: const volScalarField& y_; + // Protected Member Functions + + virtual void correctNut(); + + public: //- Runtime type information TypeName("kkLOmega"); + // Constructors //- Construct from components kkLOmega ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -213,11 +221,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff(const volScalarField& alphaT) const @@ -274,27 +279,8 @@ public: ); } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.C similarity index 73% rename from src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.C index 5883278c66c..20c71af7bfb 100644 --- a/src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.C @@ -23,10 +23,11 @@ License \*---------------------------------------------------------------------------*/ -#include "NonlinearKEShih.H" -#include "addToRunTimeSelectionTable.H" +#include "nonlinearKEShih.H" +#include "bound.H" #include "wallFvPatch.H" #include "nutkWallFunctionFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -39,21 +40,61 @@ namespace RASModels // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // -defineTypeNameAndDebug(NonlinearKEShih, 0); -addToRunTimeSelectionTable(RASModel, NonlinearKEShih, dictionary); +defineTypeNameAndDebug(nonlinearKEShih, 0); +addToRunTimeSelectionTable(RASModel, nonlinearKEShih, dictionary); + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void nonlinearKEShih::correctNut() +{ + nut_ = Cmu_*sqr(k_)/epsilon_; + #include "wallNonlinearViscosityI.H" +} + + +void nonlinearKEShih::correctNonlinearStress(const volTensorField& gradU) +{ + nonlinearStress_ = symm + ( + pow(k_, 3.0)/sqr(epsilon_) + *( + Ctau1_/fEta_ + *( + (gradU & gradU) + + (gradU & gradU)().T() + ) + + Ctau2_/fEta_*(gradU & T(gradU)) + + Ctau3_/fEta_*(T(gradU) & gradU) + ) + ); +} + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -NonlinearKEShih::NonlinearKEShih +nonlinearKEShih::nonlinearKEShih ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + nonlinearEddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), C1_ ( @@ -169,7 +210,7 @@ NonlinearKEShih::NonlinearKEShih ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -182,7 +223,7 @@ NonlinearKEShih::NonlinearKEShih ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -202,111 +243,25 @@ NonlinearKEShih::NonlinearKEShih *sqrt(2.0*magSqr(0.5*(fvc::grad(U) - T(fvc::grad(U))))) ), Cmu_(2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_))), - fEta_(A2_ + pow(eta_, 3.0)), - - nut_("nut", Cmu_*sqr(k_)/epsilon_), - - nonlinearStress_ - ( - "nonlinearStress", - symm - ( - pow3(k_)/sqr(epsilon_) - *( - Ctau1_/fEta_ - *( - (fvc::grad(U) & fvc::grad(U)) - + (fvc::grad(U) & fvc::grad(U))().T() - ) - + Ctau2_/fEta_*(fvc::grad(U) & T(fvc::grad(U))) - + Ctau3_/fEta_*(T(fvc::grad(U)) & fvc::grad(U)) - ) - ) - ) + fEta_(A2_ + pow(eta_, 3.0)) { bound(k_, kMin_); // already bounded: bound(epsilon_, epsilonMin_); - #include "wallNonlinearViscosityI.H" - - printCoeffs(); + if (type == typeName) + { + correctNut(); + correctNonlinearStress(fvc::grad(U)); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> NonlinearKEShih::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)) + nonlinearStress_, - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> NonlinearKEShih::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) + nonlinearStress_ - ) - ); -} - - -tmp<fvVectorMatrix> NonlinearKEShih::divDevReff(volVectorField& U) const +bool nonlinearKEShih::read() { - return - ( - fvc::div(nonlinearStress_) - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> NonlinearKEShih::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - fvc::div(rho*nonlinearStress_) - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool NonlinearKEShih::read() -{ - if (RASModel::read()) + if (nonlinearEddyViscosity<incompressible::RASModel>::read()) { C1_.readIfPresent(coeffDict()); C2_.readIfPresent(coeffDict()); @@ -331,9 +286,9 @@ bool NonlinearKEShih::read() } -void NonlinearKEShih::correct() +void nonlinearKEShih::correct() { - RASModel::correct(); + nonlinearEddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -397,23 +352,8 @@ void NonlinearKEShih::correct() Cmu_ = 2.0/(3.0*(A1_ + eta_ + alphaKsi_*ksi_)); fEta_ = A2_ + pow(eta_, 3.0); - nut_ = Cmu_*sqr(k_)/epsilon_; - - #include "wallNonlinearViscosityI.H" - - nonlinearStress_ = symm - ( - pow(k_, 3.0)/sqr(epsilon_) - *( - Ctau1_/fEta_ - *( - (gradU & gradU) - + (gradU & gradU)().T() - ) - + Ctau2_/fEta_*(gradU & T(gradU)) - + Ctau3_/fEta_*(T(gradU) & gradU) - ) - ); + correctNut(); + correctNonlinearStress(gradU); } diff --git a/src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.H similarity index 76% rename from src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.H index 10d51669b74..9037328e695 100644 --- a/src/turbulenceModels/incompressible/RAS/NonlinearKEShih/NonlinearKEShih.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/nonlinearKEShih/nonlinearKEShih.H @@ -22,7 +22,7 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::RASModels::NonlinearKEShih + Foam::incompressible::RASModels::nonlinearKEShih Group grpIcoRASTurbulence @@ -32,14 +32,15 @@ Description incompressible flows SourceFiles - NonlinearKEShih.C + nonlinearKEShih.C \*---------------------------------------------------------------------------*/ -#ifndef NonlinearKEShih_H -#define NonlinearKEShih_H +#ifndef nonlinearKEShih_H +#define nonlinearKEShih_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "nonlinearEddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,12 +52,12 @@ namespace RASModels { /*---------------------------------------------------------------------------*\ - Class NonlinearKEShih Declaration + Class nonlinearKEShih Declaration \*---------------------------------------------------------------------------*/ -class NonlinearKEShih +class nonlinearKEShih : - public RASModel + public nonlinearEddyViscosity<incompressible::RASModel> { protected: @@ -90,41 +91,44 @@ protected: volScalarField Cmu_; volScalarField fEta_; - volScalarField nut_; - volSymmTensorField nonlinearStress_; + // Protected Member Functions + + virtual void correctNut(); + virtual void correctNonlinearStress(const volTensorField& gradU); public: //- Runtime type information - TypeName("NonlinearKEShih"); + TypeName("nonlinearKEShih"); + // Constructors //- Construct from components - NonlinearKEShih + nonlinearKEShih ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); //- Destructor - virtual ~NonlinearKEShih() + virtual ~nonlinearKEShih() {} // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -156,27 +160,8 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/qZeta/qZeta.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C similarity index 72% rename from src/turbulenceModels/incompressible/RAS/qZeta/qZeta.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C index c6b20e54f85..7d62a625967 100644 --- a/src/turbulenceModels/incompressible/RAS/qZeta/qZeta.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.C @@ -24,10 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "qZeta.H" +#include "bound.H" #include "addToRunTimeSelectionTable.H" -#include "backwardsCompatibilityWallFunctions.H" - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -68,18 +67,38 @@ tmp<volScalarField> qZeta::f2() const } +void qZeta::correctNut() +{ + nut_ = Cmu_*fMu()*sqr(k_)/epsilon_; + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // qZeta::qZeta ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), Cmu_ ( @@ -127,14 +146,14 @@ qZeta::qZeta ) ), - qMin_("qMin", dimVelocity, SMALL), - zetaMin_("zetaMin", dimVelocity/dimTime, SMALL), + qMin_("qMin", sqrt(kMin_)), + zetaMin_("zetaMin", epsilonMin_/(2*qMin_)), k_ ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -147,7 +166,7 @@ qZeta::qZeta ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -160,13 +179,13 @@ qZeta::qZeta ( IOobject ( - "q", + IOobject::groupName("q", U.group()), runTime_.timeName(), mesh_, IOobject::NO_READ, IOobject::AUTO_WRITE ), - sqrt(k_), + sqrt(bound(k_, kMin_)), k_.boundaryField().types() ), @@ -174,113 +193,31 @@ qZeta::qZeta ( IOobject ( - "zeta", + IOobject::groupName("zeta", U.group()), runTime_.timeName(), mesh_, IOobject::NO_READ, IOobject::AUTO_WRITE ), - epsilon_/(2.0*bound(q_, qMin_)), + bound(epsilon_, epsilonMin_)/(2.0*q_), epsilon_.boundaryField().types() - ), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) ) { - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - // already bounded: bound(q_, qMin_); bound(zeta_, zetaMin_); - nut_ = Cmu_*fMu()*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> qZeta::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> qZeta::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> qZeta::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> qZeta::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool qZeta::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { Cmu_.readIfPresent(coeffDict()); C1_.readIfPresent(coeffDict()); @@ -302,7 +239,7 @@ bool qZeta::read() void qZeta::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -356,10 +293,7 @@ void qZeta::correct() epsilon_ = 2*q_*zeta_; epsilon_.correctBoundaryConditions(); - - // Re-calculate viscosity - nut_ = Cmu_*fMu()*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/qZeta/qZeta.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.H similarity index 75% rename from src/turbulenceModels/incompressible/RAS/qZeta/qZeta.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.H index dc9e1f6b577..9393e0237a3 100644 --- a/src/turbulenceModels/incompressible/RAS/qZeta/qZeta.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/qZeta/qZeta.H @@ -52,7 +52,8 @@ SourceFiles #ifndef qZeta_H #define qZeta_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -69,7 +70,7 @@ namespace RASModels class qZeta : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -98,13 +99,12 @@ protected: volScalarField q_; volScalarField zeta_; - volScalarField nut_; - // Protected Member Functions tmp<volScalarField> fMu() const; tmp<volScalarField> f2() const; + virtual void correctNut(); public: @@ -117,11 +117,14 @@ public: //- Construct from components qZeta ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -132,37 +135,31 @@ public: // Member Functions - // Access - - //- Return the lower allowable limit for q (default: SMALL) - const dimensionedScalar& qMin() const - { - return qMin_; - } - - //- Return the lower allowable limit for zeta (default: SMALL) - const dimensionedScalar& zetaMin() const - { - return zetaMin_; - } + //- Read RASProperties dictionary + virtual bool read(); - //- Allow qMin to be changed - dimensionedScalar& qMin() - { - return qMin_; - } + //- Return the lower allowable limit for q (default: SMALL) + const dimensionedScalar& qMin() const + { + return qMin_; + } - //- Allow zetaMin to be changed - dimensionedScalar& zetaMin() - { - return zetaMin_; - } + //- Return the lower allowable limit for zeta (default: SMALL) + const dimensionedScalar& zetaMin() const + { + return zetaMin_; + } + //- Allow qMin to be changed + dimensionedScalar& qMin() + { + return qMin_; + } - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const + //- Allow zetaMin to be changed + dimensionedScalar& zetaMin() { - return nut_; + return zetaMin_; } //- Return the effective diffusivity for q @@ -195,9 +192,6 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - virtual const volScalarField& q() const { return q_; @@ -208,24 +202,8 @@ public: return zeta_; } - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/v2f/v2f.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.C similarity index 74% rename from src/turbulenceModels/incompressible/RAS/v2f/v2f.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.C index 8b5ad858d09..5ad4914970a 100644 --- a/src/turbulenceModels/incompressible/RAS/v2f/v2f.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "v2f.H" +#include "bound.H" #include "fixedValueFvPatchField.H" #include "zeroGradientFvPatchField.H" #include "addToRunTimeSelectionTable.H" @@ -44,37 +45,6 @@ addToRunTimeSelectionTable(RASModel, v2f, dictionary); // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -wordList v2f::RBoundaryTypes() const -{ - const volScalarField::GeometricBoundaryField& bf(k_.boundaryField()); - - wordList bTypes - ( - bf.size(), - zeroGradientFvPatchField<symmTensor>::typeName - ); - - forAll(bf, patchI) - { - if (bf[patchI].fixesValue()) - { - bTypes[patchI] = fixedValueFvPatchField<symmTensor>::typeName; - } - } - - return bTypes; -} - - -tmp<volScalarField> v2f::davidsonCorrectNut -( - const tmp<volScalarField>& value -) const -{ - return min(CmuKEps_*sqr(k_)/epsilon_, value); -} - - tmp<volScalarField> v2f::Ts() const { return max(k_/epsilon_, 6.0*sqrt(nu()/epsilon_)); @@ -87,18 +57,38 @@ tmp<volScalarField> v2f::Ls() const } +void v2f::correctNut() +{ + nut_ = min(CmuKEps_*sqr(k_)/epsilon_, Cmu_*v2_*Ts()); + nut_.correctBoundaryConditions(); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // v2f::v2f ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - RASModel(modelName, U, phi, transport, turbulenceModelName), + eddyViscosity<incompressible::RASModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), Cmu_ ( @@ -186,7 +176,7 @@ v2f::v2f ( IOobject ( - "k", + IOobject::groupName("k", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -198,7 +188,7 @@ v2f::v2f ( IOobject ( - "epsilon", + IOobject::groupName("epsilon", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -210,7 +200,7 @@ v2f::v2f ( IOobject ( - "v2", + IOobject::groupName("v2", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -222,19 +212,7 @@ v2f::v2f ( IOobject ( - "f", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - nut_ - ( - IOobject - ( - "nut", + IOobject::groupName("f", U.group()), runTime_.timeName(), mesh_, IOobject::MUST_READ, @@ -250,85 +228,19 @@ v2f::v2f bound(v2_, v2Min_); bound(f_, fMin_); - nut_ = davidsonCorrectNut(Cmu_*v2_*Ts()); - nut_.correctBoundaryConditions(); - - printCoeffs(); + if (type == typeName) + { + correctNut(); + printCoeffs(type); + } } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<volSymmTensorField> v2f::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - RBoundaryTypes() - ) - ); -} - - -tmp<volSymmTensorField> v2f::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> v2f::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> v2f::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - bool v2f::read() { - if (RASModel::read()) + if (eddyViscosity<incompressible::RASModel>::read()) { Cmu_.readIfPresent(coeffDict()); CmuKEps_.readIfPresent(coeffDict()); @@ -351,7 +263,7 @@ bool v2f::read() void v2f::correct() { - RASModel::correct(); + eddyViscosity<incompressible::RASModel>::correct(); if (!turbulence_) { @@ -373,7 +285,6 @@ void v2f::correct() 1.0/T*((C1_ - N)*v2_ - 2.0/3.0*k_*(C1_ - 1.0)) ); - tmp<volScalarField> Ceps1 = 1.4*(1.0 + 0.05*min(sqrt(k_/v2_), scalar(100.0))); @@ -444,10 +355,7 @@ void v2f::correct() solve(v2Eqn); bound(v2_, v2Min_); - - // Re-calculate viscosity - nut_ = davidsonCorrectNut(Cmu_*v2_*T); - nut_.correctBoundaryConditions(); + correctNut(); } diff --git a/src/turbulenceModels/incompressible/RAS/v2f/v2f.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.H similarity index 77% rename from src/turbulenceModels/incompressible/RAS/v2f/v2f.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.H index 04b0fcde020..4d1fdc33fe4 100644 --- a/src/turbulenceModels/incompressible/RAS/v2f/v2f.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/RAS/v2f/v2f.H @@ -31,9 +31,11 @@ Description Lien and Kalitzin's v2-f turbulence model for incompressible flows, with a limit imposed on the turbulent viscosity given by Davidson et al. - The model solves for turbulence k and epsilon, with additional equations - for the turbulence stress normal to streamlines, v2, and elliptic damping - function, f. The variant implemented employs N=6, such that f=0 on walls. + The model solves for turbulence kinetic energy k and turbulence dissipation + rate epsilon, with additional equations for the turbulence stress normal to + streamlines, v2, and elliptic damping function, f. + + The variant implemented employs N=6, such that f=0 on walls. Wall boundary conditions are: @@ -49,15 +51,17 @@ Description v2 = 2/3 k f = zero-gradient - References: - - Lien F-S, Kalitzin G, 2001. Computations of transonic flow with the v2-f - turbulence model. Int. J. Heat Fluid Flow 22, pp 53-61 - - Davidson L, Nielsen P, Sveningsson A, 2003. Modifications of the v2-f - model for computing the flow in a 3D wall jet. Turbulence, Heat and Mass - Transfer 4, pp 577-584 + \verbatim + Lien F-S, Kalitzin G, + "Computations of transonic flow with the v2-f turbulence model", + Int. J. Heat Fluid Flow 22, 2001, pp 53-61 + + Davidson L, Nielsen P, Sveningsson A, + "Modifications of the v2-f model for computing the flow in a + 3D wall jet", + Turbulence, Heat and Mass Transfer 4, 2003, pp 577-584 + \endverbatim The default model coefficients are given as: \verbatim @@ -81,7 +85,7 @@ Note k variants (nutk...) for this case will not behave correctly. SeeAlso - Foam::kEpsilon + Foam::incompressible::RASModels::kEpsilon Foam::kLowReWallFunctionFvPatchScalarField Foam::epsilonLowReWallFunctionFvPatchScalarField Foam::v2WallFunctionFvPatchScalarField @@ -95,7 +99,8 @@ SourceFiles #ifndef v2f_H #define v2f_H -#include "RASModel.H" +#include "turbulentTransportModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -112,7 +117,7 @@ namespace RASModels class v2f : - public RASModel + public eddyViscosity<incompressible::RASModel> { protected: @@ -146,9 +151,6 @@ protected: //- Damping function volScalarField f_; - //- Turbulence viscosity - volScalarField nut_; - // Bounding values @@ -158,14 +160,7 @@ protected: // Protected Member Functions - //- Return boundary type names for the R field - wordList RBoundaryTypes() const; - - //- Apply Davidson correction to nut - tmp<volScalarField> davidsonCorrectNut - ( - const tmp<volScalarField>& value - ) const; + virtual void correctNut(); //- Return time scale, Ts tmp<volScalarField> Ts() const; @@ -184,11 +179,14 @@ public: //- Construct from components v2f ( + const geometricOneField& alpha, + const geometricOneField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -199,11 +197,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const @@ -247,27 +242,8 @@ public: return f_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C similarity index 93% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C index f311165ebeb..46051f0a671 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "alphatJayatillekeWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" +#include "turbulenceModel.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "wallFvPatch.H" @@ -202,14 +202,22 @@ void alphatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs() const label patchi = patch().index(); // Retrieve turbulence properties from model - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); + + const turbulenceModel& turbulence = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + const scalar Cmu25 = pow(Cmu_, 0.25); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); + const scalarField& y = turbulence.y()[patchi]; + const tmp<volScalarField> tnu = turbulence.nu(); const volScalarField& nu = tnu(); const scalarField& nuw = nu.boundaryField()[patchi]; - const tmp<volScalarField> tk = turbModel.k(); + const tmp<volScalarField> tk = turbulence.k(); const volScalarField& k = tk(); const IOdictionary& transportProperties = diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H similarity index 98% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H index f4064c4efa8..b4a9005ff04 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFieldFwd.H b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModel.H similarity index 58% rename from src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFieldFwd.H rename to src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModel.H index 946f45d0762..72818e7f3cb 100644 --- a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFieldFwd.H +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModel.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) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -21,27 +21,52 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. -\*---------------------------------------------------------------------------*/ +Typedef + Foam::incompressible::turbulenceModel -#ifndef porousBafflePressureFvPatchFieldsFwd_H -#define porousBafflePressureFvPatchFieldsFwd_H +Typedef + Foam::incompressible::RASModel -#include "fieldTypes.H" +Typedef + Foam::incompressible::LESModel -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +Description + Typedefs for turbulence, RAS and LES models for incompressible flow + based on the standard laminar transport package. -namespace Foam -{ +SourceFiles + turbulentTransportModels.C -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +\*---------------------------------------------------------------------------*/ -template<class Type> class porousBafflePressureFvPatchField; +#ifndef turbulentTransportModel_H +#define turbulentTransportModel_H -makePatchTypeFieldTypedefs(porousBafflePressure); +#include "SpecificIncompressibleTurbulenceModel.H" +#include "RASModel.H" +#include "LESModel.H" +#include "incompressible/transportModel/transportModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace Foam +namespace Foam +{ + namespace incompressible + { + typedef IncompressibleTurbulenceModel<transportModel> turbulenceModel; + + typedef SpecificIncompressibleTurbulenceModel + < + RASModel<turbulenceModel> + > RASModel; + + typedef SpecificIncompressibleTurbulenceModel + < + LESModel<turbulenceModel> + > LESModel; + } +} + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/incompressible/incompressibleTurbulenceModels.C b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C similarity index 82% rename from src/TurbulenceModels/incompressible/incompressibleTurbulenceModels.C rename to src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C index 361c6f4b75b..c97c42fdbd8 100644 --- a/src/TurbulenceModels/incompressible/incompressibleTurbulenceModels.C +++ b/src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "IncompressibleTurbulenceModel.H" -#include "transportModel.H" +#include "incompressible/transportModel/transportModel.H" #include "addToRunTimeSelectionTable.H" #include "makeTurbulenceModel.H" @@ -49,9 +49,15 @@ makeBaseTurbulenceModel makeTemplatedTurbulenceModel \ (transportModelIncompressibleTurbulenceModel, LES, Type) +#include "SpalartAllmaras.H" +makeRASModel(SpalartAllmaras); + #include "kEpsilon.H" makeRASModel(kEpsilon); +#include "LaunderSharmaKE.H" +makeRASModel(LaunderSharmaKE); + #include "kOmegaSST.H" makeRASModel(kOmegaSST); @@ -61,5 +67,14 @@ makeLESModel(Smagorinsky); #include "kEqn.H" makeLESModel(kEqn); +#include "SpalartAllmarasDES.H" +makeLESModel(SpalartAllmarasDES); + +#include "SpalartAllmarasDDES.H" +makeLESModel(SpalartAllmarasDDES); + +#include "SpalartAllmarasIDDES.H" +makeLESModel(SpalartAllmarasIDDES); + // ************************************************************************* // diff --git a/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.C b/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.C index 35af8e7428a..a09689d0681 100644 --- a/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.C +++ b/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ template<class TransportModel> Foam::PhaseCompressibleTurbulenceModel<TransportModel>:: PhaseCompressibleTurbulenceModel ( + const word& type, const volScalarField& alpha, const volScalarField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.H b/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.H index d39949c9d8c..7ebabf30727 100644 --- a/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.H +++ b/src/TurbulenceModels/phaseCompressible/PhaseCompressibleTurbulenceModel/PhaseCompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,6 +72,7 @@ public: //- Construct PhaseCompressibleTurbulenceModel ( + const word& type, const alphaField& alpha, const volScalarField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C index 1633180836d..25539ac161b 100644 --- a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C +++ b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -31,6 +31,7 @@ template<class TransportModel> Foam::PhaseIncompressibleTurbulenceModel<TransportModel>:: PhaseIncompressibleTurbulenceModel ( + const word& type, const volScalarField& alpha, const geometricOneField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H index 836deaaa466..fb4ee56c323 100644 --- a/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H +++ b/src/TurbulenceModels/phaseIncompressible/PhaseIncompressibleTurbulenceModel/PhaseIncompressibleTurbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -72,6 +72,7 @@ public: //- Construct PhaseIncompressibleTurbulenceModel ( + const word& type, const alphaField& alpha, const geometricOneField& rho, const volVectorField& U, diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESModel/LESModel.C b/src/TurbulenceModels/turbulenceModels/LES/LESModel/LESModel.C index 11ab976a8a8..c3586574bf7 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESModel/LESModel.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESModel/LESModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,6 +54,7 @@ Foam::LESModel<BasicTurbulenceModel>::LESModel : BasicTurbulenceModel ( + type, alpha, rho, U, @@ -84,7 +85,7 @@ Foam::LESModel<BasicTurbulenceModel>::LESModel LESdelta::New ( IOobject::groupName("delta", U.group()), - U.mesh(), + *this, LESDict_ ) ) diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C similarity index 60% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.C rename to src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C index e7c459b888c..301638dd5f5 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.C @@ -30,20 +30,24 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam +{ +namespace LESModels { defineTypeNameAndDebug(IDDESDelta, 0); addToRunTimeSelectionTable(LESdelta, IDDESDelta, dictionary); } +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::IDDESDelta::calcDelta() +void Foam::LESModels::IDDESDelta::calcDelta() { - const volScalarField& hmax = hmax_(); + const volScalarField& hmax = hmax_; + const fvMesh& mesh = turbulenceModel_.mesh(); - // Wall-reflection vectors - const volVectorField& n = wallDist::New(mesh()).n(); + // Wall-normal vectors + const volVectorField& n = wallDist::New(mesh).n(); tmp<volScalarField> tfaceToFacenMax ( @@ -52,46 +56,50 @@ void Foam::IDDESDelta::calcDelta() IOobject ( "faceToFaceMax", - mesh().time().timeName(), - mesh(), + mesh.time().timeName(), + mesh, IOobject::NO_READ, IOobject::NO_WRITE ), - mesh(), - dimensionedScalar("zrero", dimLength, 0.0) + mesh, + dimensionedScalar("zero", dimLength, 0.0) ) ); scalarField& faceToFacenMax = tfaceToFacenMax().internalField(); - const cellList& cells = mesh().cells(); - const vectorField& faceCentres = mesh().faceCentres(); + const cellList& cells = mesh.cells(); + const vectorField& faceCentres = mesh.faceCentres(); - forAll(cells, cellI) + forAll(cells, celli) { - scalar deltaMaxTmp = 0.0; - const labelList& cFaces = cells[cellI]; - const vector nCell = n[cellI]; - forAll(cFaces, cFaceI) + scalar maxDelta = 0.0; + const labelList& cFaces = cells[celli]; + const vector nci = n[celli]; + + forAll(cFaces, cFacei) { - label faceI = cFaces[cFaceI]; - const point& faceCentreI = faceCentres[faceI]; - forAll(cFaces, cFaceJ) + label facei = cFaces[cFacei]; + const point& fci = faceCentres[facei]; + + forAll(cFaces, cFacej) { - label faceJ = cFaces[cFaceJ]; - const point& faceCentreJ = faceCentres[faceJ]; - scalar tmp = (faceCentreJ - faceCentreI) & nCell; - if (tmp > deltaMaxTmp) + label facej = cFaces[cFacej]; + const point& fcj = faceCentres[facej]; + scalar ndfc = nci & (fcj - fci); + + if (ndfc > maxDelta) { - deltaMaxTmp = tmp; + maxDelta = ndfc; } } } - faceToFacenMax[cellI] = deltaMaxTmp; + + faceToFacenMax[celli] = maxDelta; } - label nD = mesh().nGeometricD(); + label nD = mesh.nGeometricD(); if (nD == 2) { @@ -106,15 +114,14 @@ void Foam::IDDESDelta::calcDelta() } delta_.internalField() = - deltaCoeff_ - *min + min ( max ( max ( - cw_*wallDist::New(mesh()).y(), - cw_*hmax + Cw_*wallDist::New(mesh).y(), + Cw_*hmax ), tfaceToFacenMax ), @@ -125,38 +132,47 @@ void Foam::IDDESDelta::calcDelta() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::IDDESDelta::IDDESDelta +Foam::LESModels::IDDESDelta::IDDESDelta ( const word& name, - const fvMesh& mesh, - const dictionary& dd + const turbulenceModel& turbulence, + const dictionary& dict ) : - LESdelta(name, mesh), - hmax_(LESdelta::New("hmax", mesh, dd.parent())), - deltaCoeff_(readScalar(dd.subDict(type()+"Coeffs").lookup("deltaCoeff"))), - cw_(0.15) + LESdelta(name, turbulence), + hmax_ + ( + IOobject::groupName("hmax", turbulence.U().group()), + turbulence, + dict + ), + Cw_ + ( + dict.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Cw", 0.15) + ) { - dd.subDict(type() + "Coeffs").readIfPresent("cw", cw_); calcDelta(); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::IDDESDelta::read(const dictionary& dd) +void Foam::LESModels::IDDESDelta::read(const dictionary& dict) { - dd.subDict(type() + "Coeffs").lookup("deltaCoeff") >> deltaCoeff_; + const dictionary& coeffsDict(dict.subDict(type() + "Coeffs")); + + coeffsDict.readIfPresent<scalar>("Cw", Cw_); + calcDelta(); } -void Foam::IDDESDelta::correct() +void Foam::LESModels::IDDESDelta::correct() { - if (mesh_.changing()) + if (turbulenceModel_.mesh().changing()) { + hmax_.correct(); calcDelta(); - hmax_().correct(); } } diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.H similarity index 88% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.H rename to src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.H index 0274a192f9d..4f1bf55b141 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/IDDESDelta/IDDESDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -37,12 +37,14 @@ SourceFiles #ifndef IDDESDeltaDelta_H #define IDDESDeltaDelta_H -#include "incompressibleLESdelta.H" +#include "maxDeltaxyz.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { +namespace LESModels +{ /*---------------------------------------------------------------------------*\ Class IDDESDelta Declaration @@ -54,9 +56,9 @@ class IDDESDelta { // Private data - autoPtr<Foam::LESdelta> hmax_; - scalar deltaCoeff_; - scalar cw_; + maxDeltaxyz hmax_; + + scalar Cw_; // Private Member Functions @@ -81,7 +83,7 @@ public: IDDESDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& ); @@ -97,6 +99,12 @@ public: //- Read the LESdelta dictionary void read(const dictionary&); + //- Return the hmax delta field + const volScalarField& hmax() const + { + return hmax_; + } + // Correct values void correct(); }; @@ -104,6 +112,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace LESModels } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C index 5a8ff1c3fb0..a685bd5e534 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,20 +36,24 @@ namespace Foam // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::LESdelta::LESdelta(const word& name, const fvMesh& mesh) +Foam::LESdelta::LESdelta +( + const word& name, + const turbulenceModel& turbulence +) : - mesh_(mesh), + turbulenceModel_(turbulence), delta_ ( IOobject ( name, - mesh.time().timeName(), - mesh, + turbulence.mesh().time().timeName(), + turbulence.mesh(), IOobject::NO_READ, IOobject::NO_WRITE ), - mesh, + turbulence.mesh(), dimensionedScalar(name, dimLength, SMALL), calculatedFvPatchScalarField::typeName ) @@ -61,7 +65,7 @@ Foam::LESdelta::LESdelta(const word& name, const fvMesh& mesh) Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict ) { @@ -76,7 +80,7 @@ Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New { FatalErrorIn ( - "LESdelta::New(const fvMesh&, const dictionary&)" + "LESdelta::New(const word& name, const turbulenceModel& turbulence)" ) << "Unknown LESdelta type " << deltaType << nl << nl << "Valid LESdelta types are :" << endl @@ -84,14 +88,14 @@ Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New << exit(FatalError); } - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); + return autoPtr<LESdelta>(cstrIter()(name, turbulence, dict)); } Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict, const dictionaryConstructorTable& additionalConstructors ) @@ -106,7 +110,7 @@ Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New if (cstrIter != additionalConstructors.end()) { - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); + return autoPtr<LESdelta>(cstrIter()(name, turbulence, dict)); } else { @@ -117,7 +121,9 @@ Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New { FatalErrorIn ( - "LESdelta::New(const fvMesh&, const dictionary&)" + "LESdelta::New(const word& name, " + "const turbulenceModel& turbulence, " + "const dictionaryConstructorTable&)" ) << "Unknown LESdelta type " << deltaType << nl << nl << "Valid LESdelta types are :" << endl @@ -129,7 +135,7 @@ Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New } else { - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); + return autoPtr<LESdelta>(cstrIter()(name, turbulence, dict)); } } } diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H index c84ae74c3b1..35aea4620ad 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,9 +35,8 @@ SourceFiles #ifndef LESdelta_H #define LESdelta_H +#include "turbulenceModel.H" #include "volFields.H" -#include "typeInfo.H" -#include "autoPtr.H" #include "runTimeSelectionTables.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -45,8 +44,6 @@ SourceFiles namespace Foam { -class fvMesh; - /*---------------------------------------------------------------------------*\ Class LESdelta Declaration \*---------------------------------------------------------------------------*/ @@ -58,7 +55,7 @@ protected: // Protected data - const fvMesh& mesh_; + const turbulenceModel& turbulenceModel_; volScalarField delta_; @@ -87,17 +84,21 @@ public: dictionary, ( const word& name, - const fvMesh& mesh, - const dictionary& LESdeltaDict + const turbulenceModel& turbulence, + const dictionary& dict ), - (name, mesh, LESdeltaDict) + (name, turbulence, dict) ); // Constructors - //- Construct from name and mesh - LESdelta(const word& name, const fvMesh&); + //- Construct from name, turbulenceModel and dictionary + LESdelta + ( + const word& name, + const turbulenceModel& turbulence + ); // Selectors @@ -106,16 +107,16 @@ public: static autoPtr<LESdelta> New ( const word& name, - const fvMesh&, - const dictionary& + const turbulenceModel& turbulence, + const dictionary& dict ); //- Return a reference to the selected LES delta static autoPtr<LESdelta> New ( const word& name, - const fvMesh&, - const dictionary&, + const turbulenceModel& turbulence, + const dictionary& dict, const dictionaryConstructorTable& ); @@ -127,10 +128,10 @@ public: // Member Functions - //- Return mesh reference - const fvMesh& mesh() const + //- Return turbulenceModel reference + const turbulenceModel& turbulence() const { - return mesh_; + return turbulenceModel_; } //- Read the LESdelta dictionary diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C index 9d90e7c6922..d2b9f762b4a 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C @@ -30,35 +30,46 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam +{ +namespace LESModels { defineTypeNameAndDebug(PrandtlDelta, 0); addToRunTimeSelectionTable(LESdelta, PrandtlDelta, dictionary); } +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::PrandtlDelta::calcDelta() +void Foam::LESModels::PrandtlDelta::calcDelta() { delta_ = min ( static_cast<const volScalarField&>(geometricDelta_()), - (kappa_/Cdelta_)*wallDist::New(mesh_).y() + (kappa_/Cdelta_)*wallDist::New(turbulenceModel_.mesh()).y() ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::PrandtlDelta::PrandtlDelta +Foam::LESModels::PrandtlDelta::PrandtlDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict ) : - LESdelta(name, mesh), - geometricDelta_(LESdelta::New(name, mesh, dict.subDict(type() + "Coeffs"))), + LESdelta(name, turbulence), + geometricDelta_ + ( + LESdelta::New + ( + name, + turbulence, + dict.subDict(type() + "Coeffs") + ) + ), kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), Cdelta_ ( @@ -71,7 +82,7 @@ Foam::PrandtlDelta::PrandtlDelta // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::PrandtlDelta::read(const dictionary& dict) +void Foam::LESModels::PrandtlDelta::read(const dictionary& dict) { const dictionary& coeffDict(dict.subDict(type() + "Coeffs")); @@ -82,11 +93,11 @@ void Foam::PrandtlDelta::read(const dictionary& dict) } -void Foam::PrandtlDelta::correct() +void Foam::LESModels::PrandtlDelta::correct() { geometricDelta_().correct(); - if (mesh_.changing()) + if (turbulenceModel_.mesh().changing()) { calcDelta(); } diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H index d8840ff1a88..3cb8b774202 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,6 +41,8 @@ SourceFiles namespace Foam { +namespace LESModels +{ /*---------------------------------------------------------------------------*\ Class PrandtlDelta Declaration @@ -75,11 +77,11 @@ public: // Constructors - //- Construct from name, mesh and IOdictionary + //- Construct from name, turbulenceModel and dictionary PrandtlDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& ); @@ -101,6 +103,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace LESModels } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C index cdacbc66904..4767c400ce4 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,21 +29,26 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam +{ +namespace LESModels { defineTypeNameAndDebug(cubeRootVolDelta, 0); addToRunTimeSelectionTable(LESdelta, cubeRootVolDelta, dictionary); } +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::cubeRootVolDelta::calcDelta() +void Foam::LESModels::cubeRootVolDelta::calcDelta() { - label nD = mesh().nGeometricD(); + const fvMesh& mesh = turbulenceModel_.mesh(); + + label nD = mesh.nGeometricD(); if (nD == 3) { - delta_.internalField() = deltaCoeff_*pow(mesh().V(), 1.0/3.0); + delta_.internalField() = deltaCoeff_*pow(mesh.V(), 1.0/3.0); } else if (nD == 2) { @@ -51,19 +56,19 @@ void Foam::cubeRootVolDelta::calcDelta() << "Case is 2D, LES is not strictly applicable\n" << endl; - const Vector<label>& directions = mesh().geometricD(); + const Vector<label>& directions = mesh.geometricD(); scalar thickness = 0.0; for (direction dir=0; dir<directions.nComponents; dir++) { if (directions[dir] == -1) { - thickness = mesh().bounds().span()[dir]; + thickness = mesh.bounds().span()[dir]; break; } } - delta_.internalField() = deltaCoeff_*sqrt(mesh().V()/thickness); + delta_.internalField() = deltaCoeff_*sqrt(mesh.V()/thickness); } else { @@ -76,14 +81,14 @@ void Foam::cubeRootVolDelta::calcDelta() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cubeRootVolDelta::cubeRootVolDelta +Foam::LESModels::cubeRootVolDelta::cubeRootVolDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict ) : - LESdelta(name, mesh), + LESdelta(name, turbulence), deltaCoeff_ ( dict.subDict(type() + "Coeffs").lookupOrDefault<scalar>("deltaCoeff", 1) @@ -95,7 +100,7 @@ Foam::cubeRootVolDelta::cubeRootVolDelta // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::cubeRootVolDelta::read(const dictionary& dict) +void Foam::LESModels::cubeRootVolDelta::read(const dictionary& dict) { dict.subDict(type() + "Coeffs").readIfPresent<scalar> ( @@ -107,9 +112,9 @@ void Foam::cubeRootVolDelta::read(const dictionary& dict) } -void Foam::cubeRootVolDelta::correct() +void Foam::LESModels::cubeRootVolDelta::correct() { - if (mesh_.changing()) + if (turbulenceModel_.mesh().changing()) { calcDelta(); } diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H index f6abbe7e127..d0238d8dfd9 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,6 +41,8 @@ SourceFiles namespace Foam { +namespace LESModels +{ /*---------------------------------------------------------------------------*\ Class cubeRootVolDelta Declaration @@ -73,11 +75,11 @@ public: // Constructors - //- Construct from name, mesh and IOdictionary + //- Construct from name, turbulenceModel and dictionary cubeRootVolDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& ); @@ -99,6 +101,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace LESModels } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C index 9e4e5747198..6c277bf7eb8 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,17 +29,22 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam +{ +namespace LESModels { defineTypeNameAndDebug(maxDeltaxyz, 0); addToRunTimeSelectionTable(LESdelta, maxDeltaxyz, dictionary); } +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::maxDeltaxyz::calcDelta() +void Foam::LESModels::maxDeltaxyz::calcDelta() { - label nD = mesh().nGeometricD(); + const fvMesh& mesh = turbulenceModel_.mesh(); + + label nD = mesh.nGeometricD(); tmp<volScalarField> hmax ( @@ -48,28 +53,28 @@ void Foam::maxDeltaxyz::calcDelta() IOobject ( "hmax", - mesh().time().timeName(), - mesh(), + mesh.time().timeName(), + mesh, IOobject::NO_READ, IOobject::NO_WRITE ), - mesh(), + mesh, dimensionedScalar("zrero", dimLength, 0.0) ) ); - const cellList& cells = mesh().cells(); + const cellList& cells = mesh.cells(); forAll(cells,cellI) { scalar deltaMaxTmp = 0.0; - const labelList& cFaces = mesh().cells()[cellI]; - const point& centrevector = mesh().cellCentres()[cellI]; + const labelList& cFaces = mesh.cells()[cellI]; + const point& centrevector = mesh.cellCentres()[cellI]; forAll(cFaces, cFaceI) { label faceI = cFaces[cFaceI]; - const point& facevector = mesh().faceCentres()[faceI]; + const point& facevector = mesh.faceCentres()[faceI]; scalar tmp = mag(facevector - centrevector); if (tmp > deltaMaxTmp) { @@ -102,14 +107,14 @@ void Foam::maxDeltaxyz::calcDelta() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::maxDeltaxyz::maxDeltaxyz +Foam::LESModels::maxDeltaxyz::maxDeltaxyz ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict ) : - LESdelta(name, mesh), + LESdelta(name, turbulence), deltaCoeff_ ( dict.subDict(type() + "Coeffs").lookupOrDefault<scalar>("deltaCoeff", 1) @@ -121,21 +126,19 @@ Foam::maxDeltaxyz::maxDeltaxyz // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::maxDeltaxyz::read(const dictionary& dict) +void Foam::LESModels::maxDeltaxyz::read(const dictionary& dict) { - dict.subDict(type() + "Coeffs").readIfPresent<scalar> - ( - "deltaCoeff", - deltaCoeff_ - ); + const dictionary& coeffsDict(dict.subDict(type() + "Coeffs")); + + coeffsDict.readIfPresent<scalar>("deltaCoeff", deltaCoeff_); calcDelta(); } -void Foam::maxDeltaxyz::correct() +void Foam::LESModels::maxDeltaxyz::correct() { - if (mesh_.changing()) + if (turbulenceModel_.mesh().changing()) { calcDelta(); } diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H index 05df8af5520..8fd62665472 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,6 +44,8 @@ SourceFiles namespace Foam { +namespace LESModels +{ /*---------------------------------------------------------------------------*\ Class maxDeltaxyz Declaration @@ -77,11 +79,11 @@ public: // Constructors - //- Construct from name, mesh and IOdictionary + //- Construct from name, turbulenceModel and dictionary maxDeltaxyz ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& ); @@ -103,6 +105,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +} // End namespace LESModels } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C index 07a5ad6febb..843f1076a62 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,26 +30,18 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam +{ +namespace LESModels { defineTypeNameAndDebug(smoothDelta, 0); addToRunTimeSelectionTable(LESdelta, smoothDelta, dictionary); } +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Fill changedFaces (with face labels) and changedFacesInfo (with delta) -// This is the initial set of faces from which to start the waves. -// Since there might be lots of places with delta jumps we can follow various -// strategies for this initial 'seed'. -// - start from single cell/face and let FaceCellWave pick up all others -// from there. might be quite a few waves before everything settles. -// - start from all faces. Lots of initial transfers. -// We do something inbetween: -// - start from all faces where there is a jump. Since we cannot easily -// determine this across coupled patches (cyclic, processor) introduce -// all faces of these and let FaceCellWave sort it out. -void Foam::smoothDelta::setChangedFaces +void Foam::LESModels::smoothDelta::setChangedFaces ( const polyMesh& mesh, const volScalarField& delta, @@ -102,18 +94,20 @@ void Foam::smoothDelta::setChangedFaces } -void Foam::smoothDelta::calcDelta() +void Foam::LESModels::smoothDelta::calcDelta() { + const fvMesh& mesh = turbulenceModel_.mesh(); + const volScalarField& geometricDelta = geometricDelta_(); // Fill changed faces with info - DynamicList<label> changedFaces(mesh_.nFaces()/100 + 100); + DynamicList<label> changedFaces(mesh.nFaces()/100 + 100); DynamicList<deltaData> changedFacesInfo(changedFaces.size()); - setChangedFaces(mesh_, geometricDelta, changedFaces, changedFacesInfo); + setChangedFaces(mesh, geometricDelta, changedFaces, changedFacesInfo); // Set initial field on cells. - List<deltaData> cellDeltaData(mesh_.nCells()); + List<deltaData> cellDeltaData(mesh.nCells()); forAll(geometricDelta, cellI) { @@ -121,18 +115,18 @@ void Foam::smoothDelta::calcDelta() } // Set initial field on faces. - List<deltaData> faceDeltaData(mesh_.nFaces()); + List<deltaData> faceDeltaData(mesh.nFaces()); // Propagate information over whole domain. FaceCellWave<deltaData, scalar> deltaCalc ( - mesh_, + mesh, changedFaces, changedFacesInfo, faceDeltaData, cellDeltaData, - mesh_.globalData().nTotalCells()+1, // max iterations + mesh.globalData().nTotalCells()+1, // max iterations maxDeltaRatio_ ); @@ -145,17 +139,22 @@ void Foam::smoothDelta::calcDelta() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::smoothDelta::smoothDelta +Foam::LESModels::smoothDelta::smoothDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& dict ) : - LESdelta(name, mesh), + LESdelta(name, turbulence), geometricDelta_ ( - LESdelta::New("geometricDelta", mesh, dict.subDict(type() + "Coeffs")) + LESdelta::New + ( + "geometricDelta", + turbulence, + dict.subDict(type() + "Coeffs") + ) ), maxDeltaRatio_ ( @@ -168,7 +167,7 @@ Foam::smoothDelta::smoothDelta // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void Foam::smoothDelta::read(const dictionary& dict) +void Foam::LESModels::smoothDelta::read(const dictionary& dict) { const dictionary& coeffsDict(dict.subDict(type() + "Coeffs")); @@ -178,11 +177,11 @@ void Foam::smoothDelta::read(const dictionary& dict) } -void Foam::smoothDelta::correct() +void Foam::LESModels::smoothDelta::correct() { geometricDelta_().correct(); - if (mesh_.changing()) + if (turbulenceModel_.mesh().changing()) { calcDelta(); } diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H index e80d0948447..bae48b7a82c 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,6 +43,8 @@ SourceFiles namespace Foam { +namespace LESModels +{ /*---------------------------------------------------------------------------*\ Class smoothDelta Declaration @@ -225,7 +227,19 @@ private: // Calculate the delta values void calcDelta(); - + //- Fill changedFaces (with face labels) and changedFacesInfo + // (with delta). + // This is the initial set of faces from which to start the waves. + // Since there might be lots of places with delta jumps we can follow + // various strategies for this initial 'seed'. + // - start from single cell/face and let FaceCellWave pick up all + // others from there. might be quite a few waves before everything + // settles. + // - start from all faces. Lots of initial transfers. + // We do something in between: + // - start from all faces where there is a jump. Since we cannot easily + // determine this across coupled patches (cyclic, processor) + // introduce all faces of these and let FaceCellWave sort it out. void setChangedFaces ( const polyMesh& mesh, @@ -243,11 +257,11 @@ public: // Constructors - //- Construct from name, mesh and IOdictionary + //- Construct from name, turbulenceModel and dictionary smoothDelta ( const word& name, - const fvMesh& mesh, + const turbulenceModel& turbulence, const dictionary& ); @@ -267,14 +281,19 @@ public: }; +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace LESModels + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + //- Data associated with deltaData type are contiguous template<> -inline bool contiguous<smoothDelta::deltaData>() +inline bool contiguous<LESModels::smoothDelta::deltaData>() { return true; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam diff --git a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H index 16fbd8b519f..eef7c42d89a 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,16 +23,10 @@ License \*---------------------------------------------------------------------------*/ -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -// Update this with w2 if applicable template<class TrackingData> -inline bool smoothDelta::deltaData::update +inline bool Foam::LESModels::smoothDelta::deltaData::update ( const smoothDelta::deltaData& w2, const scalar scale, @@ -67,15 +61,13 @@ inline bool smoothDelta::deltaData::update // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -// Null constructor -inline smoothDelta::deltaData::deltaData() +inline Foam::LESModels::smoothDelta::deltaData::deltaData() : delta_(-GREAT) {} -// Construct from components -inline smoothDelta::deltaData::deltaData(const scalar delta) +inline Foam::LESModels::smoothDelta::deltaData::deltaData(const scalar delta) : delta_(delta) {} @@ -84,15 +76,17 @@ inline smoothDelta::deltaData::deltaData(const scalar delta) // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template<class TrackingData> -inline bool smoothDelta::deltaData::valid(TrackingData& td) const +inline bool Foam::LESModels::smoothDelta::deltaData::valid +( + TrackingData& td +) const { return delta_ > -SMALL; } -// Checks for cyclic faces template<class TrackingData> -inline bool smoothDelta::deltaData::sameGeometry +inline bool Foam::LESModels::smoothDelta::deltaData::sameGeometry ( const polyMesh&, const deltaData&, @@ -105,7 +99,7 @@ inline bool smoothDelta::deltaData::sameGeometry template<class TrackingData> -inline void smoothDelta::deltaData::leaveDomain +inline void Foam::LESModels::smoothDelta::deltaData::leaveDomain ( const polyMesh&, const polyPatch&, @@ -117,7 +111,7 @@ inline void smoothDelta::deltaData::leaveDomain template<class TrackingData> -inline void smoothDelta::deltaData::transform +inline void Foam::LESModels::smoothDelta::deltaData::transform ( const polyMesh&, const tensor&, @@ -126,9 +120,8 @@ inline void smoothDelta::deltaData::transform {} -// Update absolute geometric quantities. template<class TrackingData> -inline void smoothDelta::deltaData::enterDomain +inline void Foam::LESModels::smoothDelta::deltaData::enterDomain ( const polyMesh&, const polyPatch&, @@ -139,9 +132,8 @@ inline void smoothDelta::deltaData::enterDomain {} -// Update this (cellI) with face information. template<class TrackingData> -inline bool smoothDelta::deltaData::updateCell +inline bool Foam::LESModels::smoothDelta::deltaData::updateCell ( const polyMesh&, const label, @@ -156,9 +148,8 @@ inline bool smoothDelta::deltaData::updateCell } -// Update this (face) with cell information. template<class TrackingData> -inline bool smoothDelta::deltaData::updateFace +inline bool Foam::LESModels::smoothDelta::deltaData::updateFace ( const polyMesh&, const label, @@ -173,9 +164,8 @@ inline bool smoothDelta::deltaData::updateFace } -// Update this (face) with coupled face information. template<class TrackingData> -inline bool smoothDelta::deltaData::updateFace +inline bool Foam::LESModels::smoothDelta::deltaData::updateFace ( const polyMesh&, const label, @@ -190,7 +180,7 @@ inline bool smoothDelta::deltaData::updateFace template<class TrackingData> -inline bool smoothDelta::deltaData::equal +inline bool Foam::LESModels::smoothDelta::deltaData::equal ( const deltaData& rhs, TrackingData& td @@ -202,7 +192,7 @@ inline bool smoothDelta::deltaData::equal // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // -inline bool smoothDelta::deltaData::operator== +inline bool Foam::LESModels::smoothDelta::deltaData::operator== ( const deltaData& rhs ) const @@ -211,7 +201,7 @@ inline bool smoothDelta::deltaData::operator== } -inline bool smoothDelta::deltaData::operator!= +inline bool Foam::LESModels::smoothDelta::deltaData::operator!= ( const deltaData& rhs ) const @@ -220,8 +210,4 @@ inline bool smoothDelta::deltaData::operator!= } -// ************************************************************************* // - -} // End namespace Foam - // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.C b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.C similarity index 61% rename from src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.C rename to src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.C index 35cf23f686a..b0338981ee6 100644 --- a/src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.C +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,50 +24,46 @@ License \*---------------------------------------------------------------------------*/ #include "vanDriestDelta.H" -#include "LESModel.H" #include "wallFvPatch.H" #include "wallDistData.H" #include "wallPointYPlus.H" #include "addToRunTimeSelectionTable.H" -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(vanDriestDelta, 0); -addToRunTimeSelectionTable(LESdelta, vanDriestDelta, dictionary); + defineTypeNameAndDebug(vanDriestDelta, 0); + addToRunTimeSelectionTable(LESdelta, vanDriestDelta, dictionary); +} +} // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void vanDriestDelta::calcDelta() +void Foam::LESModels::vanDriestDelta::calcDelta() { - const LESModel& lesModel = mesh_.lookupObject<LESModel>("LESProperties"); + const fvMesh& mesh = turbulenceModel_.mesh(); - const volVectorField& U = lesModel.U(); - const tmp<volScalarField> tnu = lesModel.nu(); + const volVectorField& U = turbulenceModel_.U(); + const tmp<volScalarField> tnu = turbulenceModel_.nu(); const volScalarField& nu = tnu(); - tmp<volScalarField> nuSgs = lesModel.nuSgs(); + tmp<volScalarField> nuSgs = turbulenceModel_.nut(); volScalarField ystar ( IOobject ( "ystar", - mesh_.time().constant(), - mesh_ + mesh.time().constant(), + mesh ), - mesh_, + mesh, dimensionedScalar("ystar", dimLength, GREAT) ); - const fvPatchList& patches = mesh_.boundary(); + const fvPatchList& patches = mesh.boundary(); forAll(patches, patchi) { if (isA<wallFvPatch>(patches[patchi])) @@ -83,7 +79,7 @@ void vanDriestDelta::calcDelta() scalar cutOff = wallPointYPlus::yPlusCutOff; wallPointYPlus::yPlusCutOff = 500; - wallDistData<wallPointYPlus> y(mesh_, ystar); + wallDistData<wallPointYPlus> y(mesh, ystar); wallPointYPlus::yPlusCutOff = cutOff; delta_ = min @@ -96,30 +92,39 @@ void vanDriestDelta::calcDelta() // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -vanDriestDelta::vanDriestDelta +Foam::LESModels::vanDriestDelta::vanDriestDelta ( const word& name, - const fvMesh& mesh, - const dictionary& dd + const turbulenceModel& turbulence, + const dictionary& dict ) : - LESdelta(name, mesh), + LESdelta(name, turbulence), geometricDelta_ ( - LESdelta::New("geometricDelta", mesh, dd.subDict(type() + "Coeffs")) + LESdelta::New + ( + IOobject::groupName("geometricDelta", turbulence.U().group()), + turbulence, + dict.subDict(type() + "Coeffs") + ) ), - kappa_(dd.lookupOrDefault<scalar>("kappa", 0.41)), + kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), Aplus_ ( - dd.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Aplus", 26.0) + dict.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Aplus", 26.0) ), Cdelta_ ( - dd.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Cdelta", 0.158) + dict.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Cdelta", 0.158) ), calcInterval_ ( - dd.subDict(type() + "Coeffs").lookupOrDefault<label>("calcInterval", 1) + dict.subDict(type() + "Coeffs").lookupOrDefault<label> + ( + "calcInterval", + 1 + ) ) { delta_ = geometricDelta_(); @@ -128,22 +133,23 @@ vanDriestDelta::vanDriestDelta // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -void vanDriestDelta::read(const dictionary& d) +void Foam::LESModels::vanDriestDelta::read(const dictionary& dict) { - const dictionary& dd(d.subDict(type() + "Coeffs")); + const dictionary& coeffsDict(dict.subDict(type() + "Coeffs")); + + geometricDelta_().read(coeffsDict); + dict.readIfPresent<scalar>("kappa", kappa_); + coeffsDict.readIfPresent<scalar>("Aplus", Aplus_); + coeffsDict.readIfPresent<scalar>("Cdelta", Cdelta_); + coeffsDict.readIfPresent<label>("calcInterval", calcInterval_); - geometricDelta_().read(dd); - d.readIfPresent<scalar>("kappa", kappa_); - dd.readIfPresent<scalar>("Aplus", Aplus_); - dd.readIfPresent<scalar>("Cdelta", Cdelta_); - dd.readIfPresent<label>("calcInterval", calcInterval_); calcDelta(); } -void vanDriestDelta::correct() +void Foam::LESModels::vanDriestDelta::correct() { - if (mesh().time().timeIndex() % calcInterval_ == 0) + if (turbulenceModel_.mesh().time().timeIndex() % calcInterval_ == 0) { geometricDelta_().correct(); calcDelta(); @@ -151,10 +157,4 @@ void vanDriestDelta::correct() } -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.H b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.H similarity index 87% rename from src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.H rename to src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.H index 217f86e9dec..81feca5793c 100644 --- a/src/turbulenceModels/incompressible/LES/vanDriestDelta/vanDriestDelta.H +++ b/src/TurbulenceModels/turbulenceModels/LES/LESdeltas/vanDriestDelta/vanDriestDelta.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,7 +22,7 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::LESModels::vanDriestDelta + Foam::vanDriestDelta Description Simple cube-root of cell volume delta used in incompressible LES models. @@ -35,14 +35,12 @@ SourceFiles #ifndef vanDriestDelta_H #define vanDriestDelta_H -#include "incompressibleLESdelta.H" +#include "LESdelta.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { @@ -56,7 +54,7 @@ class vanDriestDelta { // Private data - autoPtr<Foam::LESdelta> geometricDelta_; + autoPtr<LESdelta> geometricDelta_; scalar kappa_; scalar Aplus_; scalar Cdelta_; @@ -81,8 +79,13 @@ public: // Constructors - //- Construct from name, mesh and IOdictionary - vanDriestDelta(const word& name, const fvMesh& mesh, const dictionary&); + //- Construct from name, turbulenceModel and dictionary + vanDriestDelta + ( + const word& name, + const turbulenceModel& turbulence, + const dictionary& + ); //- Destructor @@ -103,7 +106,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C similarity index 55% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C rename to src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C index a344ee92077..186970ca613 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.C @@ -24,70 +24,73 @@ License \*---------------------------------------------------------------------------*/ #include "SpalartAllmarasDDES.H" -#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmarasDDES, 0); -addToRunTimeSelectionTable(LESModel, SpalartAllmarasDDES, dictionary); - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // -tmp<volScalarField> SpalartAllmarasDDES::rd +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDDES<BasicTurbulenceModel>::rd ( - const volScalarField& visc, - const volScalarField& S + const volScalarField& magGradU ) const { - return min + tmp<volScalarField> tr ( - visc - /( - max - ( - S, - dimensionedScalar("SMALL", S.dimensions(), SMALL) - )*sqr(kappa_*y_) - + dimensionedScalar - ( - "ROOTVSMALL", - dimensionSet(0, 2 , -1, 0, 0), - ROOTVSMALL - ) - ), - scalar(10) + min + ( + this->nuEff() + /( + max + ( + magGradU, + dimensionedScalar("SMALL", magGradU.dimensions(), SMALL) + ) + *sqr(this->kappa_*this->y_) + ), + scalar(10) + ) ); -} + tr().boundaryField() == 0.0; - -tmp<volScalarField> SpalartAllmarasDDES::fd(const volScalarField& S) const -{ - return 1 - tanh(pow3(8*rd(nuEff(), S))); + return tr; } -tmp<volScalarField> SpalartAllmarasDDES::S(const volTensorField& gradU) const +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDDES<BasicTurbulenceModel>::fd +( + const volScalarField& magGradU +) const { - return sqrt(2.0)*mag(symm(gradU)); + return 1 - tanh(pow3(8*rd(magGradU))); } -tmp<volScalarField> SpalartAllmarasDDES::dTilda(const volScalarField& S) const +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDDES<BasicTurbulenceModel>::dTilda +( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU +) const { return max ( - y_ - - fd(S) - *max(y_ - CDES_*delta(), dimensionedScalar("zero", dimLength, 0)), + this->y_ + - fd(mag(gradU)) + *max + ( + this->y_ - this->CDES_*this->delta(), + dimensionedScalar("zero", dimLength, 0) + ), dimensionedScalar("small", dimLength, SMALL) ); } @@ -95,23 +98,35 @@ tmp<volScalarField> SpalartAllmarasDDES::dTilda(const volScalarField& S) const // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -SpalartAllmarasDDES::SpalartAllmarasDDES +template<class BasicTurbulenceModel> +SpalartAllmarasDDES<BasicTurbulenceModel>::SpalartAllmarasDDES ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - SpalartAllmaras(U, phi, transport, turbulenceModelName, modelName) + SpalartAllmarasDES<BasicTurbulenceModel> + ( + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ) {} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H similarity index 64% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H rename to src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H index 5421384e272..addcb635a4c 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDDES/SpalartAllmarasDDES.H @@ -22,18 +22,23 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::LESModels::SpalartAllmarasDDES + Foam::LESModels::SpalartAllmarasDDES Group - grpIcoDESTurbulence + grpDESTurbulence Description - SpalartAllmaras DDES LES turbulence model for incompressible flows + SpalartAllmaras DDES turbulence model for incompressible and compressible + flows Reference: - P.R. Spalart, S. Deck, S., M.L.Shur, K.D. Squires, M.Kh Strelets, and - A. Travin. `A new version of detached-eddy simulation, resistant to - ambiguous grid densities'. Theor. Comp. Fluid Dyn., 20:181-195, 2006. + \verbatim + Spalart, P. R., Deck, S., Shur, M. L., Squires, K. D., Strelets, M. K., + & Travin, A. (2006). + A new version of detached-eddy simulation, resistant to ambiguous grid + densities. + Theoretical and computational fluid dynamics, 20(3), 181-195. + \endverbatim SourceFiles SpalartAllmarasDDES.C @@ -43,14 +48,12 @@ SourceFiles #ifndef SpalartAllmarasDDES_H #define SpalartAllmarasDDES_H -#include "SpalartAllmaras.H" +#include "SpalartAllmarasDES.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { @@ -58,19 +61,16 @@ namespace LESModels Class SpalartAllmarasDDES Declaration \*---------------------------------------------------------------------------*/ +template<class BasicTurbulenceModel> class SpalartAllmarasDDES : - public SpalartAllmaras + public SpalartAllmarasDES<BasicTurbulenceModel> { // Private Member Functions - tmp<volScalarField> fd(const volScalarField& S) const; + tmp<volScalarField> fd(const volScalarField& magGradU) const; - tmp<volScalarField> rd - ( - const volScalarField& visc, - const volScalarField& S - ) const; + tmp<volScalarField> rd(const volScalarField& magGradU) const; // Disallow default bitwise copy construct and assignment SpalartAllmarasDDES(const SpalartAllmarasDDES&); @@ -82,13 +82,21 @@ protected: // Protected Member Functions //- Length scale - virtual tmp<volScalarField> dTilda(const volScalarField& S) const; - - virtual tmp<volScalarField> S(const volTensorField& gradU) const; + virtual tmp<volScalarField> dTilda + ( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU + ) const; public: + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + //- Runtime type information TypeName("SpalartAllmarasDDES"); @@ -98,11 +106,14 @@ public: //- Construct from components SpalartAllmarasDDES ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -115,11 +126,16 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpalartAllmarasDDES.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C new file mode 100644 index 00000000000..f0a8c60ac10 --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.C @@ -0,0 +1,454 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmarasDES.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace LESModels +{ + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::chi() const +{ + return nuTilda_/this->nu(); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::fv1 +( + const volScalarField& chi +) const +{ + const volScalarField chi3("chi3", pow3(chi)); + return chi3/(chi3 + pow3(Cv1_)); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::fv2 +( + const volScalarField& chi, + const volScalarField& fv1 +) const +{ + return 1.0 - chi/(1.0 + chi*fv1); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::S +( + const volTensorField& gradU +) const +{ + return sqrt(2.0)*mag(symm(gradU)); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::Omega +( + const volTensorField& gradU +) const +{ + return sqrt(2.0)*mag(skew(gradU)); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::Stilda +( + const volScalarField& chi, + const volScalarField& fv1, + const volScalarField& Omega, + const volScalarField& dTilda +) const +{ + return + ( + max + ( + Omega + + fv2(chi, fv1)*nuTilda_/sqr(kappa_*dTilda), + Cs_*Omega + ) + ); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::r +( + const volScalarField& nur, + const volScalarField& Omega, + const volScalarField& dTilda +) const +{ + tmp<volScalarField> tr + ( + min + ( + nur + /( + max + ( + Omega, + dimensionedScalar("SMALL", Omega.dimensions(), SMALL) + ) + *sqr(kappa_*dTilda) + ), + scalar(10) + ) + ); + tr().boundaryField() == 0.0; + + return tr; +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::fw +( + const volScalarField& Omega, + const volScalarField& dTilda +) const +{ + const volScalarField r(this->r(nuTilda_, Omega, dTilda)); + const volScalarField g(r + Cw2_*(pow6(r) - r)); + + return g*pow((1 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::dTilda +( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU +) const +{ + tmp<volScalarField> tdTilda(CDES_*this->delta()); + min(tdTilda().dimensionedInternalField(), tdTilda(), y_); + return tdTilda; +} + + +template<class BasicTurbulenceModel> +void SpalartAllmarasDES<BasicTurbulenceModel>::correctNut +( + const volScalarField& fv1 +) +{ + this->nut_ = nuTilda_*fv1; + this->nut_.correctBoundaryConditions(); +} + + +template<class BasicTurbulenceModel> +void SpalartAllmarasDES<BasicTurbulenceModel>::correctNut() +{ + correctNut(fv1(this->chi())); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +SpalartAllmarasDES<BasicTurbulenceModel>::SpalartAllmarasDES +( + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName, + const word& type +) +: + LESeddyViscosity<BasicTurbulenceModel> + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + sigmaNut_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "sigmaNut", + this->coeffDict_, + 0.66666 + ) + ), + kappa_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "kappa", + this->coeffDict_, + 0.41 + ) + ), + Cb1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cb1", + this->coeffDict_, + 0.1355 + ) + ), + Cb2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cb2", + this->coeffDict_, + 0.622 + ) + ), + Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), + Cw2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cw2", + this->coeffDict_, + 0.3 + ) + ), + Cw3_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cw3", + this->coeffDict_, + 2.0 + ) + ), + Cv1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cv1", + this->coeffDict_, + 7.1 + ) + ), + Cs_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cs", + this->coeffDict_, + 0.3 + ) + ), + CDES_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "CDES", + this->coeffDict_, + 0.65 + ) + ), + ck_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "ck", + this->coeffDict_, + 0.07 + ) + ), + + nuTilda_ + ( + IOobject + ( + "nuTilda", + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ), + + y_(wallDist::New(this->mesh_).y()) +{ + if (type == typeName) + { + correctNut(); + this->printCoeffs(type); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool SpalartAllmarasDES<BasicTurbulenceModel>::read() +{ + if (LESeddyViscosity<BasicTurbulenceModel>::read()) + { + sigmaNut_.readIfPresent(this->coeffDict()); + kappa_.readIfPresent(*this); + + Cb1_.readIfPresent(this->coeffDict()); + Cb2_.readIfPresent(this->coeffDict()); + Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; + Cw2_.readIfPresent(this->coeffDict()); + Cw3_.readIfPresent(this->coeffDict()); + Cv1_.readIfPresent(this->coeffDict()); + Cs_.readIfPresent(this->coeffDict()); + + CDES_.readIfPresent(this->coeffDict()); + ck_.readIfPresent(this->coeffDict()); + + return true; + } + else + { + return false; + } +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>:: +DnuTildaEff() const +{ + return tmp<volScalarField> + ( + new volScalarField("DnuTildaEff", (nuTilda_ + this->nu())/sigmaNut_) + ); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::k() const +{ + const volScalarField chi(this->chi()); + const volScalarField fv1(this->fv1(chi)); + return sqr(this->nut()/ck_/dTilda(chi, fv1, fvc::grad(this->U_))); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasDES<BasicTurbulenceModel>::LESRegion() const +{ + const volScalarField chi(this->chi()); + const volScalarField fv1(this->fv1(chi)); + + tmp<volScalarField> tLESRegion + ( + new volScalarField + ( + IOobject + ( + "DES::LESRegion", + this->mesh_.time().timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + neg(dTilda(chi, fv1, fvc::grad(this->U_)) - y_) + ) + ); + + return tLESRegion; +} + + +template<class BasicTurbulenceModel> +void SpalartAllmarasDES<BasicTurbulenceModel>::correct() +{ + if (!this->turbulence_) + { + return; + } + + // Local references + const alphaField& alpha = this->alpha_; + const rhoField& rho = this->rho_; + const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_; + const volVectorField& U = this->U_; + + LESeddyViscosity<BasicTurbulenceModel>::correct(); + + const volScalarField chi(this->chi()); + const volScalarField fv1(this->fv1(chi)); + + tmp<volTensorField> tgradU = fvc::grad(U); + const volScalarField Omega(this->Omega(tgradU())); + const volScalarField dTilda(this->dTilda(chi, fv1, tgradU())); + const volScalarField Stilda(this->Stilda(chi, fv1, Omega, dTilda)); + + tmp<fvScalarMatrix> nuTildaEqn + ( + fvm::ddt(alpha, rho, nuTilda_) + + fvm::div(alphaRhoPhi, nuTilda_) + - fvm::laplacian(alpha*rho*DnuTildaEff(), nuTilda_) + - Cb2_/sigmaNut_*alpha*rho*magSqr(fvc::grad(nuTilda_)) + == + Cb1_*alpha*rho*Stilda*nuTilda_ + - fvm::Sp + ( + Cw1_*alpha*rho*fw(Stilda, dTilda)*nuTilda_/sqr(dTilda), + nuTilda_ + ) + ); + + nuTildaEqn().relax(); + solve(nuTildaEqn); + bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0)); + nuTilda_.correctBoundaryConditions(); + + correctNut(fv1); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace LESModels +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.H b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.H similarity index 54% rename from src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.H rename to src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.H index f5753ebfcc0..4c512487a3f 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.H +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasDES/SpalartAllmarasDES.H @@ -22,209 +22,203 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::LESModels::SpalartAllmaras + Foam::LESModels::SpalartAllmarasDES Group - grpIcoDESTurbulence + grpDESTurbulence Description - SpalartAllmaras DES (SA + LES) turbulence model for incompressible flows + SpalartAllmarasDES DES turbulence model for incompressible and + compressible flows - Extended according to + Reference: \verbatim - "An Unstructured Grid Generation and Adaptive Solution Technique - for High Reynolds Number Compressible Flows" - G.A. Ashford, - Ph.D. thesis, University of Michigan, 1996. + Spalart, P. R., Jou, W. H., Strelets, M., & Allmaras, S. R. (1997). + Comments on the feasibility of LES for wings, and on a hybrid + RANS/LES approach. + Advances in DNS/LES, 1, 4-8. \endverbatim - by using the optional flag \c ashfordCorrection SourceFiles - SpalartAllmaras.C + SpalartAllmarasDES.C \*---------------------------------------------------------------------------*/ -#ifndef SpalartAllmaras_H -#define SpalartAllmaras_H +#ifndef SpalartAllmarasDES_H +#define SpalartAllmarasDES_H -#include "DESModel.H" -#include "volFields.H" -#include "wallDist.H" +#include "LESeddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { /*---------------------------------------------------------------------------*\ - Class SpalartAllmaras Declaration + Class SpalartAllmarasDES Declaration \*---------------------------------------------------------------------------*/ -class SpalartAllmaras +template<class BasicTurbulenceModel> +class SpalartAllmarasDES : - public DESModel + public LESeddyViscosity<BasicTurbulenceModel> { // Private Member Functions - //- Update sub-grid scale fields - void updateSubGridScaleFields(); - // Disallow default bitwise copy construct and assignment - SpalartAllmaras(const SpalartAllmaras&); - SpalartAllmaras& operator=(const SpalartAllmaras&); + SpalartAllmarasDES(const SpalartAllmarasDES&); + SpalartAllmarasDES& operator=(const SpalartAllmarasDES&); protected: // Protected data - dimensionedScalar sigmaNut_; - dimensionedScalar kappa_; - - // Model constants + dimensionedScalar sigmaNut_; + dimensionedScalar kappa_; + dimensionedScalar Cb1_; dimensionedScalar Cb2_; - dimensionedScalar Cv1_; - dimensionedScalar Cv2_; - dimensionedScalar CDES_; - dimensionedScalar ck_; dimensionedScalar Cw1_; dimensionedScalar Cw2_; dimensionedScalar Cw3_; - - - //- Optional flag to activate the Ashford correction - Switch ashfordCorrection_; - + dimensionedScalar Cv1_; + dimensionedScalar Cs_; + dimensionedScalar CDES_; + dimensionedScalar ck_; // Fields + volScalarField nuTilda_; + //- Wall distance // Note: different to wall distance in parent RASModel // which is for near-wall cells only const volScalarField& y_; - volScalarField nuTilda_; - volScalarField nuSgs_; - // Protected Member Functions - virtual tmp<volScalarField> fv1() const; - virtual tmp<volScalarField> fv2() const; - virtual tmp<volScalarField> fv3() const; - virtual tmp<volScalarField> S(const volTensorField& gradU) const; + tmp<volScalarField> chi() const; - virtual tmp<volScalarField> STilda + tmp<volScalarField> fv1(const volScalarField& chi) const; + + tmp<volScalarField> fv2 ( - const volScalarField& S, + const volScalarField& chi, + const volScalarField& fv1 + ) const; + + tmp<volScalarField> S(const volTensorField& gradU) const; + + tmp<volScalarField> Omega(const volTensorField& gradU) const; + + tmp<volScalarField> Stilda + ( + const volScalarField& chi, + const volScalarField& fv1, + const volScalarField& Omega, const volScalarField& dTilda ) const; - virtual tmp<volScalarField> r + tmp<volScalarField> r ( - const volScalarField& visc, - const volScalarField& S, + const volScalarField& nur, + const volScalarField& Omega, const volScalarField& dTilda ) const; - virtual tmp<volScalarField> fw + tmp<volScalarField> fw ( - const volScalarField& S, + const volScalarField& Omega, const volScalarField& dTilda ) const; //- Length scale - virtual tmp<volScalarField> dTilda(const volScalarField& S) const; + virtual tmp<volScalarField> dTilda + ( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU + ) const; + + void correctNut(const volScalarField& fv1); + virtual void correctNut(); public: + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + //- Runtime type information - TypeName("SpalartAllmaras"); + TypeName("SpalartAllmarasDES"); // Constructors //- Construct from components - SpalartAllmaras + SpalartAllmarasDES ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); //- Destructor - virtual ~SpalartAllmaras() + virtual ~SpalartAllmarasDES() {} // Member Functions + //- Read LESProperties dictionary + virtual bool read(); + + //- Return the effective diffusivity for nuTilda + tmp<volScalarField> DnuTildaEff() const; + //- Return SGS kinetic energy virtual tmp<volScalarField> k() const; - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const; - tmp<volScalarField> nuTilda() const { return nuTilda_; } - //- Return SGS viscosity - virtual tmp<volScalarField> nuSgs() const - { - return nuSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Correct nuTilda and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); - //- Return the LES field indicator virtual tmp<volScalarField> LESRegion() const; + + //- Correct nuTilda and related properties + virtual void correct(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpalartAllmarasDES.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C similarity index 54% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C rename to src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C index eade16f384f..f96cdc6a161 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.C @@ -24,73 +24,63 @@ License \*---------------------------------------------------------------------------*/ #include "SpalartAllmarasIDDES.H" -#include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmarasIDDES, 0); -addToRunTimeSelectionTable(LESModel, SpalartAllmarasIDDES, dictionary); - // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // -tmp<volScalarField> SpalartAllmarasIDDES::alpha() const +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::alpha() const { return max ( - 0.25 - y_/static_cast<const volScalarField&>(hmax_()), + 0.25 - this->y_/static_cast<const volScalarField&>(IDDESDelta_.hmax()), scalar(-5) ); } -tmp<volScalarField> SpalartAllmarasIDDES::ft +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::ft ( - const volScalarField& S + const volScalarField& magGradU ) const { - return tanh(pow3(sqr(ct_)*rd(nuSgs_, S))); + return tanh(pow3(sqr(ct_)*rd(this->nut_, magGradU))); } -tmp<volScalarField> SpalartAllmarasIDDES::fl +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::fl ( - const volScalarField& S + const volScalarField& magGradU ) const { - return tanh(pow(sqr(cl_)*rd(nu(), S), 10)); + return tanh(pow(sqr(cl_)*rd(this->nu(), magGradU), 10)); } -tmp<volScalarField> SpalartAllmarasIDDES::rd +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::rd ( - const volScalarField& visc, - const volScalarField& S + const volScalarField& nur, + const volScalarField& magGradU ) const { return min ( - visc + nur /( max ( - S, - dimensionedScalar("SMALL", S.dimensions(), SMALL) - )*sqr(kappa_*y_) - + dimensionedScalar - ( - "ROOTVSMALL", - dimensionSet(0, 2 , -1, 0, 0), - ROOTVSMALL - ) + magGradU, + dimensionedScalar("SMALL", magGradU.dimensions(), SMALL) + )*sqr(this->kappa_*this->y_) ), scalar(10) ); @@ -99,23 +89,34 @@ tmp<volScalarField> SpalartAllmarasIDDES::rd // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -tmp<volScalarField> SpalartAllmarasIDDES::fd(const volScalarField& S) const +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::fd +( + const volScalarField& magGradU +) const { - return 1 - tanh(pow3(8*rd(nuEff(), S))); + return 1 - tanh(pow3(8*rd(this->nuEff(), magGradU))); } -tmp<volScalarField> SpalartAllmarasIDDES::dTilda(const volScalarField& S) const +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmarasIDDES<BasicTurbulenceModel>::dTilda +( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU +) const { const volScalarField alpha(this->alpha()); const volScalarField expTerm(exp(sqr(alpha))); + const volScalarField magGradU(mag(gradU)); tmp<volScalarField> fHill = 2*(pos(alpha)*pow(expTerm, -11.09) + neg(alpha)*pow(expTerm, -9.0)); tmp<volScalarField> fStep = min(2*pow(expTerm, -9.0), scalar(1)); - const volScalarField fHyb(max(1 - fd(S), fStep)); - tmp<volScalarField> fAmp = 1 - max(ft(S), fl(S)); + const volScalarField fHyb(max(1 - fd(magGradU), fStep)); + tmp<volScalarField> fAmp = 1 - max(ft(magGradU), fl(magGradU)); tmp<volScalarField> fRestore = max(fHill - 1, scalar(0))*fAmp; // IGNORING ft2 terms @@ -126,7 +127,11 @@ tmp<volScalarField> SpalartAllmarasIDDES::dTilda(const volScalarField& S) const min ( scalar(100), - (1 - Cb1_/(Cw1_*sqr(kappa_)*fwStar_)*fv2())/max(SMALL, fv1()) + ( + 1 + - this->Cb1_*this->fv2(chi, fv1) + /(this->Cw1_*sqr(this->kappa_)*fwStar_) + )/max(SMALL, fv1) ) ) ); @@ -134,48 +139,43 @@ tmp<volScalarField> SpalartAllmarasIDDES::dTilda(const volScalarField& S) const return max ( dimensionedScalar("SMALL", dimLength, SMALL), - fHyb*(1 + fRestore*Psi)*y_ - + (1 - fHyb)*CDES_*Psi*delta() + fHyb*(1 + fRestore*Psi)*this->y_ + + (1 - fHyb)*this->CDES_*Psi*this->delta() ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -SpalartAllmarasIDDES::SpalartAllmarasIDDES +template<class BasicTurbulenceModel> +SpalartAllmarasIDDES<BasicTurbulenceModel>::SpalartAllmarasIDDES ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName, - const word& modelName + const word& propertiesName, + const word& type ) : - SpalartAllmaras(U, phi, transport, turbulenceModelName, modelName), - hmax_ + SpalartAllmarasDES<BasicTurbulenceModel> ( - LESdelta::New - ( - "hmax", - mesh_, - *this - ) - ), - IDDESDelta_ - ( - LESdelta::New - ( - "IDDESDelta", - mesh_, - this->subDict(typeName + "Coeffs") - ) + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName ), fwStar_ ( dimensioned<scalar>::lookupOrAddToDict ( "fwStar", - coeffDict_, + this->coeffDict_, 0.424 ) ), @@ -184,7 +184,7 @@ SpalartAllmarasIDDES::SpalartAllmarasIDDES dimensioned<scalar>::lookupOrAddToDict ( "cl", - coeffDict_, + this->coeffDict_, 3.55 ) ), @@ -193,20 +193,24 @@ SpalartAllmarasIDDES::SpalartAllmarasIDDES dimensioned<scalar>::lookupOrAddToDict ( "ct", - coeffDict_, + this->coeffDict_, 1.63 ) - ) + ), + IDDESDelta_(refCast<IDDESDelta>(this->delta_())) {} -bool SpalartAllmarasIDDES::read() +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool SpalartAllmarasIDDES<BasicTurbulenceModel>::read() { - if (SpalartAllmaras::read()) + if (SpalartAllmarasDES<BasicTurbulenceModel>::read()) { - fwStar_.readIfPresent(coeffDict()); - cl_.readIfPresent(coeffDict()); - ct_.readIfPresent(coeffDict()); + fwStar_.readIfPresent(this->coeffDict()); + cl_.readIfPresent(this->coeffDict()); + ct_.readIfPresent(this->coeffDict()); return true; } @@ -220,7 +224,6 @@ bool SpalartAllmarasIDDES::read() // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H similarity index 63% rename from src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H rename to src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H index 036d3191304..2bfaf6089a1 100644 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H +++ b/src/TurbulenceModels/turbulenceModels/LES/SpalartAllmarasIDDES/SpalartAllmarasIDDES.H @@ -22,13 +22,22 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::LESModels::SpalartAllmarasIDDES + Foam::LESModels::SpalartAllmarasIDDES Group - grpIcoDESTurbulence + grpDESTurbulence Description - SpalartAllmarasIDDES LES turbulence model for incompressible flows + SpalartAllmaras IDDES turbulence model for incompressible and compressible + flows + + Reference: + \verbatim + Shur, M. L., Spalart, P. R., Strelets, M. K., & Travin, A. K. (2008). + A hybrid RANS-LES approach with delayed-DES and wall-modelled LES + capabilities. + International Journal of Heat and Fluid Flow, 29(6), 1638-1649. + \endverbatim SourceFiles SpalartAllmarasIDDES.C @@ -38,14 +47,13 @@ SourceFiles #ifndef SpalartAllmarasIDDES_H #define SpalartAllmarasIDDES_H -#include "SpalartAllmaras.H" +#include "SpalartAllmarasDES.H" +#include "IDDESDelta.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace LESModels { @@ -53,35 +61,38 @@ namespace LESModels Class SpalartAllmarasIDDES Declaration \*---------------------------------------------------------------------------*/ +template<class BasicTurbulenceModel> class SpalartAllmarasIDDES : - public SpalartAllmaras + public SpalartAllmarasDES<BasicTurbulenceModel> { // Private data // Model constants - autoPtr<Foam::LESdelta> hmax_; - autoPtr<Foam::LESdelta> IDDESDelta_; dimensionedScalar fwStar_; dimensionedScalar cl_; dimensionedScalar ct_; + // Fields + + const IDDESDelta& IDDESDelta_; + // Private Member Functions tmp<volScalarField> alpha() const; - tmp<volScalarField> ft(const volScalarField& S) const; - tmp<volScalarField> fl(const volScalarField& S) const; + tmp<volScalarField> ft(const volScalarField& magGradU) const; + tmp<volScalarField> fl(const volScalarField& magGradU) const; tmp<volScalarField> rd ( - const volScalarField& visc, - const volScalarField& S + const volScalarField& nur, + const volScalarField& magGradU ) const; //- Delay function - tmp<volScalarField> fd(const volScalarField& S) const; + tmp<volScalarField> fd(const volScalarField& magGradU) const; // Disallow default bitwise copy construct and assignment SpalartAllmarasIDDES(const SpalartAllmarasIDDES&); @@ -93,11 +104,21 @@ protected: // Protected Member Functions //- Length scale - virtual tmp<volScalarField> dTilda(const volScalarField& S) const; + virtual tmp<volScalarField> dTilda + ( + const volScalarField& chi, + const volScalarField& fv1, + const volTensorField& gradU + ) const; public: + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + //- Runtime type information TypeName("SpalartAllmarasIDDES"); @@ -107,11 +128,14 @@ public: //- Construct from components SpalartAllmarasIDDES ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -122,12 +146,6 @@ public: // Member Functions - //- Access function to filter width - virtual const volScalarField& delta() const - { - return IDDESDelta_(); - } - //- Read LESProperties dictionary virtual bool read(); }; @@ -136,11 +154,16 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpalartAllmarasIDDES.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/LES/eddyViscosity/LESeddyViscosity.C b/src/TurbulenceModels/turbulenceModels/LES/eddyViscosity/LESeddyViscosity.C index b3d1c98f10b..2a58c71e358 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/eddyViscosity/LESeddyViscosity.C +++ b/src/TurbulenceModels/turbulenceModels/LES/eddyViscosity/LESeddyViscosity.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -92,6 +92,8 @@ bool LESeddyViscosity<BasicTurbulenceModel>::read() template<class BasicTurbulenceModel> tmp<volScalarField> LESeddyViscosity<BasicTurbulenceModel>::epsilon() const { + tmp<volScalarField> tk(this->k()); + return tmp<volScalarField> ( new volScalarField @@ -104,7 +106,7 @@ tmp<volScalarField> LESeddyViscosity<BasicTurbulenceModel>::epsilon() const IOobject::NO_READ, IOobject::NO_WRITE ), - Ce_*this->k()*sqrt(this->k())/this->delta() + Ce_*tk()*sqrt(tk())/this->delta() ) ); } diff --git a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.H b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.H index 6a2a307da2e..b525666a798 100644 --- a/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.H +++ b/src/TurbulenceModels/turbulenceModels/LES/kEqn/kEqn.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -65,7 +65,6 @@ SourceFiles #ifndef kEqn_H #define kEqn_H -#include "LESModel.H" #include "LESeddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -95,9 +94,14 @@ protected: // Protected data - volScalarField k_; + // Fields - dimensionedScalar Ck_; + volScalarField k_; + + + // Model constants + + dimensionedScalar Ck_; // Protected Member Functions diff --git a/src/TurbulenceModels/turbulenceModels/Make/files b/src/TurbulenceModels/turbulenceModels/Make/files index 47c070ccbbb..0dffeeaa325 100644 --- a/src/TurbulenceModels/turbulenceModels/Make/files +++ b/src/TurbulenceModels/turbulenceModels/Make/files @@ -5,8 +5,10 @@ LESdelta = LES/LESdeltas $(LESdelta)/LESdelta/LESdelta.C $(LESdelta)/cubeRootVolDelta/cubeRootVolDelta.C $(LESdelta)/PrandtlDelta/PrandtlDelta.C +$(LESdelta)/vanDriestDelta/vanDriestDelta.C $(LESdelta)/smoothDelta/smoothDelta.C $(LESdelta)/maxDeltaxyz/maxDeltaxyz.C +$(LESdelta)/IDDESDelta/IDDESDelta.C LESfilters = LES/LESfilters @@ -19,7 +21,7 @@ $(LESfilters)/anisotropicFilter/anisotropicFilter.C derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C -/* Wall functions */ +/* Wall function BCs */ wallFunctions = RAS/derivedFvPatchFields/wallFunctions nutWallFunctions = $(wallFunctions)/nutWallFunctions @@ -54,10 +56,14 @@ fWallFunctions = $(wallFunctions)/fWallFunctions $(fWallFunctions)/fWallFunction/fWallFunctionFvPatchScalarField.C */ -/* Patch fields */ +/* Inlet turbulence BCs */ RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C -RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C + +/* Atmospheric boundary layer BCs */ +RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C +RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C +RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C LIB = $(FOAM_LIBBIN)/libturbulenceModels diff --git a/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C new file mode 100644 index 00000000000..61addc591d8 --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.C @@ -0,0 +1,310 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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 "LaunderSharmaKE.H" +#include "bound.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace RASModels +{ + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +tmp<volScalarField> LaunderSharmaKE<BasicTurbulenceModel>::fMu() const +{ + return exp(-3.4/sqr(scalar(1) + sqr(k_)/(this->nu()*epsilon_)/50.0)); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> LaunderSharmaKE<BasicTurbulenceModel>::f2() const +{ + return + scalar(1) + - 0.3*exp(-min(sqr(sqr(k_)/(this->nu()*epsilon_)), scalar(50.0))); +} + + +template<class BasicTurbulenceModel> +void LaunderSharmaKE<BasicTurbulenceModel>::correctNut() +{ + this->nut_ = Cmu_*fMu()*sqr(k_)/epsilon_; + this->nut_.correctBoundaryConditions(); +} + + +template<class BasicTurbulenceModel> +tmp<fvScalarMatrix> LaunderSharmaKE<BasicTurbulenceModel>::kSource() const +{ + return tmp<fvScalarMatrix> + ( + new fvScalarMatrix + ( + k_, + dimVolume*this->rho_.dimensions()*k_.dimensions() + /dimTime + ) + ); +} + + +template<class BasicTurbulenceModel> +tmp<fvScalarMatrix> LaunderSharmaKE<BasicTurbulenceModel>::epsilonSource() const +{ + return tmp<fvScalarMatrix> + ( + new fvScalarMatrix + ( + epsilon_, + dimVolume*this->rho_.dimensions()*epsilon_.dimensions() + /dimTime + ) + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +LaunderSharmaKE<BasicTurbulenceModel>::LaunderSharmaKE +( + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName, + const word& type +) +: + eddyViscosity<RASModel<BasicTurbulenceModel> > + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + Cmu_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cmu", + this->coeffDict_, + 0.09 + ) + ), + C1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "C1", + this->coeffDict_, + 1.44 + ) + ), + C2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "C2", + this->coeffDict_, + 1.92 + ) + ), + C3_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "C3", + this->coeffDict_, + -0.33 + ) + ), + sigmak_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "sigmak", + this->coeffDict_, + 1.0 + ) + ), + sigmaEps_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "sigmaEps", + this->coeffDict_, + 1.3 + ) + ), + + k_ + ( + IOobject + ( + "k", + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ), + + epsilon_ + ( + IOobject + ( + "epsilon", + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ) +{ + bound(k_, this->kMin_); + bound(epsilon_, this->epsilonMin_); + + if (type == typeName) + { + correctNut(); + this->printCoeffs(type); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool LaunderSharmaKE<BasicTurbulenceModel>::read() +{ + if (eddyViscosity<RASModel<BasicTurbulenceModel> >::read()) + { + Cmu_.readIfPresent(this->coeffDict()); + C1_.readIfPresent(this->coeffDict()); + C2_.readIfPresent(this->coeffDict()); + C3_.readIfPresent(this->coeffDict()); + sigmak_.readIfPresent(this->coeffDict()); + sigmaEps_.readIfPresent(this->coeffDict()); + + return true; + } + else + { + return false; + } +} + + +template<class BasicTurbulenceModel> +void LaunderSharmaKE<BasicTurbulenceModel>::correct() +{ + if (!this->turbulence_) + { + return; + } + + // Local references + const alphaField& alpha = this->alpha_; + const rhoField& rho = this->rho_; + const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_; + const volVectorField& U = this->U_; + volScalarField& nut = this->nut_; + + eddyViscosity<RASModel<BasicTurbulenceModel> >::correct(); + + volScalarField divU(fvc::div(fvc::absolute(this->phi(), U))); + + // Calculate parameters and coefficients for Launder-Sharma low-Reynolds + // number model + + volScalarField E(2.0*this->nu()*nut*fvc::magSqrGradGrad(U)); + volScalarField D(2.0*this->nu()*magSqr(fvc::grad(sqrt(k_)))); + + tmp<volTensorField> tgradU = fvc::grad(U); + volScalarField G(this->GName(), nut*(tgradU() && dev(twoSymm(tgradU())))); + tgradU.clear(); + + + // Dissipation equation + tmp<fvScalarMatrix> epsEqn + ( + fvm::ddt(alpha, rho, epsilon_) + + fvm::div(alphaRhoPhi, epsilon_) + - fvm::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), epsilon_) + - fvm::laplacian(alpha*rho*DepsilonEff(), epsilon_) + == + C1_*alpha*rho*G*epsilon_/k_ + - fvm::SuSp(((2.0/3.0)*C1_ + C3_)*alpha*rho*divU, epsilon_) + - fvm::Sp(C2_*f2()*alpha*rho*epsilon_/k_, epsilon_) + + alpha*rho*E + + epsilonSource() + ); + + epsEqn().relax(); + solve(epsEqn); + bound(epsilon_, this->epsilonMin_); + + + // Turbulent kinetic energy equation + tmp<fvScalarMatrix> kEqn + ( + fvm::ddt(alpha, rho, k_) + + fvm::div(alphaRhoPhi, k_) + - fvm::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), k_) + - fvm::laplacian(alpha*rho*DkEff(), k_) + == + alpha*rho*G - fvm::SuSp(2.0/3.0*alpha*rho*divU, k_) + - fvm::Sp(alpha*rho*(epsilon_ + D)/k_, k_) + + kSource() + ); + + kEqn().relax(); + solve(kEqn); + bound(k_, this->kMin_); + + correctNut(); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace RASModels +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.H similarity index 65% rename from src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H rename to src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.H index dd6fee6f1b6..8b67ea50fc1 100644 --- a/src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/LaunderSharmaKE/LaunderSharmaKE.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,27 +22,27 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::compressible::RASModels::LaunderSharmaKE + Foam::RASModels::LaunderSharmaKE Group - grpCmpRASTurbulence + grpRASTurbulence Description Launder and Sharma low-Reynolds k-epsilon turbulence model for - compressible and combusting flows including rapid distortion theory (RDT) - based compression term. + incompressible and compressible and combusting flows including + rapid distortion theory (RDT) based compression term. References: \verbatim - "Application of the Energy-Dissipation Model of Turbulence - to the Calculation of Flow Near a Spinning Disc", - Launder, B. E. and Sharma, B. I., - Letters in Heat and Mass Transfer, Vol. 1, No. 2, 1974, pp 131-138. + Launder, B. E., & Sharma, B. I. (1974). + Application of the energy-dissipation model of turbulence to the + calculation of flow near a spinning disc. + Letters in heat and mass transfer, 1(2), 131-137. For the RDT-based compression term: - "k-epsilon equations for compressible reciprocating engine flows" - El Tahry, S. H., - AIAA Journal of Energy 7, 1983, pp 345-353. + El Tahry, S. H. (1983). + k-epsilon equation for compressible reciprocating engine flows. + Journal of Energy, 7(4), 345-353. \endverbatim The default model coefficients correspond to the following: @@ -64,17 +64,16 @@ SourceFiles \*---------------------------------------------------------------------------*/ -#ifndef compressibleLaunderSharmaKE_H -#define compressibleLaunderSharmaKE_H +#ifndef LaunderSharmaKE_H +#define LaunderSharmaKE_H #include "RASModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace compressible -{ namespace RASModels { @@ -82,10 +81,17 @@ namespace RASModels Class LaunderSharmaKE Declaration \*---------------------------------------------------------------------------*/ +template<class BasicTurbulenceModel> class LaunderSharmaKE : - public RASModel + public eddyViscosity<RASModel<BasicTurbulenceModel> > { + // Private Member Functions + + // Disallow default bitwise copy construct and assignment + LaunderSharmaKE(const LaunderSharmaKE&); + LaunderSharmaKE& operator=(const LaunderSharmaKE&); + protected: @@ -99,15 +105,12 @@ protected: dimensionedScalar C3_; dimensionedScalar sigmak_; dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; // Fields volScalarField k_; volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; // Private Member Functions @@ -115,23 +118,35 @@ protected: tmp<volScalarField> fMu() const; tmp<volScalarField> f2() const; + virtual void correctNut(); + virtual tmp<fvScalarMatrix> kSource() const; + virtual tmp<fvScalarMatrix> epsilonSource() const; + public: + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + //- Runtime type information TypeName("LaunderSharmaKE"); + // Constructors //- Construct from components LaunderSharmaKE ( - const volScalarField& rho, + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const transportModel& transport, + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -142,12 +157,19 @@ public: // Member Functions + //- Re-read model coefficients if they have changed + virtual bool read(); + //- Return the effective diffusivity for k tmp<volScalarField> DkEff() const { return tmp<volScalarField> ( - new volScalarField("DkEff", mut_/sigmak_ + mu()) + new volScalarField + ( + "DkEff", + (this->nut_/sigmak_ + this->nu()) + ) ); } @@ -156,22 +178,14 @@ public: { return tmp<volScalarField> ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) + new volScalarField + ( + "DepsilonEff", + (this->nut_/sigmaEps_ + this->nu()) + ) ); } - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - //- Return the turbulence kinetic energy virtual tmp<volScalarField> k() const { @@ -184,31 +198,24 @@ public: return epsilon_; } - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace RASModels -} // End namespace compressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "LaunderSharmaKE.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C index ada33eb5ff4..9dfd900c650 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -54,6 +54,7 @@ Foam::RASModel<BasicTurbulenceModel>::RASModel : BasicTurbulenceModel ( + type, alpha, rho, U, diff --git a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.H b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.H index 51acd76873c..7ecd22b2b28 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/RASModel/RASModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -21,12 +21,6 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. -Namespace - Foam::RASModels - -Description - Namespace for RAS turbulence models. - Class Foam::RASModel diff --git a/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C new file mode 100644 index 00000000000..c07e677155f --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.C @@ -0,0 +1,389 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmaras.H" +#include "bound.H" +#include "wallDist.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace RASModels +{ + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::chi() const +{ + return nuTilda_/this->nu(); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::fv1 +( + const volScalarField& chi +) const +{ + const volScalarField chi3(pow3(chi)); + return chi3/(chi3 + pow3(Cv1_)); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::fv2 +( + const volScalarField& chi, + const volScalarField& fv1 +) const +{ + return 1.0 - chi/(1.0 + chi*fv1); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::Stilda +( + const volScalarField& chi, + const volScalarField& fv1 +) const +{ + volScalarField Omega(::sqrt(2.0)*mag(skew(fvc::grad(this->U_)))); + + return + ( + max + ( + Omega + + fv2(chi, fv1)*nuTilda_/sqr(kappa_*y_), + Cs_*Omega + ) + ); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::fw +( + const volScalarField& Stilda +) const +{ + volScalarField r + ( + min + ( + nuTilda_ + /( + max + ( + Stilda, + dimensionedScalar("SMALL", Stilda.dimensions(), SMALL) + ) + *sqr(kappa_*y_) + ), + scalar(10.0) + ) + ); + r.boundaryField() == 0.0; + + const volScalarField g(r + Cw2_*(pow6(r) - r)); + + return g*pow((1.0 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); +} + + +template<class BasicTurbulenceModel> +void SpalartAllmaras<BasicTurbulenceModel>::correctNut +( + const volScalarField& fv1 +) +{ + this->nut_ = nuTilda_*fv1; + this->nut_.correctBoundaryConditions(); +} + + +template<class BasicTurbulenceModel> +void SpalartAllmaras<BasicTurbulenceModel>::correctNut() +{ + correctNut(fv1(this->chi())); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +SpalartAllmaras<BasicTurbulenceModel>::SpalartAllmaras +( + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName, + const word& type +) +: + eddyViscosity<RASModel<BasicTurbulenceModel> > + ( + type, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + sigmaNut_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "sigmaNut", + this->coeffDict_, + 0.66666 + ) + ), + kappa_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "kappa", + this->coeffDict_, + 0.41 + ) + ), + + Cb1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cb1", + this->coeffDict_, + 0.1355 + ) + ), + Cb2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cb2", + this->coeffDict_, + 0.622 + ) + ), + Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), + Cw2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cw2", + this->coeffDict_, + 0.3 + ) + ), + Cw3_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cw3", + this->coeffDict_, + 2.0 + ) + ), + Cv1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cv1", + this->coeffDict_, + 7.1 + ) + ), + Cs_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cs", + this->coeffDict_, + 0.3 + ) + ), + + nuTilda_ + ( + IOobject + ( + "nuTilda", + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ), + + y_(wallDist::New(this->mesh_).y()) +{ + if (type == typeName) + { + correctNut(); + this->printCoeffs(type); + } +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool SpalartAllmaras<BasicTurbulenceModel>::read() +{ + if (eddyViscosity<RASModel<BasicTurbulenceModel> >::read()) + { + sigmaNut_.readIfPresent(this->coeffDict()); + kappa_.readIfPresent(this->coeffDict()); + + Cb1_.readIfPresent(this->coeffDict()); + Cb2_.readIfPresent(this->coeffDict()); + Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; + Cw2_.readIfPresent(this->coeffDict()); + Cw3_.readIfPresent(this->coeffDict()); + Cv1_.readIfPresent(this->coeffDict()); + Cs_.readIfPresent(this->coeffDict()); + + return true; + } + else + { + return false; + } +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::DnuTildaEff() const +{ + return tmp<volScalarField> + ( + new volScalarField("DnuTildaEff", (nuTilda_ + this->nu())/sigmaNut_) + ); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::k() const +{ + return tmp<volScalarField> + ( + new volScalarField + ( + IOobject + ( + "k", + this->runTime_.timeName(), + this->mesh_ + ), + this->mesh_, + dimensionedScalar("0", dimensionSet(0, 2, -2, 0, 0), 0) + ) + ); +} + + +template<class BasicTurbulenceModel> +tmp<volScalarField> SpalartAllmaras<BasicTurbulenceModel>::epsilon() const +{ + WarningIn("tmp<volScalarField> SpalartAllmaras::epsilon() const") + << "Turbulence kinetic energy dissipation rate not defined for " + << "Spalart-Allmaras model. Returning zero field" + << endl; + + return tmp<volScalarField> + ( + new volScalarField + ( + IOobject + ( + "epsilon", + this->runTime_.timeName(), + this->mesh_ + ), + this->mesh_, + dimensionedScalar("0", dimensionSet(0, 2, -3, 0, 0), 0) + ) + ); +} + + +template<class BasicTurbulenceModel> +void SpalartAllmaras<BasicTurbulenceModel>::correct() +{ + if (!this->turbulence_) + { + return; + } + + // Local references + const alphaField& alpha = this->alpha_; + const rhoField& rho = this->rho_; + const surfaceScalarField& alphaRhoPhi = this->alphaRhoPhi_; + + eddyViscosity<RASModel<BasicTurbulenceModel> >::correct(); + + const volScalarField chi(this->chi()); + const volScalarField fv1(this->fv1(chi)); + + const volScalarField Stilda(this->Stilda(chi, fv1)); + + tmp<fvScalarMatrix> nuTildaEqn + ( + fvm::ddt(alpha, rho, nuTilda_) + + fvm::div(alphaRhoPhi, nuTilda_) + - fvm::laplacian(alpha*rho*DnuTildaEff(), nuTilda_) + - Cb2_/sigmaNut_*alpha*rho*magSqr(fvc::grad(nuTilda_)) + == + Cb1_*alpha*rho*Stilda*nuTilda_ + - fvm::Sp(Cw1_*alpha*rho*fw(Stilda)*nuTilda_/sqr(y_), nuTilda_) + ); + + nuTildaEqn().relax(); + solve(nuTildaEqn); + bound(nuTilda_, dimensionedScalar("0", nuTilda_.dimensions(), 0.0)); + nuTilda_.correctBoundaryConditions(); + + correctNut(fv1); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace RASModels +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.H b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.H similarity index 68% rename from src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.H rename to src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.H index 554ad12d329..b09a325d7b4 100644 --- a/src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/SpalartAllmaras/SpalartAllmaras.H @@ -22,31 +22,31 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::RASModels::SpalartAllmaras + Foam::RASModels::SpalartAllmaras Group - grpIcoRASTurbulence + grpCmpRASTurbulence Description - Spalart-Allmaras 1-eqn mixing-length model for incompressible external - flows. + Spalart-Allmaras one-eqn mixing-length model for incompressible and + compressible external flows. - References: + Reference: \verbatim - "A One-Equation Turbulence Model for Aerodynamic Flows" - P.R. Spalart, - S.R. Allmaras, - La Recherche Aerospatiale, No. 1, 1994, pp. 5-21. + Spalart, P.R., & Allmaras, S.R. (1994). + A one-equation turbulence model for aerodynamic flows. + La Recherche Aerospatiale, 1, 5-21. \endverbatim - Extended according to - \verbatim - "An Unstructured Grid Generation and Adaptive Solution Technique - for High Reynolds Number Compressible Flows" - G.A. Ashford, - Ph.D. thesis, University of Michigan, 1996. - \endverbatim - using the optional flag \c ashfordCorrection + The model is implemented without the trip-term and hence the ft2 term is + not needed. + + It is necessary to limit the Stilda generation term as the model generates + unphysical results if this term becomes negative which occurs for complex + flow. Several approaches have been proposed to limit Stilda but it is not + clear which is the most appropriate. Here the limiter proposed by Spalart + is implemented in which Stilda is clipped at Cs*Omega with the default value + of Cs = 0.3. The default model coefficients correspond to the following: \verbatim @@ -57,7 +57,7 @@ Description Cw2 0.3; Cw3 2.0; Cv1 7.1; - Cv2 5.0; + Cs 0.3; sigmaNut 0.66666; kappa 0.41; } @@ -72,25 +72,30 @@ SourceFiles #define SpalartAllmaras_H #include "RASModel.H" -#include "wallDist.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ namespace RASModels { /*---------------------------------------------------------------------------*\ - Class SpalartAllmaras Declaration + Class SpalartAllmaras Declaration \*---------------------------------------------------------------------------*/ +template<class BasicTurbulenceModel> class SpalartAllmaras : - public RASModel + public eddyViscosity<RASModel<BasicTurbulenceModel> > { + // Private Member Functions + + // Disallow default bitwise copy construct and assignment + SpalartAllmaras(const SpalartAllmaras&); + SpalartAllmaras& operator=(const SpalartAllmaras&); + protected: @@ -107,17 +112,12 @@ protected: dimensionedScalar Cw2_; dimensionedScalar Cw3_; dimensionedScalar Cv1_; - dimensionedScalar Cv2_; - - - //- Optional flag to activate the Ashford correction - Switch ashfordCorrection_; + dimensionedScalar Cs_; // Fields volScalarField nuTilda_; - volScalarField nut_; //- Wall distance // Note: different to wall distance in parent RASModel @@ -137,7 +137,7 @@ protected: const volScalarField& fv1 ) const; - tmp<volScalarField> fv3 + tmp<volScalarField> Stilda ( const volScalarField& chi, const volScalarField& fv1 @@ -145,9 +145,17 @@ protected: tmp<volScalarField> fw(const volScalarField& Stilda) const; + void correctNut(const volScalarField& fv1); + virtual void correctNut(); + public: + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + //- Runtime type information TypeName("SpalartAllmaras"); @@ -157,11 +165,14 @@ public: //- Construct from components SpalartAllmaras ( + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName = turbulenceModel::propertiesName, + const word& type = typeName ); @@ -172,11 +183,8 @@ public: // Member Functions - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } + //- Read RASProperties dictionary + virtual bool read(); //- Return the effective diffusivity for nuTilda tmp<volScalarField> DnuTildaEff() const; @@ -187,38 +195,24 @@ public: //- Return the turbulence kinetic energy dissipation rate virtual tmp<volScalarField> epsilon() const; - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace RASModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "SpalartAllmaras.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C similarity index 97% rename from src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C rename to src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C index 1c6ff3fcff0..0ec40850460 100644 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -29,8 +29,6 @@ License namespace Foam { -namespace incompressible -{ // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -176,7 +174,6 @@ void atmBoundaryLayer::write(Ostream& os) const // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H similarity index 96% rename from src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H rename to src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H index 50641ee0e56..21e6e7bb22f 100644 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,10 +22,10 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::atmBoundaryLayer + FoamFoam::atmBoundaryLayer Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions + grpRASBoundaryConditions grpInletBoundaryConditions Description This class provides functions to evaluate the velocity and turbulence @@ -122,8 +122,6 @@ SourceFiles namespace Foam { -namespace incompressible -{ /*---------------------------------------------------------------------------*\ Class atmBoundaryLayer Declaration @@ -234,7 +232,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C index d621d888450..9b04284c0e6 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,95 +44,48 @@ atmBoundaryLayerInletEpsilonFvPatchScalarField ) : fixedValueFvPatchScalarField(p, iF), - z_(vector::zero), - kappa_(0.41), - Uref_(0), - Href_(0), - z0_(0), - zGround_(0), - Ustar_(0) + atmBoundaryLayer() {} atmBoundaryLayerInletEpsilonFvPatchScalarField:: atmBoundaryLayerInletEpsilonFvPatchScalarField ( - const atmBoundaryLayerInletEpsilonFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper + const dictionary& dict ) : - fixedValueFvPatchScalarField(ptf, p, iF, mapper), - z_(ptf.z_), - kappa_(ptf.kappa_), - Uref_(ptf.Uref_), - Href_(ptf.Href_), - z0_(ptf.z0_, mapper), - zGround_(ptf.zGround_, mapper), - Ustar_(ptf.Ustar_, mapper) -{} + fixedValueFvPatchScalarField(p, iF), + atmBoundaryLayer(patch().Cf(), dict) +{ + scalarField::operator=(epsilon(patch().Cf())); +} atmBoundaryLayerInletEpsilonFvPatchScalarField:: atmBoundaryLayerInletEpsilonFvPatchScalarField ( + const atmBoundaryLayerInletEpsilonFvPatchScalarField& psf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict + const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchScalarField(p, iF), - z_(dict.lookup("z")), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - Uref_(readScalar(dict.lookup("Uref"))), - Href_(readScalar(dict.lookup("Href"))), - z0_("z0", dict, p.size()), - zGround_("zGround", dict, p.size()), - Ustar_(p.size()) -{ - if (mag(z_) < SMALL) - { - FatalErrorIn - ( - "atmBoundaryLayerInletEpsilonFvPatchScalarField" - "(" - "const fvPatch&, " - "const DimensionedField<scalar, volMesh>&, " - "const dictionary&" - ")" - ) - << "magnitude of z vector must be greater than zero" - << abort(FatalError); - } - - forAll (Ustar_, i) - { - Ustar_[i] = kappa_*Uref_/(log((Href_ + z0_[i])/max(z0_[i] , 0.001))); - } - - z_ /= mag(z_); - - const vectorField& c = patch().Cf(); - scalarField::operator=(pow3(Ustar_)/(kappa_*((c & z_) - zGround_ + z0_))); -} + fixedValueFvPatchScalarField(psf, p, iF, mapper), + atmBoundaryLayer(psf, mapper) +{} atmBoundaryLayerInletEpsilonFvPatchScalarField:: atmBoundaryLayerInletEpsilonFvPatchScalarField ( - const atmBoundaryLayerInletEpsilonFvPatchScalarField& blpsf, + const atmBoundaryLayerInletEpsilonFvPatchScalarField& psf, const DimensionedField<scalar, volMesh>& iF ) : - fixedValueFvPatchScalarField(blpsf, iF), - z_(blpsf.z_), - kappa_(blpsf.kappa_), - Uref_(blpsf.Uref_), - Href_(blpsf.Href_), - z0_(blpsf.z0_), - zGround_(blpsf.zGround_), - Ustar_(blpsf.Ustar_) + fixedValueFvPatchScalarField(psf, iF), + atmBoundaryLayer(psf) {} @@ -144,42 +97,29 @@ void atmBoundaryLayerInletEpsilonFvPatchScalarField::autoMap ) { fixedValueFvPatchScalarField::autoMap(m); - z0_.autoMap(m); - zGround_.autoMap(m); - Ustar_.autoMap(m); + atmBoundaryLayer::autoMap(m); } void atmBoundaryLayerInletEpsilonFvPatchScalarField::rmap ( - const fvPatchScalarField& ptf, + const fvPatchScalarField& psf, const labelList& addr ) { - fixedValueFvPatchScalarField::rmap(ptf, addr); + fixedValueFvPatchScalarField::rmap(psf, addr); - const atmBoundaryLayerInletEpsilonFvPatchScalarField& blptf = - refCast<const atmBoundaryLayerInletEpsilonFvPatchScalarField>(ptf); + const atmBoundaryLayerInletEpsilonFvPatchScalarField& blpsf = + refCast<const atmBoundaryLayerInletEpsilonFvPatchScalarField>(psf); - z0_.rmap(blptf.z0_, addr); - zGround_.rmap(blptf.zGround_, addr); - Ustar_.rmap(blptf.Ustar_, addr); + atmBoundaryLayer::rmap(blpsf, addr); } void atmBoundaryLayerInletEpsilonFvPatchScalarField::write(Ostream& os) const { fvPatchScalarField::write(os); - os.writeKeyword("z") - << z_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") - << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("Uref") - << Uref_ << token::END_STATEMENT << nl; - os.writeKeyword("Href") - << Href_ << token::END_STATEMENT << nl; - z0_.writeEntry("z0", os); - zGround_.writeEntry("zGround", os); + atmBoundaryLayer::write(os); writeEntry("value", os); } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H index f18ce28dba9..bc020fed388 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,73 +22,34 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::atmBoundaryLayerInletEpsilonFvPatchScalarField + FoamFoam::atmBoundaryLayerInletEpsilonFvPatchScalarField Group grpRASBoundaryConditions grpInletBoundaryConditions Description This boundary condition specifies an inlet value for the turbulence - dissipation, \f$\epsilon\f$ (\c epsilon), appropriate for atmospheric - boundary layers (ABL), and designed to be used in conjunction with the - \c ABLInletVelocity inlet velocity boundary condition. - - \f[ - \epsilon = \frac{(U^*)^3}{K(z - z_g + z_0)} - \f] - - where - \vartable - U^* | frictional velocity - K | Karman's constant - z | vertical co-ordinate [m] - z_0 | surface roughness length [m] - z_g | minimum vlaue in z direction [m] - \endvartable - - and: - - \f[ - U^* = K \frac{U_{ref}}{ln\left(\frac{Z_{ref} + z_0}{z_0}\right)} - \f] - - where: - \vartable - U_{ref} | reference velocity at \f$Z_{ref}\f$ [m/s] - Z_{ref} | reference height [m] - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - z | vertical co-ordinate [m] | yes | - kappa | Karman's constanat | no | 0.41 - Uref | reference velocity [m/s] | yes | - Href | reference height [m] | yes | - z0 | surface roughness length [m] | yes | - zGround | minimum z co-ordinate [m] | yes | - \endtable + dissipation, \f$\epsilon\f$, appropriate for atmospheric boundary layers. + + See FoamFoam::atmBoundaryLayer for details. Example of the boundary condition specification: \verbatim - myPatch + ground { type atmBoundaryLayerInletEpsilon; - z 1.0; - kappa 0.41; - Uref 1.0; - Href 0.0; - z0 uniform 0.0; + z (0 0 1); + Uref 10.0; + Zref 20.0; + z0 uniform 0.1; zGround uniform 0.0; } \endverbatim - Reference: - D.M. Hargreaves and N.G. Wright, "On the use of the k-epsilon model - in commercial CFD software to model the neutral atmospheric boundary - layer", Journal of Wind Engineering and Industrial Aerodynamics - 95(2007), pp 355-369. +SeeAlso + FoamFoam::atmBoundaryLayer, + FoamFoam::atmBoundaryLayerInletVelocityFvPatchVectorField, + FoamFoam::atmBoundaryLayerInletKFvPatchScalarField SourceFiles atmBoundaryLayerInletEpsilonFvPatchScalarField.C @@ -100,6 +61,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" +#include "atmBoundaryLayer.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -112,31 +74,9 @@ namespace Foam class atmBoundaryLayerInletEpsilonFvPatchScalarField : - public fixedValueFvPatchScalarField + public fixedValueFvPatchScalarField, + public atmBoundaryLayer { - // Private data - - //- Direction of the z-coordinate - vector z_; - - //- Von Karman constant - const scalar kappa_; - - //- Reference velocity - const scalar Uref_; - - //- Reference height - const scalar Href_; - - //- Surface roughness length - scalarField z0_; - - //- Minimum co-ordinate value in z direction - scalarField zGround_; - - //- Frictional velocity - scalarField Ustar_; - public: @@ -202,21 +142,6 @@ public: // Member functions - // Access - - //- Return max value - const scalarField& Ustar() const - { - return Ustar_; - } - - //- Return z direction - const vector& z() const - { - return z_; - } - - // Mapping functions //- Map (and resize as needed) from self given a mapping object diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C similarity index 96% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C rename to src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C index 3980ad27e04..de2404ab13a 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,8 +33,6 @@ License namespace Foam { -namespace incompressible -{ // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -136,7 +134,6 @@ makePatchTypeField // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H similarity index 91% rename from src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H rename to src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H index 7463fce17e3..cc95eca33a7 100644 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.H @@ -22,16 +22,16 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::atmBoundaryLayerInletKFvPatchScalarField + Foam::atmBoundaryLayerInletKFvPatchScalarField Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions + grpRASBoundaryConditions grpInletBoundaryConditions Description This boundary condition specifies an inlet value for the turbulence kinetic energy, \f$k\f$, appropriate for atmospheric boundary layers. - See Foam::incompressible::atmBoundaryLayer for details. + See Foam::atmBoundaryLayer for details. Example of the boundary condition specification: \verbatim @@ -47,9 +47,9 @@ Description \endverbatim SeeAlso - Foam::incompressible::atmBoundaryLayer, - Foam::incompressible::atmBoundaryLayerInletVelocityFvPatchVectorField, - Foam::incompressible::atmBoundaryLayerInletEpsilonFvPatchScalarField + Foam::atmBoundaryLayer, + Foam::atmBoundaryLayerInletVelocityFvPatchVectorField, + Foam::atmBoundaryLayerInletEpsilonFvPatchScalarField SourceFiles atmBoundaryLayerInletKFvPatchScalarField.C @@ -67,8 +67,6 @@ SourceFiles namespace Foam { -namespace incompressible -{ /*---------------------------------------------------------------------------*\ Class atmBoundaryLayerInletKFvPatchScalarField Declaration @@ -167,7 +165,6 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C index 0966e506076..652b6e07bce 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,117 +44,48 @@ atmBoundaryLayerInletVelocityFvPatchVectorField ) : fixedValueFvPatchVectorField(p, iF), - Ustar_(0), - n_(pTraits<vector>::zero), - z_(pTraits<vector>::zero), - z0_(0), - kappa_(0.41), - Uref_(0), - Href_(0), - zGround_(0) + atmBoundaryLayer() {} atmBoundaryLayerInletVelocityFvPatchVectorField:: atmBoundaryLayerInletVelocityFvPatchVectorField ( - const atmBoundaryLayerInletVelocityFvPatchVectorField& ptf, const fvPatch& p, const DimensionedField<vector, volMesh>& iF, - const fvPatchFieldMapper& mapper + const dictionary& dict ) : - fixedValueFvPatchVectorField(ptf, p, iF, mapper), - Ustar_(ptf.Ustar_, mapper), - n_(ptf.n_), - z_(ptf.z_), - z0_(ptf.z0_, mapper), - kappa_(ptf.kappa_), - Uref_(ptf.Uref_), - Href_(ptf.Href_), - zGround_(ptf.zGround_, mapper) -{} + fixedValueFvPatchVectorField(p, iF), + atmBoundaryLayer(patch().Cf(), dict) +{ + vectorField::operator=(U(patch().Cf())); +} atmBoundaryLayerInletVelocityFvPatchVectorField:: atmBoundaryLayerInletVelocityFvPatchVectorField ( + const atmBoundaryLayerInletVelocityFvPatchVectorField& pvf, const fvPatch& p, const DimensionedField<vector, volMesh>& iF, - const dictionary& dict + const fvPatchFieldMapper& mapper ) : - fixedValueFvPatchVectorField(p, iF), - Ustar_(p.size()), - n_(dict.lookup("n")), - z_(dict.lookup("z")), - z0_("z0", dict, p.size()), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - Uref_(readScalar(dict.lookup("Uref"))), - Href_(readScalar(dict.lookup("Href"))), - zGround_("zGround", dict, p.size()) -{ - if (mag(n_) < SMALL || mag(z_) < SMALL) - { - FatalErrorIn - ( - "atmBoundaryLayerInletVelocityFvPatchVectorField" - "(" - "const fvPatch&, " - "const DimensionedField<vector, volMesh>&, " - "onst dictionary&" - ")" - ) - << "magnitude of n or z must be greater than zero" - << abort(FatalError); - } - - n_ /= mag(n_); - z_ /= mag(z_); - - forAll (Ustar_, i) - { - Ustar_[i] = kappa_*Uref_/(log((Href_ + z0_[i])/max(z0_[i] , 0.001))); - } - - const vectorField& c = patch().Cf(); - const scalarField coord(c & z_); - scalarField Un(coord.size()); - - forAll(coord, i) - { - if ((coord[i] - zGround_[i]) < Href_) - { - Un[i] = - (Ustar_[i]/kappa_) - * log((coord[i] - zGround_[i] + z0_[i])/max(z0_[i], 0.001)); - } - else - { - Un[i] = Uref_; - } - } - - vectorField::operator=(n_*Un); -} + fixedValueFvPatchVectorField(pvf, p, iF, mapper), + atmBoundaryLayer(pvf, mapper) +{} atmBoundaryLayerInletVelocityFvPatchVectorField:: atmBoundaryLayerInletVelocityFvPatchVectorField ( - const atmBoundaryLayerInletVelocityFvPatchVectorField& blpvf, + const atmBoundaryLayerInletVelocityFvPatchVectorField& pvf, const DimensionedField<vector, volMesh>& iF ) : - fixedValueFvPatchVectorField(blpvf, iF), - Ustar_(blpvf.Ustar_), - n_(blpvf.n_), - z_(blpvf.z_), - z0_(blpvf.z0_), - kappa_(blpvf.kappa_), - Uref_(blpvf.Uref_), - Href_(blpvf.Href_), - zGround_(blpvf.zGround_) + fixedValueFvPatchVectorField(pvf, iF), + atmBoundaryLayer(pvf) {} @@ -166,44 +97,29 @@ void atmBoundaryLayerInletVelocityFvPatchVectorField::autoMap ) { fixedValueFvPatchVectorField::autoMap(m); - z0_.autoMap(m); - zGround_.autoMap(m); - Ustar_.autoMap(m); + atmBoundaryLayer::autoMap(m); } void atmBoundaryLayerInletVelocityFvPatchVectorField::rmap ( - const fvPatchVectorField& ptf, + const fvPatchVectorField& pvf, const labelList& addr ) { - fixedValueFvPatchVectorField::rmap(ptf, addr); + fixedValueFvPatchVectorField::rmap(pvf, addr); - const atmBoundaryLayerInletVelocityFvPatchVectorField& blptf = - refCast<const atmBoundaryLayerInletVelocityFvPatchVectorField>(ptf); + const atmBoundaryLayerInletVelocityFvPatchVectorField& blpvf = + refCast<const atmBoundaryLayerInletVelocityFvPatchVectorField>(pvf); - z0_.rmap(blptf.z0_, addr); - zGround_.rmap(blptf.zGround_, addr); - Ustar_.rmap(blptf.Ustar_, addr); + atmBoundaryLayer::rmap(blpvf, addr); } void atmBoundaryLayerInletVelocityFvPatchVectorField::write(Ostream& os) const { fvPatchVectorField::write(os); - z0_.writeEntry("z0", os) ; - os.writeKeyword("n") - << n_ << token::END_STATEMENT << nl; - os.writeKeyword("z") - << z_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") - << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("Uref") - << Uref_ << token::END_STATEMENT << nl; - os.writeKeyword("Href") - << Href_ << token::END_STATEMENT << nl; - zGround_.writeEntry("zGround", os) ; + atmBoundaryLayer::write(os); writeEntry("value", os); } diff --git a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H index b2f7245ccbd..ea93312fa6f 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,81 +22,35 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::atmBoundaryLayerInletVelocityFvPatchVectorField + FoamFoam::atmBoundaryLayerInletVelocityFvPatchVectorField Group grpRASBoundaryConditions grpInletBoundaryConditions Description This boundary condition specifies a velocity inlet profile appropriate - for atmospheric boundary layers (ABL). The profile is derived from the - friction velocity, flow direction and the direction of the parabolic - co-ordinate \c z. - - \f[ - U = \frac{U^*}{K} ln\left(\frac{z - z_g + z_0}{z_0}\right) - \f] - - where - \vartable - U^* | frictional velocity - K | Karman's constant - z | vertical co-ordinate [m] - z_0 | surface roughness length [m] - z_g | minimum vlaue in z direction [m] - \endvartable - - and: - - \f[ - U^* = K \frac{U_{ref}}{ln\left(\frac{Z_{ref} + z_0}{z_0}\right)} - \f] - - where: - \vartable - U_{ref} | reference velocity at \f$Z_{ref}\f$ [m/s] - Z_{ref} | reference height [m] - \endvartable - - Reference: - D.M. Hargreaves and N.G. Wright, "On the use of the k-epsilon model - in commercial CFD software to model the neutral atmospheric boundary - layer", Journal of Wind Engineering and Industrial Aerodynamics - 95(2007), pp 355-369. - - \heading Patch usage - - \table - Property | Description | Required | Default value - n | flow direction | yes | - z | vertical co-ordinate [m] | yes | - kappa | Karman's constanat | no | 0.41 - Uref | reference velocity [m/s] | yes | - Href | reference height [m] | yes | - z0 | surface roughness length [m] | yes | - zGround | minimum z co-ordinate [m] | yes | - \endtable + for atmospheric boundary layers (ABL). + + See FoamFoam::atmBoundaryLayer for details. Example of the boundary condition specification: \verbatim - myPatch + ground { type atmBoundaryLayerInletVelocity; - n (0 1 0); - z 1.0; - kappa 0.41; - Uref 1.0; - Href 0.0; - z0 uniform 0.0; + n (1 0 0); + z (0 0 1); + Uref 10.0; + Zref 20.0; + z0 uniform 0.1; zGround uniform 0.0; } \endverbatim -Note - D.M. Hargreaves and N.G. Wright recommend Gamma epsilon in the - k-epsilon model should be changed from 1.3 to 1.11 for consistency. - The roughness height (Er) is given by Er = 20 z0 following the same - reference. +SeeAlso + FoamFoam::atmBoundaryLayer, + FoamFoam::atmBoundaryLayerInletKFvPatchScalarField, + FoamFoam::atmBoundaryLayerInletEpsilonFvPatchScalarField SourceFiles atmBoundaryLayerInletVelocityFvPatchVectorField.C @@ -108,6 +62,7 @@ SourceFiles #include "fvPatchFields.H" #include "fixedValueFvPatchFields.H" +#include "atmBoundaryLayer.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -120,34 +75,9 @@ namespace Foam class atmBoundaryLayerInletVelocityFvPatchVectorField : - public fixedValueFvPatchVectorField + public fixedValueFvPatchVectorField, + public atmBoundaryLayer { - // Private data - - //- Frictional velocity - scalarField Ustar_; - - //- Flow direction - vector n_; - - //- Direction of the z-coordinate - vector z_; - - //- Surface roughness lenght - scalarField z0_; - - //- Von Karman constant - const scalar kappa_; - - //- Reference velocity - const scalar Uref_; - - //- Reference hight - const scalar Href_; - - //- Minimum corrdinate value in z direction - scalarField zGround_; - public: @@ -213,27 +143,6 @@ public: // Member functions - // Access - - //- Return Ustar - const scalarField& Ustar() const - { - return Ustar_; - } - - //- Return flow direction - const vector& n() const - { - return n_; - } - - //- Return z direction - const vector& z() const - { - return z_; - } - - // Mapping functions //- Map (and resize as needed) from self given a mapping object diff --git a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C index 1b8ed898ffe..ce40a41ae69 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "v2WallFunctionFvPatchScalarField.H" +#include "turbulenceModel.H" #include "fvPatchFieldMapper.H" #include "volFields.H" #include "addToRunTimeSelectionTable.H" @@ -52,6 +53,14 @@ void v2WallFunctionFvPatchScalarField::checkType() } +void v2WallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const +{ + os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; + os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; + os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; +} + + scalar v2WallFunctionFvPatchScalarField::yPlusLam ( const scalar kappa, diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C index af1c1d0031c..f37b906a229 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C +++ b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -33,6 +33,46 @@ namespace Foam namespace RASModels { +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +void kEpsilon<BasicTurbulenceModel>::correctNut() +{ + this->nut_ = Cmu_*sqr(k_)/epsilon_; + this->nut_.correctBoundaryConditions(); +} + + +template<class BasicTurbulenceModel> +tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::kSource() const +{ + return tmp<fvScalarMatrix> + ( + new fvScalarMatrix + ( + k_, + dimVolume*this->rho_.dimensions()*k_.dimensions() + /dimTime + ) + ); +} + + +template<class BasicTurbulenceModel> +tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::epsilonSource() const +{ + return tmp<fvScalarMatrix> + ( + new fvScalarMatrix + ( + epsilon_, + dimVolume*this->rho_.dimensions()*epsilon_.dimensions() + /dimTime + ) + ); +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template<class BasicTurbulenceModel> @@ -174,44 +214,6 @@ bool kEpsilon<BasicTurbulenceModel>::read() } -template<class BasicTurbulenceModel> -void kEpsilon<BasicTurbulenceModel>::correctNut() -{ - this->nut_ = Cmu_*sqr(k_)/epsilon_; - this->nut_.correctBoundaryConditions(); -} - - -template<class BasicTurbulenceModel> -tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::kSource() const -{ - return tmp<fvScalarMatrix> - ( - new fvScalarMatrix - ( - k_, - dimVolume*this->rho_.dimensions()*k_.dimensions() - /dimTime - ) - ); -} - - -template<class BasicTurbulenceModel> -tmp<fvScalarMatrix> kEpsilon<BasicTurbulenceModel>::epsilonSource() const -{ - return tmp<fvScalarMatrix> - ( - new fvScalarMatrix - ( - epsilon_, - dimVolume*this->rho_.dimensions()*epsilon_.dimensions() - /dimTime - ) - ); -} - - template<class BasicTurbulenceModel> void kEpsilon<BasicTurbulenceModel>::correct() { diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.H b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.H index b0f1a3152fe..a5ea71e0e90 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/kEpsilon/kEpsilon.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,24 +28,24 @@ Group grpRASTurbulence Description - Standard k-epsilon turbulence model for compressible flows - including rapid distortion theory (RDT) based compression term. + Standard k-epsilon turbulence model for incompressible and compressible + flows including rapid distortion theory (RDT) based compression term. Reference: \verbatim Standard model: - Launder, B.E., and Spalding, D.B., - "Mathematical Models of Turbulence", - Academic Press, 1972. - - Launder, B.E., and Spalding, D.B., - "Computational Methods for Turbulent Flows", - Comp. Meth in Appl Mech & Eng'g, Vol 3, 1974, pp 269-289. - - Compressible form including RDT-based compression term: - "k-epsilon equations for compressible reciprocating engine flows" - El Tahry, S. H., - AIAA Journal of Energy 7, 1983, pp 345-353. + Launder, B. E., & Spalding, D. B. (1972). + Lectures in mathematical models of turbulence. + + Launder, B. E., & Spalding, D. B. (1974). + The numerical computation of turbulent flows. + Computer methods in applied mechanics and engineering, + 3(2), 269-289. + + For the RDT-based compression term: + El Tahry, S. H. (1983). + k-epsilon equation for compressible reciprocating engine flows. + Journal of Energy, 7(4), 345-353. \endverbatim The default model coefficients correspond to the following: diff --git a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H index 153518ff166..dcaf5882a5e 100644 --- a/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H +++ b/src/TurbulenceModels/turbulenceModels/RAS/kOmegaSST/kOmegaSST.H @@ -32,19 +32,21 @@ Description Turbulence model described in: \verbatim - Menter, F., Esch, T. - "Elements of Industrial Heat Transfer Prediction" - 16th Brazilian Congress of Mechanical Engineering (COBEM), - Nov. 2001 + Menter, F. R. & Esch, T. (2001). + Elements of Industrial Heat Transfer Prediction. + 16th Brazilian Congress of Mechanical Engineering (COBEM). + + Menter, F. R., Kuntz, M., and Langtry, R. (2003). + Ten Years of Industrial Experience with the SST Turbulence Model. + Turbulence, Heat and Mass Transfer 4, ed: K. Hanjalic, Y. Nagano, + & M. Tummers, Begell House, Inc., 625 - 632. \endverbatim with the addition of the optional F3 term for rough walls from \verbatim - Hellsten, A. + Hellsten, A. (1998). "Some Improvements in Menter’s k-omega-SST turbulence model" - 29th AIAA Fluid Dynamics Conference, - AIAA-98-2554, - June 1998. + 29th AIAA Fluid Dynamics Conference, AIAA-98-2554. \endverbatim Note that this implementation is written in terms of alpha diffusion diff --git a/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C new file mode 100644 index 00000000000..345e69d2a3c --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.C @@ -0,0 +1,221 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "ReynoldsStress.H" +#include "fvc.H" +#include "fvm.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::ReynoldsStress<BasicTurbulenceModel>::ReynoldsStress +( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + BasicTurbulenceModel + ( + modelName, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + couplingFactor_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "couplingFactor", + this->coeffDict_, + 0.0 + ) + ), + + R_ + ( + IOobject + ( + IOobject::groupName("R", U.group()), + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ), + + nut_ + ( + IOobject + ( + IOobject::groupName("nut", U.group()), + this->runTime_.timeName(), + this->mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + this->mesh_ + ) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool Foam::ReynoldsStress<BasicTurbulenceModel>::read() +{ + return BasicTurbulenceModel::read(); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volSymmTensorField> +Foam::ReynoldsStress<BasicTurbulenceModel>::R() const +{ + return R_; +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volScalarField> +Foam::ReynoldsStress<BasicTurbulenceModel>::k() const +{ + tmp<Foam::volScalarField> tk(tr(R_)); + tk().rename("k"); + return tk; +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volSymmTensorField> +Foam::ReynoldsStress<BasicTurbulenceModel>::devRhoReff() const +{ + return tmp<volSymmTensorField> + ( + new volSymmTensorField + ( + IOobject + ( + IOobject::groupName("devRhoReff", this->U_.group()), + this->runTime_.timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + this->alpha_*this->rho_*R_ + - (this->alpha_*this->rho_*this->nu()) + *dev(twoSymm(fvc::grad(this->U_))) + ) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff +( + volVectorField& U +) const +{ + if (couplingFactor_.value() > 0.0) + { + return + ( + fvc::div + ( + this->alpha_*this->rho_*R_ + + couplingFactor_ + *this->alpha_*this->rho_*this->nut()*fvc::grad(U), + "div(devRhoReff)" + ) + + fvc::laplacian + ( + (1.0 - couplingFactor_)*this->alpha_*this->rho_*this->nut(), + U, + "laplacian(nuEff,U)" + ) + - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + - fvc::div(this->alpha_*this->rho_*nu()*dev2(T(fvc::grad(U)))) + ); + } + else + { + return + ( + fvc::div(this->alpha_*this->rho_*R_) + + fvc::laplacian + ( + this->alpha_*this->rho_*this->nut(), + U, + "laplacian(nuEff,U)" + ) + - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + - fvc::div(this->alpha_*this->rho_*nu()*dev2(T(fvc::grad(U)))) + ); + } + + return + ( + - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + - fvc::div((this->alpha_*this->rho_*this->nuEff())*dev2(T(fvc::grad(U)))) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::ReynoldsStress<BasicTurbulenceModel>::divDevRhoReff +( + const volScalarField& rho, + volVectorField& U +) const +{ + return + ( + - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) + - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) + ); +} + + +template<class BasicTurbulenceModel> +void Foam::ReynoldsStress<BasicTurbulenceModel>::correct() +{ + BasicTurbulenceModel::correct(); +} + + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.H b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H similarity index 52% rename from src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.H rename to src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H index ea8d4b2665b..9c27cc4c81d 100644 --- a/src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.H +++ b/src/TurbulenceModels/turbulenceModels/ReynoldsStress/ReynoldsStress.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,97 +22,112 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::laminar + Foam::ReynoldsStress + +Group + grpTurbulence Description - Turbulence model for laminar incompressible flow. + Reynolds-stress turbulence model base class SourceFiles - laminar.C + ReynoldsStress.C \*---------------------------------------------------------------------------*/ -#ifndef laminar_H -#define laminar_H - -#include "turbulenceModel.H" +#ifndef ReynoldsStress_H +#define ReynoldsStress_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ /*---------------------------------------------------------------------------*\ - Class laminar Declaration + Class ReynoldsStress Declaration \*---------------------------------------------------------------------------*/ -class laminar +template<class BasicTurbulenceModel> +class ReynoldsStress : - public turbulenceModel + public BasicTurbulenceModel { -public: +protected: - //- Runtime type information - TypeName("laminar"); + // Protected data - // Constructors + // Model coefficients + + dimensionedScalar couplingFactor_; + + // Fields + + volSymmTensorField R_; + volScalarField nut_; - //- Construct from components - laminar - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName - ); + // Protected Member Functions - // Selectors + virtual void correctNut() = 0; - //- Return a reference to the selected turbulence model - static autoPtr<laminar> New + +public: + + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + + + // Constructors + + //- Construct from components + ReynoldsStress ( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName + const word& propertiesName ); //- Destructor - virtual ~laminar() + virtual ~ReynoldsStress() {} // Member Functions - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const; + //- Re-read model coefficients if they have changed + virtual bool read() = 0; - //- Return the turbulence viscosity, i.e. 0 for laminar flow - virtual tmp<volScalarField> nut() const; + //- Return the turbulence viscosity + virtual tmp<volScalarField> nut() const + { + return nut_; + } - //- Return the effective viscosity, i.e. the laminar viscosity - virtual tmp<volScalarField> nuEff() const; + //- Return the turbulence viscosity on patch + virtual tmp<scalarField> nut(const label patchi) const + { + return nut_.boundaryField()[patchi]; + } - //- Return the turbulence kinetic energy, i.e. 0 for laminar flow + //- Return the turbulence kinetic energy virtual tmp<volScalarField> k() const; - //- Return the turbulence kinetic energy dissipation rate, - // i.e. 0 for laminar flow - virtual tmp<volScalarField> epsilon() const; - - //- Return the Reynolds stress tensor, i.e. 0 for laminar flow + //- Return the Reynolds stress tensor virtual tmp<volSymmTensorField> R() const; - //- Return the effective stress tensor, i.e. the laminar stress - virtual tmp<volSymmTensorField> devReff() const; + //- Return the effective stress tensor + virtual tmp<volSymmTensorField> devRhoReff() const; //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; + virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; //- Return the source term for the momentum equation virtual tmp<fvVectorMatrix> divDevRhoReff @@ -121,21 +136,23 @@ public: volVectorField& U ) const; - //- Correct the laminar viscosity - virtual void correct(); - - //- Read turbulenceProperties dictionary - virtual bool read(); + //- Solve the turbulence equations and correct the turbulence viscosity + virtual void correct() = 0; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "ReynoldsStress.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C index 1b98457bf7f..5ad9a350a7c 100644 --- a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C +++ b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -32,7 +32,7 @@ License template<class BasicTurbulenceModel> Foam::eddyViscosity<BasicTurbulenceModel>::eddyViscosity ( - const word& modelName, + const word& type, const alphaField& alpha, const rhoField& rho, const volVectorField& U, @@ -42,9 +42,9 @@ Foam::eddyViscosity<BasicTurbulenceModel>::eddyViscosity const word& propertiesName ) : - BasicTurbulenceModel + linearViscousStress<BasicTurbulenceModel> ( - modelName, + type, alpha, rho, U, @@ -71,6 +71,13 @@ Foam::eddyViscosity<BasicTurbulenceModel>::eddyViscosity // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template<class BasicTurbulenceModel> +bool Foam::eddyViscosity<BasicTurbulenceModel>::read() +{ + return BasicTurbulenceModel::read(); +} + + template<class BasicTurbulenceModel> Foam::tmp<Foam::volSymmTensorField> Foam::eddyViscosity<BasicTurbulenceModel>::R() const @@ -96,51 +103,6 @@ Foam::eddyViscosity<BasicTurbulenceModel>::R() const } -template<class BasicTurbulenceModel> -Foam::tmp<Foam::volSymmTensorField> -Foam::eddyViscosity<BasicTurbulenceModel>::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - IOobject::groupName("devRhoReff", this->U_.group()), - this->runTime_.timeName(), - this->mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - (-(this->alpha_*this->rho_*this->nuEff())) - *dev(twoSymm(fvc::grad(this->U_))) - ) - ); -} - - -template<class BasicTurbulenceModel> -Foam::tmp<Foam::fvVectorMatrix> -Foam::eddyViscosity<BasicTurbulenceModel>::divDevRhoReff -( - volVectorField& U -) const -{ - return - ( - - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) - - fvc::div((this->alpha_*this->rho_*this->nuEff())*dev2(T(fvc::grad(U)))) - ); -} - - -template<class BasicTurbulenceModel> -bool Foam::eddyViscosity<BasicTurbulenceModel>::read() -{ - return BasicTurbulenceModel::read(); -} - - template<class BasicTurbulenceModel> void Foam::eddyViscosity<BasicTurbulenceModel>::correct() { diff --git a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H index d8070248e95..ec92c7ba1c7 100644 --- a/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H +++ b/src/TurbulenceModels/turbulenceModels/eddyViscosity/eddyViscosity.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,7 @@ Class Foam::eddyViscosity Group - grpRASTurbulence + grpTurbulence Description Eddy viscosity turbulence model base class @@ -38,6 +38,8 @@ SourceFiles #ifndef eddyViscosity_H #define eddyViscosity_H +#include "linearViscousStress.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam @@ -50,7 +52,7 @@ namespace Foam template<class BasicTurbulenceModel> class eddyViscosity : - public BasicTurbulenceModel + public linearViscousStress<BasicTurbulenceModel> { protected: @@ -118,12 +120,6 @@ public: //- Return the Reynolds stress tensor virtual tmp<volSymmTensorField> R() const; - //- Return the effective stress tensor - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - //- Solve the turbulence equations and correct the turbulence viscosity virtual void correct() = 0; }; diff --git a/src/TurbulenceModels/turbulenceModels/laminar/laminar.C b/src/TurbulenceModels/turbulenceModels/laminar/laminar.C index eac733d49d9..b9528cd4a58 100644 --- a/src/TurbulenceModels/turbulenceModels/laminar/laminar.C +++ b/src/TurbulenceModels/turbulenceModels/laminar/laminar.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -44,8 +44,9 @@ Foam::laminar<BasicTurbulenceModel>::laminar const word& propertiesName ) : - BasicTurbulenceModel + linearViscousStress<BasicTurbulenceModel> ( + typeName, alpha, rho, U, @@ -98,6 +99,13 @@ Foam::laminar<BasicTurbulenceModel>::coeffDict() const } +template<class BasicTurbulenceModel> +bool Foam::laminar<BasicTurbulenceModel>::read() +{ + return true; +} + + template<class BasicTurbulenceModel> Foam::tmp<Foam::volScalarField> Foam::laminar<BasicTurbulenceModel>::nut() const @@ -235,43 +243,6 @@ Foam::laminar<BasicTurbulenceModel>::R() const } -template<class BasicTurbulenceModel> -Foam::tmp<Foam::volSymmTensorField> -Foam::laminar<BasicTurbulenceModel>::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - IOobject::groupName("devRhoReff", this->U_.group()), - this->runTime_.timeName(), - this->mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -(this->alpha_*this->rho_*nuEff())*dev(twoSymm(fvc::grad(this->U_))) - ) - ); -} - - -template<class BasicTurbulenceModel> -Foam::tmp<Foam::fvVectorMatrix> -Foam::laminar<BasicTurbulenceModel>::divDevRhoReff -( - volVectorField& U -) const -{ - return - ( - - fvm::laplacian(this->alpha_*this->rho_*nuEff(), U) - - fvc::div(this->alpha_*this->rho_*nuEff()*dev2(T(fvc::grad(U)))) - ); -} - - template<class BasicTurbulenceModel> void Foam::laminar<BasicTurbulenceModel>::correct() { @@ -279,11 +250,4 @@ void Foam::laminar<BasicTurbulenceModel>::correct() } -template<class BasicTurbulenceModel> -bool Foam::laminar<BasicTurbulenceModel>::read() -{ - return true; -} - - // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/laminar/laminar.H b/src/TurbulenceModels/turbulenceModels/laminar/laminar.H index 260d4eb0ad8..07988089d26 100644 --- a/src/TurbulenceModels/turbulenceModels/laminar/laminar.H +++ b/src/TurbulenceModels/turbulenceModels/laminar/laminar.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,7 +35,7 @@ SourceFiles #ifndef laminar_H #define laminar_H -#include "TurbulenceModel.H" +#include "linearViscousStress.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -49,7 +49,7 @@ namespace Foam template<class BasicTurbulenceModel> class laminar : - public BasicTurbulenceModel + public linearViscousStress<BasicTurbulenceModel> { public: @@ -103,6 +103,9 @@ public: //- Const access to the coefficients dictionary virtual const dictionary& coeffDict() const; + //- Read turbulenceProperties dictionary + virtual bool read(); + //- Return the turbulence viscosity, i.e. 0 for laminar flow virtual tmp<volScalarField> nut() const; @@ -125,17 +128,8 @@ public: //- Return the Reynolds stress tensor, i.e. 0 for laminar flow virtual tmp<volSymmTensorField> R() const; - //- Return the effective stress tensor, i.e. the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - //- Correct the laminar viscosity virtual void correct(); - - //- Read turbulenceProperties dictionary - virtual bool read(); }; diff --git a/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C new file mode 100644 index 00000000000..1ac59915cfd --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.C @@ -0,0 +1,129 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013-2015 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 "linearViscousStress.H" +#include "fvc.H" +#include "fvm.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::linearViscousStress<BasicTurbulenceModel>::linearViscousStress +( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + BasicTurbulenceModel + ( + modelName, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +bool Foam::linearViscousStress<BasicTurbulenceModel>::read() +{ + return BasicTurbulenceModel::read(); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volSymmTensorField> +Foam::linearViscousStress<BasicTurbulenceModel>::devRhoReff() const +{ + return tmp<volSymmTensorField> + ( + new volSymmTensorField + ( + IOobject + ( + IOobject::groupName("devRhoReff", this->U_.group()), + this->runTime_.timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + (-(this->alpha_*this->rho_*this->nuEff())) + *dev(twoSymm(fvc::grad(this->U_))) + ) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::linearViscousStress<BasicTurbulenceModel>::divDevRhoReff +( + volVectorField& U +) const +{ + return + ( + - fvm::laplacian(this->alpha_*this->rho_*this->nuEff(), U) + - fvc::div((this->alpha_*this->rho_*this->nuEff())*dev2(T(fvc::grad(U)))) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::linearViscousStress<BasicTurbulenceModel>::divDevRhoReff +( + const volScalarField& rho, + volVectorField& U +) const +{ + return + ( + - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) + - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) + ); +} + + +template<class BasicTurbulenceModel> +void Foam::linearViscousStress<BasicTurbulenceModel>::correct() +{ + BasicTurbulenceModel::correct(); +} + + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.H b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H similarity index 53% rename from src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.H rename to src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H index f715bd0f129..0a8f0e85634 100644 --- a/src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.H +++ b/src/TurbulenceModels/turbulenceModels/linearViscousStress/linearViscousStress.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,121 +22,100 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::LESModels::Smagorinsky2 + Foam::linearViscousStress Group - grpIcoLESTurbulence + grpTurbulence Description - The Isochoric Smagorinsky Model for incompressible flows - - Algebraic eddy viscosity SGS model founded on the assumption that - local equilibrium prevails, hence - \verbatim - B = 2/3*k*I - 2*nuSgs*dev(D) - 2*cD2*delta*(D.dev(D)); - Beff = 2/3*k*I - 2*nuEff*dev(D) - 2*cD2*delta*(D.dev(D)); - - where - - D = symm(grad(U)); - k = cI*delta^2*||D||^2 - nuSgs = ck*sqrt(k)*delta - nuEff = nuSgs + nu - \endverbatim + Linear viscous stress turbulence model base class SourceFiles - Smagorinsky2.C + linearViscousStress.C \*---------------------------------------------------------------------------*/ -#ifndef Smagorinsky2_H -#define Smagorinsky2_H - -#include "Smagorinsky.H" +#ifndef linearViscousStress_H +#define linearViscousStress_H // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ -namespace LESModels -{ /*---------------------------------------------------------------------------*\ - Class Smagorinsky2 Declaration + Class linearViscousStress Declaration \*---------------------------------------------------------------------------*/ -class Smagorinsky2 +template<class BasicTurbulenceModel> +class linearViscousStress : - public Smagorinsky + public BasicTurbulenceModel { - // Private data - - dimensionedScalar cD2_; - - - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - Smagorinsky2(const Smagorinsky2&); - Smagorinsky2& operator=(const Smagorinsky2&); - public: - //- Runtime type information - TypeName("Smagorinsky2"); + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; // Constructors //- Construct from components - Smagorinsky2 + linearViscousStress ( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName ); //- Destructor - virtual ~Smagorinsky2() + virtual ~linearViscousStress() {} // Member Functions - //- Return B. - virtual tmp<volSymmTensorField> B() const; + //- Re-read model coefficients if they have changed + virtual bool read() = 0; + + //- Return the effective stress tensor + virtual tmp<volSymmTensorField> devRhoReff() const; - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; + //- Return the source term for the momentum equation + virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress + //- Return the source term for the momentum equation virtual tmp<fvVectorMatrix> divDevRhoReff ( const volScalarField& rho, volVectorField& U ) const; - //- Read LESProperties dictionary - virtual bool read(); + //- Solve the turbulence equations and correct the turbulence viscosity + virtual void correct() = 0; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace LESModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "linearViscousStress.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C new file mode 100644 index 00000000000..c24ac4d6c5e --- /dev/null +++ b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.C @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "nonlinearEddyViscosity.H" +#include "fvc.H" +#include "fvm.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::nonlinearEddyViscosity +( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, + const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, + const surfaceScalarField& phi, + const transportModel& transport, + const word& propertiesName +) +: + eddyViscosity<BasicTurbulenceModel> + ( + modelName, + alpha, + rho, + U, + alphaRhoPhi, + phi, + transport, + propertiesName + ), + + nonlinearStress_ + ( + IOobject + ( + IOobject::groupName("nonlinearStress", U.group()), + this->runTime_.timeName(), + this->mesh_ + ), + this->mesh_, + dimensionedSymmTensor + ( + "nonlinearStress", + sqr(dimVelocity), + symmTensor::zero + ) + ) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volSymmTensorField> +Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::R() const +{ + tmp<volSymmTensorField> tR + ( + eddyViscosity<BasicTurbulenceModel>::R() + ); + tR() += nonlinearStress_; + return tR; +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::volSymmTensorField> +Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::devRhoReff() const +{ + tmp<volSymmTensorField> tdevRhoReff + ( + eddyViscosity<BasicTurbulenceModel>::devRhoReff() + ); + tdevRhoReff() += this->rho_*nonlinearStress_; + return tdevRhoReff; +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::divDevRhoReff +( + volVectorField& U +) const +{ + return + ( + fvc::div(this->rho_*nonlinearStress_) + + eddyViscosity<BasicTurbulenceModel>::divDevRhoReff(U) + ); +} + + +template<class BasicTurbulenceModel> +Foam::tmp<Foam::fvVectorMatrix> +Foam::nonlinearEddyViscosity<BasicTurbulenceModel>::divDevRhoReff +( + const volScalarField& rho, + volVectorField& U +) const +{ + return + ( + fvc::div(rho*nonlinearStress_) + + eddyViscosity<BasicTurbulenceModel>::divDevRhoReff(rho, U) + ); +} + + +// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/laminar/laminar.H b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H similarity index 56% rename from src/turbulenceModels/incompressible/RAS/laminar/laminar.H rename to src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H index 7905934184c..da8a24a0550 100644 --- a/src/turbulenceModels/incompressible/RAS/laminar/laminar.H +++ b/src/TurbulenceModels/turbulenceModels/nonlinearEddyViscosity/nonlinearEddyViscosity.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,91 +22,91 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::incompressible::RASModels::laminar + Foam::nonlinearEddyViscosity Group - grpIcoRASTurbulence + grpTurbulence Description - Dummy turbulence model for laminar incompressible flow. + Eddy viscosity turbulence model with non-linear correction base class SourceFiles - laminar.C + nonlinearEddyViscosity.C \*---------------------------------------------------------------------------*/ -#ifndef rasLaminar_H -#define rasLaminar_H +#ifndef nonlinearEddyViscosity_H +#define nonlinearEddyViscosity_H -#include "RASModel.H" +#include "eddyViscosity.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { -namespace incompressible -{ -namespace RASModels -{ /*---------------------------------------------------------------------------*\ - Class laminar Declaration + Class nonlinearEddyViscosity Declaration \*---------------------------------------------------------------------------*/ -class laminar +template<class BasicTurbulenceModel> +class nonlinearEddyViscosity : - public RASModel + public eddyViscosity<BasicTurbulenceModel> { +protected: + + // Protected data + + // Fields + + volSymmTensorField nonlinearStress_; + + + // Protected Member Functions + + virtual void correctNonlinearStress(const volTensorField& gradU) = 0; + + public: - //- Runtime type information - TypeName("laminar"); + typedef typename BasicTurbulenceModel::alphaField alphaField; + typedef typename BasicTurbulenceModel::rhoField rhoField; + typedef typename BasicTurbulenceModel::transportModel transportModel; + // Constructors //- Construct from components - laminar + nonlinearEddyViscosity ( + const word& modelName, + const alphaField& alpha, + const rhoField& rho, const volVectorField& U, + const surfaceScalarField& alphaRhoPhi, const surfaceScalarField& phi, const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName + const word& propertiesName ); //- Destructor - virtual ~laminar() + virtual ~nonlinearEddyViscosity() {} // Member Functions - //- Return the turbulence viscosity, i.e. 0 for laminar flow - virtual tmp<volScalarField> nut() const; - - //- Return the effective viscosity, i.e. the laminar viscosity - virtual tmp<volScalarField> nuEff() const - { - return tmp<volScalarField>(new volScalarField("nuEff", nu())); - } - - //- Return the turbulence kinetic energy, i.e. 0 for laminar flow - virtual tmp<volScalarField> k() const; - - //- Return the turbulence kinetic energy dissipation rate, - // i.e. 0 for laminar flow - virtual tmp<volScalarField> epsilon() const; - - //- Return the Reynolds stress tensor, i.e. 0 for laminar flow + //- Return the Reynolds stress tensor virtual tmp<volSymmTensorField> R() const; - //- Return the effective stress tensor, i.e. the laminar stress - virtual tmp<volSymmTensorField> devReff() const; + //- Return the effective stress tensor + virtual tmp<volSymmTensorField> devRhoReff() const; //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; + virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; //- Return the source term for the momentum equation virtual tmp<fvVectorMatrix> divDevRhoReff @@ -114,23 +114,21 @@ public: const volScalarField& rho, volVectorField& U ) const; - - //- Correct the laminar viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -} // End namespace RASModels -} // End namespace incompressible } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "nonlinearEddyViscosity.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/TurbulenceModels/turbulenceModels/turbulenceModel.H b/src/TurbulenceModels/turbulenceModels/turbulenceModel.H index bc09825f9c9..e2177bb72aa 100644 --- a/src/TurbulenceModels/turbulenceModels/turbulenceModel.H +++ b/src/TurbulenceModels/turbulenceModels/turbulenceModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,6 +24,9 @@ License Class Foam::turbulenceModel +Group + grpTurbulence + Description Abstract base class for turbulence models (RAS, LES and laminar). diff --git a/src/TurbulenceModels/turbulenceModels/turbulenceModelDoc.H b/src/TurbulenceModels/turbulenceModels/turbulenceModelDoc.H index 739af7388e3..91eab7254d8 100644 --- a/src/TurbulenceModels/turbulenceModels/turbulenceModelDoc.H +++ b/src/TurbulenceModels/turbulenceModels/turbulenceModelDoc.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,9 +23,9 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -\defgroup grpIcoTurbulence Incompressible turbulence +\defgroup grpTurbulence Turbulence @{ - This group contains incompressible turbulence models. + This group contains turbulence models. @} \*---------------------------------------------------------------------------*/ diff --git a/src/combustionModels/FSD/FSD.C b/src/combustionModels/FSD/FSD.C index 307d2410c54..85b0f21b863 100644 --- a/src/combustionModels/FSD/FSD.C +++ b/src/combustionModels/FSD/FSD.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,6 +26,8 @@ License #include "FSD.H" #include "addToRunTimeSelectionTable.H" #include "LESModel.H" +#include "fvcGrad.H" +#include "fvcDiv.H" namespace Foam { diff --git a/src/combustionModels/Make/options b/src/combustionModels/Make/options index 29d5e7e6a55..daf8e6d2e2b 100644 --- a/src/combustionModels/Make/options +++ b/src/combustionModels/Make/options @@ -3,14 +3,12 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ - -I$(LIB_SRC)/turbulenceModels/ \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESfilters/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude LIB_LIBS = \ -lfiniteVolume \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lchemistryModel diff --git a/src/combustionModels/PaSR/PaSR.H b/src/combustionModels/PaSR/PaSR.H index 6d5a1ffd92a..7ca8a510748 100644 --- a/src/combustionModels/PaSR/PaSR.H +++ b/src/combustionModels/PaSR/PaSR.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -38,7 +38,7 @@ SourceFiles #ifndef PaSR_H #define PaSR_H -#include "laminar.H" +#include "../laminar/laminar.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/combustionModels/combustionModel/combustionModel.H b/src/combustionModels/combustionModel/combustionModel.H index 3f887c8de65..f46072820d9 100644 --- a/src/combustionModels/combustionModel/combustionModel.H +++ b/src/combustionModels/combustionModel/combustionModel.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ SourceFiles #define combustionModel_H #include "IOdictionary.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/fvOptions/Make/options b/src/fvOptions/Make/options index d4edb59316e..124084c0575 100644 --- a/src/fvOptions/Make/options +++ b/src/fvOptions/Make/options @@ -6,13 +6,12 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels - + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude LIB_LIBS = \ -lfiniteVolume \ -lsampling \ -lmeshTools \ - /*-lsolidThermo*/ \ - -lcompressibleTurbulenceModel + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/variableHeatTransfer/variableHeatTransfer.C b/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/variableHeatTransfer/variableHeatTransfer.C index cf96fa0433e..a9fc1e27963 100644 --- a/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/variableHeatTransfer/variableHeatTransfer.C +++ b/src/fvOptions/sources/interRegion/interRegionHeatTransferModel/variableHeatTransfer/variableHeatTransfer.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "variableHeatTransfer.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -103,7 +103,10 @@ void Foam::fv::variableHeatTransfer::calculateHtc() mesh_.time().lookupObject<fvMesh>(nbrRegionName()); const compressible::turbulenceModel& nbrTurb = - nbrMesh.lookupObject<compressible::turbulenceModel>("turbulenceModel"); + nbrMesh.lookupObject<compressible::turbulenceModel> + ( + turbulenceModel::propertiesName + ); const fluidThermo& nbrThermo = nbrMesh.lookupObject<fluidThermo>("thermophysicalProperties"); diff --git a/src/lagrangian/Allwmake b/src/lagrangian/Allwmake index 1f00dde890b..66d1baabaf6 100755 --- a/src/lagrangian/Allwmake +++ b/src/lagrangian/Allwmake @@ -11,7 +11,6 @@ wmake $targetType basic wmake $targetType solidParticle wmake $targetType intermediate wmake $targetType turbulence -wmake $targetType Turbulence wmake $targetType spray wmake $targetType dsmc wmake $targetType coalCombustion diff --git a/src/lagrangian/Turbulence/Make/options b/src/lagrangian/Turbulence/Make/options index 3aed6283202..d3d76c7b624 100644 --- a/src/lagrangian/Turbulence/Make/options +++ b/src/lagrangian/Turbulence/Make/options @@ -14,6 +14,7 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ diff --git a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.H b/src/lagrangian/Turbulence/parcels/include/makeThermoParcelTurbulenceForces.H similarity index 77% rename from src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.H rename to src/lagrangian/Turbulence/parcels/include/makeThermoParcelTurbulenceForces.H index c5dcfccdabf..66e977a0ac6 100644 --- a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.H +++ b/src/lagrangian/Turbulence/parcels/include/makeThermoParcelTurbulenceForces.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) 2014-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,25 +23,19 @@ License \*---------------------------------------------------------------------------*/ -#ifndef porousBafflePressureFvPatchFields_H -#define porousBafflePressureFvPatchFields_H - -#include "porousBafflePressureFvPatchField.H" -#include "fieldTypes.H" +#ifndef makeThermoParcelTurbulenceForces_h +#define makeThermoParcelTurbulenceForces_h // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -namespace Foam -{ +#include "BrownianMotionForce.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#define makeThermoParcelTurbulenceForces(CloudType) \ + \ + makeParticleForceModelType(BrownianMotionForce, CloudType); -makePatchTypeFieldTypedefs(porousBafflePressure); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C index 43b1b36693d..80aa0221310 100644 --- a/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C +++ b/src/lagrangian/Turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,7 +25,7 @@ License #include "DispersionRASModel.H" #include "demandDrivenData.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // diff --git a/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C new file mode 100644 index 00000000000..e479250d9ad --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C @@ -0,0 +1,214 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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 "BrownianMotionForce.H" +#include "mathematicalConstants.H" +#include "demandDrivenData.H" +#include "incompressible/turbulenceModel/turbulenceModel.H" +#include "compressible/turbulenceModel/turbulenceModel.H" + +using namespace Foam::constant; + +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // + +template<class CloudType> +Foam::scalar Foam::BrownianMotionForce<CloudType>::erfInv(const scalar y) const +{ + const scalar a = 0.147; + scalar k = 2.0/(mathematical::pi*a) + 0.5*log(1.0 - y*y); + scalar h = log(1.0 - y*y)/a; + scalar x = sqrt(-k + sqrt(k*k - h)); + + if (y < 0.0) + { + return -x; + } + else + { + return x; + } +} + + +template<class CloudType> +Foam::tmp<Foam::volScalarField> +Foam::BrownianMotionForce<CloudType>::kModel() const +{ + const objectRegistry& obr = this->owner().mesh(); + const word turbName = "turbulenceModel"; + + if (obr.foundObject<compressible::turbulenceModel>(turbName)) + { + const compressible::turbulenceModel& model = + obr.lookupObject<compressible::turbulenceModel>(turbName); + return model.k(); + } + else if (obr.foundObject<incompressible::turbulenceModel>(turbName)) + { + const incompressible::turbulenceModel& model = + obr.lookupObject<incompressible::turbulenceModel>(turbName); + return model.k(); + } + else + { + FatalErrorIn + ( + "Foam::tmp<Foam::volScalarField>" + "Foam::BrownianMotionForce<CloudType>::kModel() const" + ) + << "Turbulence model not found in mesh database" << nl + << "Database objects include: " << obr.sortedToc() + << abort(FatalError); + + return tmp<volScalarField>(NULL); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::BrownianMotionForce<CloudType>::BrownianMotionForce +( + CloudType& owner, + const fvMesh& mesh, + const dictionary& dict +) +: + ParticleForce<CloudType>(owner, mesh, dict, typeName, true), + rndGen_(owner.rndGen()), + lambda_(readScalar(this->coeffs().lookup("lambda"))), + turbulence_(readBool(this->coeffs().lookup("turbulence"))), + kPtr_(NULL), + ownK_(false) +{} + + +template<class CloudType> +Foam::BrownianMotionForce<CloudType>::BrownianMotionForce +( + const BrownianMotionForce& bmf +) +: + ParticleForce<CloudType>(bmf), + rndGen_(bmf.rndGen_), + lambda_(bmf.lambda_), + turbulence_(bmf.turbulence_), + kPtr_(NULL), + ownK_(false) +{} + + +// * * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::BrownianMotionForce<CloudType>::~BrownianMotionForce() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class CloudType> +void Foam::BrownianMotionForce<CloudType>::cacheFields(const bool store) +{ + if (turbulence_) + { + if (store) + { + tmp<volScalarField> tk = kModel(); + if (tk.isTmp()) + { + kPtr_ = tk.ptr(); + ownK_ = true; + } + else + { + kPtr_ = tk.operator->(); + ownK_ = false; + } + } + else + { + if (ownK_ && kPtr_) + { + deleteDemandDrivenData(kPtr_); + ownK_ = false; + } + } + } +} + + +template<class CloudType> +Foam::forceSuSp Foam::BrownianMotionForce<CloudType>::calcCoupled +( + const typename CloudType::parcelType& p, + const scalar dt, + const scalar mass, + const scalar Re, + const scalar muc +) const +{ + forceSuSp value(vector::zero, 0.0); + + const scalar dp = p.d(); + const scalar Tc = p.Tc(); + + const scalar eta = rndGen_.sample01<scalar>(); + const scalar alpha = 2.0*lambda_/dp; + const scalar cc = 1.0 + alpha*(1.257 + 0.4*exp(-1.1/alpha)); + + const scalar sigma = physicoChemical::sigma.value(); + + scalar f = 0.0; + if (turbulence_) + { + const label cellI = p.cell(); + const volScalarField& k = *kPtr_; + const scalar kc = k[cellI]; + const scalar Dp = sigma*Tc*cc/(3*mathematical::pi*muc*dp); + f = eta/mass*sqrt(2.0*sqr(kc)*sqr(Tc)/(Dp*dt)); + } + else + { + const scalar rhoRatio = p.rho()/p.rhoc(); + const scalar s0 = + 216*muc*sigma*Tc/(sqr(mathematical::pi)*pow5(dp)*(rhoRatio)*cc); + f = eta*sqrt(mathematical::pi*s0/dt); + } + + const scalar sqrt2 = sqrt(2.0); + for (label i = 0; i < 3; i++) + { + const scalar x = rndGen_.sample01<scalar>(); + const scalar eta = sqrt2*erfInv(2*x - 1.0); + value.Su()[i] = mass*f*eta; + } + + return value; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.H b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.H new file mode 100644 index 00000000000..c9434117d22 --- /dev/null +++ b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.H @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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::BrownianMotionForce + +Description + Calculates particle Brownian motion force + +SourceFiles + BrownianMotionForceI.H + BrownianMotionForce.C + +\*---------------------------------------------------------------------------*/ + +#ifndef BrownianMotionForce_H +#define BrownianMotionForce_H + +#include "ParticleForce.H" +#include "cachedRandom.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class BrownianMotionForce Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class BrownianMotionForce +: + public ParticleForce<CloudType> +{ + // Private data + + //- Reference to the cloud random number generator + cachedRandom& rndGen_; + + //- Molecular free path length [m] + const scalar lambda_; + + //- Turbulence flag + bool turbulence_; + + //- Pointer to the turbulence kinetic energy field + const volScalarField* kPtr_; + + //- Flag that indicates ownership of turbulence k field + bool ownK_; + + + // Private Member Functions + + //- Inverse erf for Gaussian distribution + scalar erfInv(const scalar y) const; + + //- Return the k field from the turbulence model + tmp<volScalarField> kModel() const; + + +public: + + //- Runtime type information + TypeName("BrownianMotion"); + + + // Constructors + + //- Construct from mesh + BrownianMotionForce + ( + CloudType& owner, + const fvMesh& mesh, + const dictionary& dict + ); + + //- Construct copy + BrownianMotionForce(const BrownianMotionForce& bmf); + + //- Construct and return a clone + virtual autoPtr<ParticleForce<CloudType> > clone() const + { + return autoPtr<ParticleForce<CloudType> > + ( + new BrownianMotionForce<CloudType>(*this) + ); + } + + + //- Destructor + virtual ~BrownianMotionForce(); + + + // Member Functions + + // Access + + //- Return const access to the molecular free path length [m] + inline scalar lambda() const; + + //- Return const access to the turbulence flag + inline bool turbulence() const; + + + // Evaluation + + //- Cache fields + virtual void cacheFields(const bool store); + + //- Calculate the non-coupled force + virtual forceSuSp calcCoupled + ( + const typename CloudType::parcelType& p, + const scalar dt, + const scalar mass, + const scalar Re, + const scalar muc + ) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "BrownianMotionForceI.H" + +#ifdef NoRepository + #include "BrownianMotionForce.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/RASModel/RASModelDoc.H b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForceI.H similarity index 74% rename from src/turbulenceModels/compressible/RAS/RASModel/RASModelDoc.H rename to src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForceI.H index 53757f8141d..0c93d981bec 100644 --- a/src/turbulenceModels/compressible/RAS/RASModel/RASModelDoc.H +++ b/src/lagrangian/Turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForceI.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) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -21,12 +21,22 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +\*---------------------------------------------------------------------------*/ + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -\defgroup grpCmpRASTurbulence Compressible RAS turbulence -@{ - \ingroup grpCmpTurbulence - This group contains compressible RAS models. -@} - -\*---------------------------------------------------------------------------*/ +template<class CloudType> +inline Foam::scalar Foam::BrownianMotionForce<CloudType>::lambda() const +{ + return lambda_; +} + + +template<class CloudType> +inline bool Foam::BrownianMotionForce<CloudType>::turbulence() const +{ + return turbulence_; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/Make/options b/src/lagrangian/coalCombustion/Make/options index 0f4bce678d2..a67fc62000f 100644 --- a/src/lagrangian/coalCombustion/Make/options +++ b/src/lagrangian/coalCombustion/Make/options @@ -13,7 +13,9 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ @@ -35,10 +37,9 @@ LIB_LIBS = \ -lreactionThermophysicalModels \ -lSLGThermo \ -lradiationModels \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lLESdeltas \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationHurtMitchell/COxidationHurtMitchell.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationHurtMitchell/COxidationHurtMitchell.C index b959d7f75b7..98a31411af6 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationHurtMitchell/COxidationHurtMitchell.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationHurtMitchell/COxidationHurtMitchell.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -162,7 +162,7 @@ Foam::scalar Foam::COxidationHurtMitchell<CloudType>::calculate // Far field partial pressure O2 [Pa] // Note: Should really use the surface partial pressure - const scalar ppO2 = max(0.0, rhoc*YO2/WO2_*specie::RR*Tc); + const scalar ppO2 = max(0.0, rhoc*YO2/WO2_*RR*Tc); // Activation energy [kcal/mol] const scalar E = -5.94 + 0.355*charPrc; diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationIntrinsicRate/COxidationIntrinsicRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationIntrinsicRate/COxidationIntrinsicRate.C index 817f57e50f9..174734fa2ad 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationIntrinsicRate/COxidationIntrinsicRate.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationIntrinsicRate/COxidationIntrinsicRate.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -176,10 +176,10 @@ Foam::scalar Foam::COxidationIntrinsicRate<CloudType>::calculate const scalar rhoO2 = rhoc*YO2; // Partial pressure O2 [Pa] - const scalar ppO2 = rhoO2/WO2_*specie::RR*Tc; + const scalar ppO2 = rhoO2/WO2_*RR*Tc; // Intrinsic reactivity [1/s] - const scalar ki = Ai_*exp(-Ei_/specie::RR/T); + const scalar ki = Ai_*exp(-Ei_/RR/T); // Thiele modulus [] const scalar phi = @@ -195,7 +195,7 @@ Foam::scalar Foam::COxidationIntrinsicRate<CloudType>::calculate const scalar Ap = constant::mathematical::pi*sqr(d); // Change in C mass [kg] - scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*R/(D0 + R)*dt; + scalar dmC = Ap*rhoc*RR*Tc*YO2/WO2_*D0*R/(D0 + R)*dt; // Limit mass transfer by availability of C dmC = min(mass*Ychar, dmC); diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C index 552a6caab70..e99b0615217 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationKineticDiffusionLimitedRate/COxidationKineticDiffusionLimitedRate.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -137,13 +137,13 @@ Foam::scalar Foam::COxidationKineticDiffusionLimitedRate<CloudType>::calculate const scalar D0 = C1_/d*pow(0.5*(T + Tc), 0.75); // Kinetic rate - const scalar Rk = C2_*exp(-E_/(specie::RR*Tc)); + const scalar Rk = C2_*exp(-E_/(RR*Tc)); // Particle surface area const scalar Ap = constant::mathematical::pi*sqr(d); // Change in C mass [kg] - scalar dmC = Ap*rhoc*specie::RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk)*dt; + scalar dmC = Ap*rhoc*RR*Tc*YO2/WO2_*D0*Rk/(D0 + Rk)*dt; // Limit mass transfer by availability of C dmC = min(mass*fComb, dmC); diff --git a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C index 24bdf4927bd..151ad7037a9 100644 --- a/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.C +++ b/src/lagrangian/coalCombustion/submodels/surfaceReactionModel/COxidationMurphyShaddix/COxidationMurphyShaddix.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -160,10 +160,10 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate const scalar D = D0_*(rho0_/rhoc)*pow(Tc/T0_, Dn_); // Far field partial pressure O2 [Pa] - const scalar ppO2 = rhoO2/WO2_*specie::RR*Tc; + const scalar ppO2 = rhoO2/WO2_*RR*Tc; // Total molar concentration of the carrier phase [kmol/m^3] - const scalar C = pc/(specie::RR*Tc); + const scalar C = pc/(RR*Tc); if (debug) { @@ -191,7 +191,7 @@ Foam::scalar Foam::COxidationMurphyShaddix<CloudType>::calculate { qCsOld = qCs; const scalar PO2Surface = ppO2*exp(-(qCs + N)*d/(2*C*D)); - qCs = A_*exp(-E_/(specie::RR*T))*pow(PO2Surface, n_); + qCs = A_*exp(-E_/(RR*T))*pow(PO2Surface, n_); qCs = (100.0*qCs + iter*qCsOld)/(100.0 + iter); qCs = min(qCs, qCsLim); diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index 847964c3e03..5ffc645e821 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -557,7 +557,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation { // Molar average molecular weight of carrier mix const scalar Wc = - max(SMALL, this->rhoc_*specie::RR*this->Tc_/this->pc_); + max(SMALL, this->rhoc_*RR*this->Tc_/this->pc_); // Note: hardcoded gaseous diffusivities for now // TODO: add to carrier thermo diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C index d8f37f8a9ae..6d8dc12b2a9 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -118,7 +118,7 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange if (td.cloud().heatTransfer().BirdCorrection()) { // Average molecular weight of carrier mix - assumes perfect gas - const scalar Wc = this->rhoc_*specie::RR*this->Tc_/this->pc_; + const scalar Wc = this->rhoc_*RR*this->Tc_/this->pc_; forAll(dMassPC, i) { @@ -341,10 +341,10 @@ void Foam::ReactingParcel<ParcelType>::correctSurfaceValues Xinf /= sum(Xinf); // Molar fraction of far field species at particle surface - const scalar Xsff = 1.0 - min(sum(Cs)*specie::RR*this->T_/pc_, 1.0); + const scalar Xsff = 1.0 - min(sum(Cs)*RR*this->T_/pc_, 1.0); // Surface carrier total molar concentration - const scalar CsTot = pc_/(specie::RR*this->T_); + const scalar CsTot = pc_/(RR*this->T_); // Surface carrier composition (molar fraction) scalarField Xs(Xinf.size()); @@ -388,7 +388,7 @@ void Foam::ReactingParcel<ParcelType>::correctSurfaceValues Cps = max(Cps, ROOTVSMALL); - rhos *= pc_/(specie::RR*T); + rhos *= pc_/(RR*T); rhos = max(rhos, ROOTVSMALL); mus /= sumYiSqrtW; @@ -621,4 +621,3 @@ void Foam::ReactingParcel<ParcelType>::calc #include "ReactingParcelIO.C" // ************************************************************************* // - diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C index b387a99ea7a..221c687a609 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -219,10 +219,10 @@ void Foam::LiquidEvaporation<CloudType>::calculate const scalar kc = Sh*Dab/(d + ROOTVSMALL); // vapour concentration at surface [kmol/m3] at film temperature - const scalar Cs = pSat/(specie::RR*Ts); + const scalar Cs = pSat/(RR*Ts); // vapour concentration in bulk gas [kmol/m3] at film temperature - const scalar Cinf = Xc[gid]*pc/(specie::RR*Ts); + const scalar Cinf = Xc[gid]*pc/(RR*Ts); // molar flux of vapour [kmol/m2/s] const scalar Ni = max(kc*(Cs - Cinf), 0.0); diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C index adde0740a02..c655faa3650 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -193,7 +193,7 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate scalar ps = liquids_.pv(pc, Ts, X); // vapour density at droplet surface [kg/m3] - scalar rhos = ps*liquids_.W(X)/(specie::RR*Ts); + scalar rhos = ps*liquids_.W(X)/(RR*Ts); // construct carrier phase species volume fractions for cell, cellI const scalarField XcMix(calcXc(cellI)); diff --git a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C index d3a8ca8aed6..935b357188d 100644 --- a/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C +++ b/src/lagrangian/intermediate/submodels/ReactingMultiphase/DevolatilisationModel/SingleKineticRateDevolatilisation/SingleKineticRateDevolatilisation.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -131,7 +131,7 @@ void Foam::SingleKineticRateDevolatilisation<CloudType>::calculate const scalar E = volatileData_[i].E(); // Kinetic rate - const scalar kappa = A1*exp(-E/(specie::RR*T)); + const scalar kappa = A1*exp(-E/(RR*T)); // Mass transferred from particle to carrier gas phase dMassDV[id] = min(dt*kappa*massVolatile, massVolatile); diff --git a/src/lagrangian/spray/Make/options b/src/lagrangian/spray/Make/options index 0238727ccd3..76e4aeb7d60 100644 --- a/src/lagrangian/spray/Make/options +++ b/src/lagrangian/spray/Make/options @@ -14,7 +14,9 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ @@ -37,10 +39,9 @@ LIB_LIBS = \ -lreactionThermophysicalModels \ -lSLGThermo \ -lradiationModels \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lLESdeltas \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C index 0b1419c5a39..f9702b6d1d1 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -164,8 +164,8 @@ void Foam::SprayParcel<ParcelType>::calcAtomization td.cloud().atomization(); // Average molecular weight of carrier mix - assumes perfect gas - scalar Wc = this->rhoc_*specie::RR*this->Tc()/this->pc(); - scalar R = specie::RR/Wc; + scalar Wc = this->rhoc_*RR*this->Tc()/this->pc(); + scalar R = RR/Wc; scalar Tav = atomization.Taverage(this->T(), this->Tc()); // Calculate average gas density based on average temperature @@ -235,8 +235,8 @@ void Foam::SprayParcel<ParcelType>::calcBreakup } // Average molecular weight of carrier mix - assumes perfect gas - scalar Wc = this->rhoc()*specie::RR*this->Tc()/this->pc(); - scalar R = specie::RR/Wc; + scalar Wc = this->rhoc()*RR*this->Tc()/this->pc(); + scalar R = RR/Wc; scalar Tav = td.cloud().atomization().Taverage(this->T(), this->Tc()); // Calculate average gas density based on average temperature diff --git a/src/lagrangian/turbulence/Make/options b/src/lagrangian/turbulence/Make/options index 7b96cb00808..811fe0951ad 100644 --- a/src/lagrangian/turbulence/Make/options +++ b/src/lagrangian/turbulence/Make/options @@ -12,8 +12,10 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ @@ -35,16 +37,11 @@ LIB_LIBS = \ -lreactionThermophysicalModels \ -lSLGThermo \ -lradiationModels \ - -lincompressibleTurbulenceModel \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lLESdeltas \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ -ldynamicFvMesh \ -lsampling - diff --git a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C index b01d3b49c74..cb314e5af97 100644 --- a/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.C +++ b/src/lagrangian/turbulence/submodels/Kinematic/DispersionModel/DispersionRASModel/DispersionRASModel.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,8 +25,8 @@ License #include "DispersionRASModel.H" #include "demandDrivenData.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "compressible/turbulenceModel/turbulenceModel.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // @@ -35,7 +35,7 @@ Foam::tmp<Foam::volScalarField> Foam::DispersionRASModel<CloudType>::kModel() const { const objectRegistry& obr = this->owner().mesh(); - const word turbName = "turbulenceModel"; + const word turbName = turbulenceModel::propertiesName; if (obr.foundObject<compressible::turbulenceModel>(turbName)) { @@ -70,7 +70,7 @@ Foam::tmp<Foam::volScalarField> Foam::DispersionRASModel<CloudType>::epsilonModel() const { const objectRegistry& obr = this->owner().mesh(); - const word turbName = "turbulenceModel"; + const word turbName = turbulenceModel::propertiesName; if (obr.foundObject<compressible::turbulenceModel>(turbName)) { diff --git a/src/lagrangian/turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C b/src/lagrangian/turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C index 58ffe6b4609..02641346151 100644 --- a/src/lagrangian/turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.C +++ b/src/lagrangian/turbulence/submodels/Thermodynamic/ParticleForces/BrownianMotion/BrownianMotionForce.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,8 +26,8 @@ License #include "BrownianMotionForce.H" #include "mathematicalConstants.H" #include "demandDrivenData.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "compressible/turbulenceModel/turbulenceModel.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" using namespace Foam::constant; @@ -57,7 +57,7 @@ Foam::tmp<Foam::volScalarField> Foam::BrownianMotionForce<CloudType>::kModel() const { const objectRegistry& obr = this->owner().mesh(); - const word turbName = "turbulenceModel"; + const word turbName = turbulenceModel::propertiesName; if (obr.foundObject<compressible::turbulenceModel>(turbName)) { diff --git a/src/meshTools/sets/topoSets/topoSet.C b/src/meshTools/sets/topoSets/topoSet.C index 79e3796baab..4618b228d99 100644 --- a/src/meshTools/sets/topoSets/topoSet.C +++ b/src/meshTools/sets/topoSets/topoSet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -129,7 +129,7 @@ Foam::autoPtr<Foam::topoSet> Foam::topoSet::New } -Foam::fileName Foam::topoSet::topoSet::localPath +Foam::fileName Foam::topoSet::localPath ( const polyMesh& mesh, const word& name @@ -143,7 +143,7 @@ Foam::fileName Foam::topoSet::topoSet::localPath // Update stored cell numbers using map. // Do in two passes to prevent allocation if nothing changed. -void Foam::topoSet::topoSet::updateLabels(const labelList& map) +void Foam::topoSet::updateLabels(const labelList& map) { // Iterate over map to see if anything changed bool changed = false; @@ -191,7 +191,7 @@ void Foam::topoSet::topoSet::updateLabels(const labelList& map) } -void Foam::topoSet::topoSet::check(const label maxLabel) +void Foam::topoSet::check(const label maxLabel) { forAllConstIter(topoSet, *this, iter) { diff --git a/src/postProcessing/functionObjects/forces/Make/options b/src/postProcessing/functionObjects/forces/Make/options index 5952c6b6cb5..3dd0b124845 100644 --- a/src/postProcessing/functionObjects/forces/Make/options +++ b/src/postProcessing/functionObjects/forces/Make/options @@ -3,18 +3,18 @@ EXE_INC = \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/fileFormats/lnInclude \ -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude LIB_LIBS = \ + -lturbulenceModels \ + -lincompressibleTurbulenceModels \ + -lcompressibleTurbulenceModels \ -lincompressibleTransportModels \ - -lincompressibleRASModels \ - -lincompressibleLESModels \ -lfluidThermophysicalModels \ -lspecie \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ -lfiniteVolume \ -lmeshTools \ -lfileFormats diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C index 539e14b3093..fa8cfdcfc6b 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-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,10 +30,8 @@ License #include "wordReList.H" #include "fvcGrad.H" #include "porosityModel.H" -#include "fluidThermo.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "incompressible/transportModel/transportModel.H" +#include "turbulentTransportModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -209,17 +207,17 @@ Foam::tmp<Foam::volSymmTensorField> Foam::forces::devRhoReff() const typedef compressible::turbulenceModel cmpTurbModel; typedef incompressible::turbulenceModel icoTurbModel; - if (obr_.foundObject<cmpTurbModel>(cmpTurbModel::typeName)) + if (obr_.foundObject<cmpTurbModel>(cmpTurbModel::propertiesName)) { const cmpTurbModel& turb = - obr_.lookupObject<cmpTurbModel>(cmpTurbModel::typeName); + obr_.lookupObject<cmpTurbModel>(cmpTurbModel::propertiesName); return turb.devRhoReff(); } - else if (obr_.foundObject<icoTurbModel>(icoTurbModel::typeName)) + else if (obr_.foundObject<icoTurbModel>(icoTurbModel::propertiesName)) { const incompressible::turbulenceModel& turb = - obr_.lookupObject<icoTurbModel>(icoTurbModel::typeName); + obr_.lookupObject<icoTurbModel>(icoTurbModel::propertiesName); return rho()*turb.devReff(); } diff --git a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C index c642e5e6947..23063d1548b 100644 --- a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C +++ b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -153,10 +153,10 @@ void Foam::DESModelRegions::execute() label DESpresent = false; - if (mesh.foundObject<icoModel>("turbulenceModel")) + if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName)) { const icoModel& model = - mesh.lookupObject<icoModel>("turbulenceModel"); + mesh.lookupObject<icoModel>(turbulenceModel::propertiesName); if (isA<icoDESModel>(model)) { @@ -166,10 +166,10 @@ void Foam::DESModelRegions::execute() DESpresent = true; } } - else if (mesh.foundObject<cmpModel>("turbulenceModel")) + else if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName)) { const cmpModel& model = - mesh.lookupObject<cmpModel>("turbulenceModel"); + mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName); if (isA<cmpDESModel>(model)) { diff --git a/src/postProcessing/functionObjects/utilities/Make/files b/src/postProcessing/functionObjects/utilities/Make/files index 0b549061680..3f2c2ebad4d 100644 --- a/src/postProcessing/functionObjects/utilities/Make/files +++ b/src/postProcessing/functionObjects/utilities/Make/files @@ -5,43 +5,48 @@ CourantNo/CourantNoFunctionObject.C Lambda2/Lambda2.C Lambda2/Lambda2FunctionObject.C - +/* Peclet/Peclet.C Peclet/PecletFunctionObject.C - +*/ Q/Q.C Q/QFunctionObject.C blendingFactor/blendingFactor.C blendingFactor/blendingFactorFunctionObject.C - +/* DESModelRegions/DESModelRegions.C DESModelRegions/DESModelRegionsFunctionObject.C - +*/ dsmcFields/dsmcFields.C dsmcFields/dsmcFieldsFunctionObject.C pressureTools/pressureTools.C pressureTools/pressureToolsFunctionObject.C +/* scalarTransport/scalarTransport.C scalarTransport/scalarTransportFunctionObject.C +*/ timeActivatedFileUpdate/timeActivatedFileUpdate.C timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C +/* turbulenceFields/turbulenceFields.C turbulenceFields/turbulenceFieldsFunctionObject.C +*/ vorticity/vorticity.C vorticity/vorticityFunctionObject.C - +/* wallShearStress/wallShearStress.C wallShearStress/wallShearStressFunctionObject.C - +*/ +/* yPlusLES/yPlusLES.C yPlusLES/yPlusLESFunctionObject.C - +*/ yPlusRAS/yPlusRAS.C yPlusRAS/yPlusRASFunctionObject.C diff --git a/src/postProcessing/functionObjects/utilities/Make/options b/src/postProcessing/functionObjects/utilities/Make/options index a561f6ca133..d7868cbb8ac 100644 --- a/src/postProcessing/functionObjects/utilities/Make/options +++ b/src/postProcessing/functionObjects/utilities/Make/options @@ -5,12 +5,8 @@ EXE_INC = \ -I$(LIB_SRC)/lagrangian/dsmc/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions \ - -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude LIB_LIBS = \ -lfiniteVolume \ @@ -20,8 +16,5 @@ LIB_LIBS = \ -llagrangian \ -ldsmc \ -lincompressibleTransportModels \ - -lcompressibleRASModels \ - -lincompressibleRASModels \ - -lcompressibleLESModels \ - -lincompressibleLESModels \ + -lturbulenceModels \ -lfluidThermophysicalModels diff --git a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C index 6d288fcfc00..a0683b4a1a5 100644 --- a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C +++ b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -128,20 +128,29 @@ void Foam::Peclet::execute() const fvMesh& mesh = refCast<const fvMesh>(obr_); tmp<volScalarField> nuEff; - if (mesh.foundObject<cmpTurbModel>("turbulenceModel")) + if (mesh.foundObject<cmpTurbModel>(turbulenceModel::propertiesName)) { const cmpTurbModel& model = - mesh.lookupObject<cmpTurbModel>("turbulenceModel"); + mesh.lookupObject<cmpTurbModel> + ( + turbulenceModel::propertiesName + ); const volScalarField& rho = mesh.lookupObject<volScalarField>(rhoName_); nuEff = model.muEff()/rho; } - else if (mesh.foundObject<icoTurbModel>("turbulenceModel")) + else if + ( + mesh.foundObject<icoTurbModel>(turbulenceModel::propertiesName) + ) { const icoTurbModel& model = - mesh.lookupObject<icoTurbModel>("turbulenceModel"); + mesh.lookupObject<icoTurbModel> + ( + turbulenceModel::propertiesName + ); nuEff = model.nuEff(); } diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C index 4428388604b..d65dc92fbee 100644 --- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C +++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -97,15 +97,21 @@ Foam::tmp<Foam::volScalarField> Foam::scalarTransport::DT ) ); } - else if (mesh_.foundObject<icoModel>("turbulenceModel")) + else if (mesh_.foundObject<icoModel>(turbulenceModel::propertiesName)) { - const icoModel& model = mesh_.lookupObject<icoModel>("turbulenceModel"); + const icoModel& model = mesh_.lookupObject<icoModel> + ( + turbulenceModel::propertiesName + ); return model.nuEff(); } - else if (mesh_.foundObject<cmpModel>("turbulenceModel")) + else if (mesh_.foundObject<cmpModel>(turbulenceModel::propertiesName)) { - const cmpModel& model = mesh_.lookupObject<cmpModel>("turbulenceModel"); + const cmpModel& model = mesh_.lookupObject<cmpModel> + ( + turbulenceModel::propertiesName + ); return model.muEff(); } diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C index 3d89600cfa4..3fbbb8fb07f 100644 --- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C +++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -58,7 +58,7 @@ namespace Foam const NamedEnum<turbulenceFields::incompressibleField, 4> turbulenceFields::incompressibleFieldNames_; - const word turbulenceFields::modelName = "turbulenceModel"; + const word turbulenceFields::modelName = turbulenceModel::propertiesName; } diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C index 00647d1494b..393d890d2aa 100644 --- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C +++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -242,17 +242,17 @@ void Foam::wallShearStress::execute() tmp<volSymmTensorField> Reff; - if (mesh.foundObject<cmpModel>("turbulenceModel")) + if (mesh.foundObject<cmpModel>(turbulenceModel::propertiesName)) { const cmpModel& model = - mesh.lookupObject<cmpModel>("turbulenceModel"); + mesh.lookupObject<cmpModel>(turbulenceModel::propertiesName); Reff = model.devRhoReff(); } - else if (mesh.foundObject<icoModel>("turbulenceModel")) + else if (mesh.foundObject<icoModel>(turbulenceModel::propertiesName)) { const icoModel& model = - mesh.lookupObject<icoModel>("turbulenceModel"); + mesh.lookupObject<icoModel>(turbulenceModel::propertiesName); Reff = model.devReff(); } diff --git a/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.C b/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.C index 68125069acb..12c8349a3e5 100644 --- a/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.C +++ b/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -25,12 +25,8 @@ License #include "yPlusRAS.H" #include "volFields.H" - -#include "incompressible/RAS/RASModel/RASModel.H" -#include "nutWallFunction/nutWallFunctionFvPatchScalarField.H" -#include "compressible/RAS/RASModel/RASModel.H" -#include "mutWallFunction/mutWallFunctionFvPatchScalarField.H" -#include "wallDist.H" +#include "turbulenceModel.H" +#include "nutWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -55,17 +51,16 @@ void Foam::yPlusRAS::writeFileHeader(const label i) } -void Foam::yPlusRAS::calcIncompressibleYPlus +void Foam::yPlusRAS::calcYPlus ( const fvMesh& mesh, volScalarField& yPlus ) { - typedef incompressible::nutWallFunctionFvPatchScalarField - wallFunctionPatchField; - - const incompressible::RASModel& model = - mesh.lookupObject<incompressible::RASModel>("RASProperties"); + const turbulenceModel& model = mesh.lookupObject<turbulenceModel> + ( + turbulenceModel::propertiesName + ); const volScalarField nut(model.nut()); const volScalarField::GeometricBoundaryField& nutPatches = @@ -74,12 +69,15 @@ void Foam::yPlusRAS::calcIncompressibleYPlus bool foundPatch = false; forAll(nutPatches, patchi) { - if (isA<wallFunctionPatchField>(nutPatches[patchi])) + if (isA<nutWallFunctionFvPatchScalarField>(nutPatches[patchi])) { foundPatch = true; - const wallFunctionPatchField& nutPw = - dynamic_cast<const wallFunctionPatchField&>(nutPatches[patchi]); + const nutWallFunctionFvPatchScalarField& nutPw = + dynamic_cast + < + const nutWallFunctionFvPatchScalarField& + >(nutPatches[patchi]); yPlus.boundaryField()[patchi] = nutPw.yPlus(); const scalarField& Yp = yPlus.boundaryField()[patchi]; @@ -106,65 +104,8 @@ void Foam::yPlusRAS::calcIncompressibleYPlus if (log_ && !foundPatch) { - Info<< " no " << wallFunctionPatchField::typeName << " patches" - << endl; - } -} - - -void Foam::yPlusRAS::calcCompressibleYPlus -( - const fvMesh& mesh, - volScalarField& yPlus -) -{ - typedef compressible::mutWallFunctionFvPatchScalarField - wallFunctionPatchField; - - const compressible::RASModel& model = - mesh.lookupObject<compressible::RASModel>("RASProperties"); - - const volScalarField mut(model.mut()); - const volScalarField::GeometricBoundaryField& mutPatches = - mut.boundaryField(); - - bool foundPatch = false; - forAll(mutPatches, patchi) - { - if (isA<wallFunctionPatchField>(mutPatches[patchi])) - { - foundPatch = true; - - const wallFunctionPatchField& mutPw = - dynamic_cast<const wallFunctionPatchField&>(mutPatches[patchi]); - - yPlus.boundaryField()[patchi] = mutPw.yPlus(); - const scalarField& Yp = yPlus.boundaryField()[patchi]; - - scalar minYp = gMin(Yp); - scalar maxYp = gMax(Yp); - scalar avgYp = gAverage(Yp); - - if (Pstream::master()) - { - Info(log_)<< " patch " << mutPw.patch().name() - << " y+ : min = " << minYp << ", max = " << maxYp - << ", average = " << avgYp << nl; - - file() << obr_.time().value() - << token::TAB << mutPw.patch().name() - << token::TAB << minYp - << token::TAB << maxYp - << token::TAB << avgYp - << endl; - } - } - } - - if (log_ && !foundPatch) - { - Info<< " no " << wallFunctionPatchField::typeName << " patches" - << endl; + Info<< " no " << nutWallFunctionFvPatchScalarField::typeName + << " patches" << endl; } } @@ -253,9 +194,6 @@ void Foam::yPlusRAS::execute() { functionObjectFile::write(); - const surfaceScalarField& phi = - obr_.lookupObject<surfaceScalarField>(phiName_); - const fvMesh& mesh = refCast<const fvMesh>(obr_); volScalarField& yPlusRAS = @@ -266,14 +204,7 @@ void Foam::yPlusRAS::execute() Info(log_)<< type() << " " << name_ << " output:" << nl; - if (phi.dimensions() == dimMass/dimTime) - { - calcCompressibleYPlus(mesh, yPlusRAS); - } - else - { - calcIncompressibleYPlus(mesh, yPlusRAS); - } + calcYPlus(mesh, yPlusRAS); } } diff --git a/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.H b/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.H index 8a73cd47d59..7c3cdd696ef 100644 --- a/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.H +++ b/src/postProcessing/functionObjects/utilities/yPlusRAS/yPlusRAS.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -87,11 +87,8 @@ class yPlusRAS //- File header information virtual void writeFileHeader(const label i); - //- Calculate incompressible form of y+ - void calcIncompressibleYPlus(const fvMesh& mesh, volScalarField& yPlus); - - //- Calculate compressible form of y+ - void calcCompressibleYPlus(const fvMesh& mesh, volScalarField& yPlus); + //- Calculate y+ + void calcYPlus(const fvMesh& mesh, volScalarField& yPlus); //- Disallow default bitwise copy construct yPlusRAS(const yPlusRAS&); diff --git a/src/regionCoupled/Make/options b/src/regionCoupled/Make/options index ea55cd87d23..e877774c16d 100644 --- a/src/regionCoupled/Make/options +++ b/src/regionCoupled/Make/options @@ -1,11 +1,13 @@ EXE_INC = \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude LIB_LIBS = \ -lfluidThermophysicalModels \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleTurbulenceModel + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/src/regionCoupled/derivedFvPatchFields/energyRegionCoupled/energyRegionCoupledFvPatchScalarField.C b/src/regionCoupled/derivedFvPatchFields/energyRegionCoupled/energyRegionCoupledFvPatchScalarField.C index 9f0fe9a60c1..fd01b649751 100644 --- a/src/regionCoupled/derivedFvPatchFields/energyRegionCoupled/energyRegionCoupledFvPatchScalarField.C +++ b/src/regionCoupled/derivedFvPatchFields/energyRegionCoupled/energyRegionCoupledFvPatchScalarField.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -26,7 +26,7 @@ License #include "addToRunTimeSelectionTable.H" #include "energyRegionCoupledFvPatchScalarField.H" #include "Time.H" -#include "turbulenceModel.H" +#include "turbulentFluidThermoModel.H" // * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * // @@ -63,7 +63,7 @@ void Foam::energyRegionCoupledFvPatchScalarField::setMethod() const ( this->db().foundObject<compressible::turbulenceModel> ( - "turbulenceModel" + turbulenceModel::propertiesName ) ) { @@ -109,7 +109,7 @@ kappa() const const compressible::turbulenceModel& turbModel = this->db().lookupObject<compressible::turbulenceModel> ( - "turbulenceModel" + turbulenceModel::propertiesName ); return turbModel.kappaEff(patch().index()); diff --git a/src/regionModels/pyrolysisModels/Make/options b/src/regionModels/pyrolysisModels/Make/options index 7f59d752485..75d130d3498 100644 --- a/src/regionModels/pyrolysisModels/Make/options +++ b/src/regionModels/pyrolysisModels/Make/options @@ -8,11 +8,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude LIB_LIBS = \ @@ -23,10 +20,8 @@ LIB_LIBS = \ -lfluidThermophysicalModels \ -lsolidChemistryModel \ -lsolidThermo \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ - -lLESdeltas \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lregionModels \ -lradiationModels \ -lreactionThermophysicalModels diff --git a/src/regionModels/regionCoupling/Make/options b/src/regionModels/regionCoupling/Make/options index a346c249b48..ce912009504 100644 --- a/src/regionModels/regionCoupling/Make/options +++ b/src/regionModels/regionCoupling/Make/options @@ -16,11 +16,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/properties/solidProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ @@ -34,5 +31,5 @@ LIB_LIBS = \ -lSLGThermo \ -lfiniteVolume \ -lmeshTools \ - -lcompressibleRASModels \ - -lcompressibleLESModels + -lturbulenceModels \ + -lcompressibleTurbulenceModels diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/files b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/files index 6f150005fd8..01e50d24ace 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/files +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/files @@ -1,5 +1,4 @@ alphatFilmWallFunction/alphatFilmWallFunctionFvPatchScalarField.C -mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.C - +nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.C LIB = $(FOAM_LIBBIN)/libsurfaceFilmDerivedFvPatchFields diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/options b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/options index e894e6d69c7..ca490a0744a 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/options +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/Make/options @@ -9,10 +9,8 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/properties/solidMixtureProperties/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/SLGThermo/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude @@ -27,8 +25,7 @@ LIB_LIBS = \ -lsolidMixtureProperties \ -lreactionThermophysicalModels \ -lSLGThermo \ - -lcompressibleTurbulenceModel \ - -lcompressibleRASModels \ - -lcompressibleLESModels \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lregionModels \ -lsurfaceFilmModels diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/alphatFilmWallFunction/alphatFilmWallFunctionFvPatchScalarField.C b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/alphatFilmWallFunction/alphatFilmWallFunctionFvPatchScalarField.C index fb2d123496b..e6eb83bc9db 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/alphatFilmWallFunction/alphatFilmWallFunctionFvPatchScalarField.C +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/alphatFilmWallFunction/alphatFilmWallFunctionFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "alphatFilmWallFunctionFvPatchScalarField.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "surfaceFilmModel.H" #include "fvPatchFieldMapper.H" #include "volFields.H" @@ -150,27 +150,36 @@ void alphatFilmWallFunctionFvPatchScalarField::updateCoeffs() return; } - const label patchI = patch().index(); + const label patchi = patch().index(); // Retrieve phase change mass from surface film model const modelType& filmModel = db().time().lookupObject<modelType>("surfaceFilmProperties"); - const label filmPatchI = filmModel.regionPatchID(patchI); + const label filmPatchI = filmModel.regionPatchID(patchi); tmp<volScalarField> mDotFilm(filmModel.primaryMassTrans()); scalarField mDotFilmp = mDotFilm().boundaryField()[filmPatchI]; filmModel.toPrimary(filmPatchI, mDotFilmp); // Retrieve RAS turbulence model - const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties"); - - const scalarField& y = rasModel.y()[patchI]; - const scalarField& rhow = rasModel.rho().boundaryField()[patchI]; - const tmp<volScalarField> tk = rasModel.k(); + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + + const scalarField& y = turbModel.y()[patchi]; + const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; + const tmp<volScalarField> tk = turbModel.k(); const volScalarField& k = tk(); - const scalarField& muw = rasModel.mu().boundaryField()[patchI]; - const scalarField& alphaw = rasModel.alpha().boundaryField()[patchI]; + const tmp<scalarField> tmuw = turbModel.mu(patchi); + const scalarField& muw = tmuw(); + const tmp<scalarField> talpha = turbModel.alpha(patchi); + const scalarField& alphaw = talpha(); const scalar Cmu25 = pow(Cmu_, 0.25); diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.C b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.C similarity index 62% rename from src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.C rename to src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.C index ee912e61830..2b6727b91f3 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.C +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -23,10 +23,10 @@ License \*---------------------------------------------------------------------------*/ -#include "mutkFilmWallFunctionFvPatchScalarField.H" +#include "nutkFilmWallFunctionFvPatchScalarField.H" #include "fvPatchFieldMapper.H" #include "volFields.H" -#include "RASModel.H" +#include "turbulentFluidThermoModel.H" #include "addToRunTimeSelectionTable.H" #include "surfaceFilmModel.H" #include "mappedWallPolyPatch.H" @@ -43,7 +43,7 @@ namespace RASModels // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // -tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcUTau +tmp<scalarField> nutkFilmWallFunctionFvPatchScalarField::calcUTau ( const scalarField& magGradU ) const @@ -62,13 +62,13 @@ tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcUTau return tuTau; } - const label patchI = patch().index(); + const label patchi = patch().index(); // Retrieve phase change mass from surface film model const modelType& filmModel = db().time().lookupObject<modelType>("surfaceFilmProperties"); - const label filmPatchI = filmModel.regionPatchID(patchI); + const label filmPatchI = filmModel.regionPatchID(patchi); tmp<volScalarField> mDotFilm(filmModel.primaryMassTrans()); scalarField mDotFilmp = mDotFilm().boundaryField()[filmPatchI]; @@ -76,12 +76,20 @@ tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcUTau // Retrieve RAS turbulence model - const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties"); - const scalarField& y = rasModel.y()[patchI]; - const fvPatchScalarField& rhow = rasModel.rho().boundaryField()[patchI]; - const fvPatchScalarField& muw = rasModel.mu().boundaryField()[patchI]; - const tmp<volScalarField> tk = rasModel.k(); + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + + const scalarField& y = turbModel.y()[patchi]; + const tmp<volScalarField> tk = turbModel.k(); const volScalarField& k = tk(); + const tmp<scalarField> tnuw = turbModel.nu(patchi); + const scalarField& nuw = tnuw(); const scalar Cmu25 = pow(Cmu_, 0.25); @@ -91,7 +99,7 @@ tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcUTau scalar ut = Cmu25*sqrt(k[faceCellI]); - scalar yPlus = y[faceI]*ut/(muw[faceI]/rhow[faceI]); + scalar yPlus = y[faceI]*ut/nuw[faceI]; scalar mStar = mDotFilmp[faceI]/(y[faceI]*ut); @@ -115,83 +123,91 @@ tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcUTau } -tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::calcMut() const +tmp<scalarField> nutkFilmWallFunctionFvPatchScalarField::calcNut() const { - const label patchI = patch().index(); + const label patchi = patch().index(); - const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties"); - const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI]; + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); + + const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; const scalarField magGradU(mag(Uw.snGrad())); - const scalarField& rhow = rasModel.rho().boundaryField()[patchI]; - const scalarField& muw = rasModel.mu().boundaryField()[patchI]; + const tmp<scalarField> tnuw = turbModel.nu(patchi); + const scalarField& nuw = tnuw(); return max ( scalar(0), - rhow*sqr(calcUTau(magGradU))/(magGradU + ROOTVSMALL) - muw + sqr(calcUTau(magGradU))/(magGradU + ROOTVSMALL) - nuw ); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField +nutkFilmWallFunctionFvPatchScalarField::nutkFilmWallFunctionFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF ) : - mutkWallFunctionFvPatchScalarField(p, iF), + nutkWallFunctionFvPatchScalarField(p, iF), B_(5.5), yPlusCrit_(11.05) {} -mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField +nutkFilmWallFunctionFvPatchScalarField::nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField& ptf, + const nutkFilmWallFunctionFvPatchScalarField& ptf, const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, const fvPatchFieldMapper& mapper ) : - mutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper), + nutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper), B_(5.5), yPlusCrit_(11.05) {} -mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField +nutkFilmWallFunctionFvPatchScalarField::nutkFilmWallFunctionFvPatchScalarField ( const fvPatch& p, const DimensionedField<scalar, volMesh>& iF, const dictionary& dict ) : - mutkWallFunctionFvPatchScalarField(p, iF, dict), + nutkWallFunctionFvPatchScalarField(p, iF, dict), B_(dict.lookupOrDefault("B", 5.5)), yPlusCrit_(dict.lookupOrDefault("yPlusCrit", 11.05)) {} -mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField +nutkFilmWallFunctionFvPatchScalarField::nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField& wfpsf + const nutkFilmWallFunctionFvPatchScalarField& wfpsf ) : - mutkWallFunctionFvPatchScalarField(wfpsf), + nutkWallFunctionFvPatchScalarField(wfpsf), B_(wfpsf.B_), yPlusCrit_(wfpsf.yPlusCrit_) {} -mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField +nutkFilmWallFunctionFvPatchScalarField::nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField& wfpsf, + const nutkFilmWallFunctionFvPatchScalarField& wfpsf, const DimensionedField<scalar, volMesh>& iF ) : - mutkWallFunctionFvPatchScalarField(wfpsf, iF), + nutkWallFunctionFvPatchScalarField(wfpsf, iF), B_(wfpsf.B_), yPlusCrit_(wfpsf.yPlusCrit_) {} @@ -199,21 +215,29 @@ mutkFilmWallFunctionFvPatchScalarField::mutkFilmWallFunctionFvPatchScalarField // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -tmp<scalarField> mutkFilmWallFunctionFvPatchScalarField::yPlus() const +tmp<scalarField> nutkFilmWallFunctionFvPatchScalarField::yPlus() const { - const label patchI = patch().index(); + const label patchi = patch().index(); + + const turbulenceModel& turbModel = db().lookupObject<turbulenceModel> + ( + IOobject::groupName + ( + turbulenceModel::propertiesName, + dimensionedInternalField().group() + ) + ); - const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties"); - const scalarField& y = rasModel.y()[patchI]; - const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI]; - const scalarField& rhow = rasModel.rho().boundaryField()[patchI]; - const scalarField& muw = rasModel.mu().boundaryField()[patchI]; + const scalarField& y = turbModel.y()[patchi]; + const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; + const tmp<scalarField> tnuw = turbModel.nu(patchi); + const scalarField& nuw = tnuw(); - return y*calcUTau(mag(Uw.snGrad()))/(muw/rhow); + return y*calcUTau(mag(Uw.snGrad()))/nuw; } -void mutkFilmWallFunctionFvPatchScalarField::write(Ostream& os) const +void nutkFilmWallFunctionFvPatchScalarField::write(Ostream& os) const { fvPatchField<scalar>::write(os); writeLocalEntries(os); @@ -225,7 +249,7 @@ void mutkFilmWallFunctionFvPatchScalarField::write(Ostream& os) const // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -makePatchTypeField(fvPatchScalarField, mutkFilmWallFunctionFvPatchScalarField); +makePatchTypeField(fvPatchScalarField, nutkFilmWallFunctionFvPatchScalarField); // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.H b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.H similarity index 76% rename from src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.H rename to src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.H index 7e7a2a99f84..9eb4c5e191c 100644 --- a/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/mutkFilmWallFunction/mutkFilmWallFunctionFvPatchScalarField.H +++ b/src/regionModels/surfaceFilmModels/derivedFvPatchFields/wallFunctions/nutkFilmWallFunction/nutkFilmWallFunctionFvPatchScalarField.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -22,7 +22,7 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Class - Foam::compressible::RASModels::mutkFilmWallFunctionFvPatchScalarField + Foam::compressible::RASModels::nutkFilmWallFunctionFvPatchScalarField Group grpSurfaceFilmBoundaryConditions grpCmpWallFunctions @@ -38,23 +38,23 @@ Description \verbatim myPatch { - type mutkFilmWallFunction; + type nutkFilmWallFunction; value uniform 0; } \endverbatim SeeAlso - Foam::mutkWallFunctionFvPatchScalarField + Foam::nutkWallFunctionFvPatchScalarField SourceFiles - mutkFilmWallFunctionFvPatchScalarField.C + nutkFilmWallFunctionFvPatchScalarField.C \*---------------------------------------------------------------------------*/ -#ifndef compressibleMutSpalartAllmarasWallFunctionFvPatchScalarField_H -#define compressibleMutSpalartAllmarasWallFunctionFvPatchScalarField_H +#ifndef compressibleNutSpalartAllmarasWallFunctionFvPatchScalarField_H +#define compressibleNutSpalartAllmarasWallFunctionFvPatchScalarField_H -#include "mutkWallFunctionFvPatchScalarField.H" +#include "nutkWallFunctionFvPatchScalarField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -66,12 +66,12 @@ namespace RASModels { /*---------------------------------------------------------------------------*\ - Class mutkFilmWallFunctionFvPatchScalarField Declaration + Class nutkFilmWallFunctionFvPatchScalarField Declaration \*---------------------------------------------------------------------------*/ -class mutkFilmWallFunctionFvPatchScalarField +class nutkFilmWallFunctionFvPatchScalarField : - public mutkWallFunctionFvPatchScalarField + public nutkWallFunctionFvPatchScalarField { protected: @@ -87,7 +87,7 @@ protected: // Protected member functions //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; + virtual tmp<scalarField> calcNut() const; //- Calculate the friction velocity virtual tmp<scalarField> calcUTau(const scalarField& magGradU) const; @@ -96,20 +96,20 @@ protected: public: //- Runtime type information - TypeName("mutkFilmWallFunction"); + TypeName("nutkFilmWallFunction"); // Constructors //- Construct from patch and internal field - mutkFilmWallFunctionFvPatchScalarField + nutkFilmWallFunctionFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>& ); //- Construct from patch, internal field and dictionary - mutkFilmWallFunctionFvPatchScalarField + nutkFilmWallFunctionFvPatchScalarField ( const fvPatch&, const DimensionedField<scalar, volMesh>&, @@ -117,20 +117,20 @@ public: ); //- Construct by mapping given - // mutkFilmWallFunctionFvPatchScalarField + // nutkFilmWallFunctionFvPatchScalarField // onto a new patch - mutkFilmWallFunctionFvPatchScalarField + nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField&, + const nutkFilmWallFunctionFvPatchScalarField&, const fvPatch&, const DimensionedField<scalar, volMesh>&, const fvPatchFieldMapper& ); //- Construct as copy - mutkFilmWallFunctionFvPatchScalarField + nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField& + const nutkFilmWallFunctionFvPatchScalarField& ); //- Construct and return a clone @@ -138,14 +138,14 @@ public: { return tmp<fvPatchScalarField> ( - new mutkFilmWallFunctionFvPatchScalarField(*this) + new nutkFilmWallFunctionFvPatchScalarField(*this) ); } //- Construct as copy setting internal field reference - mutkFilmWallFunctionFvPatchScalarField + nutkFilmWallFunctionFvPatchScalarField ( - const mutkFilmWallFunctionFvPatchScalarField&, + const nutkFilmWallFunctionFvPatchScalarField&, const DimensionedField<scalar, volMesh>& ); @@ -157,7 +157,7 @@ public: { return tmp<fvPatchScalarField> ( - new mutkFilmWallFunctionFvPatchScalarField(*this, iF) + new nutkFilmWallFunctionFvPatchScalarField(*this, iF) ); } diff --git a/src/regionModels/thermalBaffleModels/Make/options b/src/regionModels/thermalBaffleModels/Make/options index 7e69974761a..bc36cf7dce5 100644 --- a/src/regionModels/thermalBaffleModels/Make/options +++ b/src/regionModels/thermalBaffleModels/Make/options @@ -7,16 +7,16 @@ EXE_INC = \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/mesh/extrudeModel/lnInclude LIB_LIBS = \ -lregionModels \ -lsolidThermo \ - -lcompressibleTurbulenceModel \ + -lturbulenceModels \ + -lcompressibleTurbulenceModels \ -lfiniteVolume \ -lmeshTools \ - -lOpenFOAM \ -lradiationModels \ -ldynamicMesh diff --git a/src/thermophysicalModels/properties/liquidMixtureProperties/liquidMixtureProperties/liquidMixtureProperties.C b/src/thermophysicalModels/properties/liquidMixtureProperties/liquidMixtureProperties/liquidMixtureProperties.C index 5fec22dc9aa..2c3403ed2d5 100644 --- a/src/thermophysicalModels/properties/liquidMixtureProperties/liquidMixtureProperties/liquidMixtureProperties.C +++ b/src/thermophysicalModels/properties/liquidMixtureProperties/liquidMixtureProperties/liquidMixtureProperties.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/properties/solidProperties/solidProperties/solidPropertiesI.H b/src/thermophysicalModels/properties/solidProperties/solidProperties/solidPropertiesI.H index dda7e942874..3910a4f37fa 100644 --- a/src/thermophysicalModels/properties/solidProperties/solidProperties/solidPropertiesI.H +++ b/src/thermophysicalModels/properties/solidProperties/solidProperties/solidPropertiesI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/equationOfState/PengRobinsonGas/PengRobinsonGas.C b/src/thermophysicalModels/specie/equationOfState/PengRobinsonGas/PengRobinsonGas.C index baf20aeba98..a36766ade86 100644 --- a/src/thermophysicalModels/specie/equationOfState/PengRobinsonGas/PengRobinsonGas.C +++ b/src/thermophysicalModels/specie/equationOfState/PengRobinsonGas/PengRobinsonGas.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2014-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H b/src/thermophysicalModels/specie/equationOfState/incompressiblePerfectGas/incompressiblePerfectGasI.H index e84b5a226f9..fa1505700bc 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-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/equationOfState/perfectGas/perfectGasI.H b/src/thermophysicalModels/specie/equationOfState/perfectGas/perfectGasI.H index a97eb1b4f6d..e03bbb7973b 100644 --- a/src/thermophysicalModels/specie/equationOfState/perfectGas/perfectGasI.H +++ b/src/thermophysicalModels/specie/equationOfState/perfectGas/perfectGasI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/specie/specie.H b/src/thermophysicalModels/specie/specie/specie.H index ffe602dc4bd..ea76fb2426f 100644 --- a/src/thermophysicalModels/specie/specie/specie.H +++ b/src/thermophysicalModels/specie/specie/specie.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/thermo/hExponential/hExponentialThermoI.H b/src/thermophysicalModels/specie/thermo/hExponential/hExponentialThermoI.H index 33e3b31c816..b46543a4000 100644 --- a/src/thermophysicalModels/specie/thermo/hExponential/hExponentialThermoI.H +++ b/src/thermophysicalModels/specie/thermo/hExponential/hExponentialThermoI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2012-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2012-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C index bda645c0f37..511e871bf19 100644 --- a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H b/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H index f639ffce972..c92082dae75 100644 --- a/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H +++ b/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/thermo/thermo/thermo.H b/src/thermophysicalModels/specie/thermo/thermo/thermo.H index 3136307fe91..b8e73cf2c74 100644 --- a/src/thermophysicalModels/specie/thermo/thermo/thermo.H +++ b/src/thermophysicalModels/specie/thermo/thermo/thermo.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/thermophysicalModels/specie/thermo/thermo/thermoI.H b/src/thermophysicalModels/specie/thermo/thermo/thermoI.H index 07068363816..d897968d129 100644 --- a/src/thermophysicalModels/specie/thermo/thermo/thermoI.H +++ b/src/thermophysicalModels/specie/thermo/thermo/thermoI.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-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/turbulenceModels/Allwmake b/src/turbulenceModels/Allwmake deleted file mode 100755 index 3a95797baf9..00000000000 --- a/src/turbulenceModels/Allwmake +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory - -# Parse arguments for library compilation -targetType=libso -. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x - -LES/Allwmake $targetType $* -incompressible/Allwmake $targetType $* -compressible/Allwmake $targetType $* -wmake $targetType derivedFvPatchFields - -# ----------------------------------------------------------------- end-of-file diff --git a/src/turbulenceModels/LES/Allwmake b/src/turbulenceModels/LES/Allwmake deleted file mode 100755 index a209819d169..00000000000 --- a/src/turbulenceModels/LES/Allwmake +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory - -# Parse arguments for library compilation -targetType=libso -. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x - -wmakeLnInclude ../incompressible/LES - -wmake $targetType LESfilters -wmake $targetType LESdeltas - -# ----------------------------------------------------------------- end-of-file diff --git a/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C b/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C deleted file mode 100644 index 5a8ff1c3fb0..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.C +++ /dev/null @@ -1,138 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "LESdelta.H" -#include "calculatedFvPatchFields.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(LESdelta, 0); - defineRunTimeSelectionTable(LESdelta, dictionary); -} - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::LESdelta::LESdelta(const word& name, const fvMesh& mesh) -: - mesh_(mesh), - delta_ - ( - IOobject - ( - name, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionedScalar(name, dimLength, SMALL), - calculatedFvPatchScalarField::typeName - ) -{} - - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New -( - const word& name, - const fvMesh& mesh, - const dictionary& dict -) -{ - const word deltaType(dict.lookup("delta")); - - Info<< "Selecting LES delta type " << deltaType << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(deltaType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "LESdelta::New(const fvMesh&, const dictionary&)" - ) << "Unknown LESdelta type " - << deltaType << nl << nl - << "Valid LESdelta types are :" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); -} - - -Foam::autoPtr<Foam::LESdelta> Foam::LESdelta::New -( - const word& name, - const fvMesh& mesh, - const dictionary& dict, - const dictionaryConstructorTable& additionalConstructors -) -{ - const word deltaType(dict.lookup("delta")); - - Info<< "Selecting LES delta type " << deltaType << endl; - - // First on additional ones - dictionaryConstructorTable::const_iterator cstrIter = - additionalConstructors.find(deltaType); - - if (cstrIter != additionalConstructors.end()) - { - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); - } - else - { - dictionaryConstructorTable::const_iterator cstrIter = - dictionaryConstructorTablePtr_->find(deltaType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "LESdelta::New(const fvMesh&, const dictionary&)" - ) << "Unknown LESdelta type " - << deltaType << nl << nl - << "Valid LESdelta types are :" << endl - << additionalConstructors.sortedToc() - << " and " - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - return autoPtr<LESdelta>(); - } - else - { - return autoPtr<LESdelta>(cstrIter()(name, mesh, dict)); - } - } -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H b/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H deleted file mode 100644 index c84ae74c3b1..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/LESdelta/LESdelta.H +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::LESdelta - -Description - Abstract base class for LES deltas - -SourceFiles - LESdelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LESdelta_H -#define LESdelta_H - -#include "volFields.H" -#include "typeInfo.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -class fvMesh; - -/*---------------------------------------------------------------------------*\ - Class LESdelta Declaration -\*---------------------------------------------------------------------------*/ - -class LESdelta -{ - -protected: - - // Protected data - - const fvMesh& mesh_; - - volScalarField delta_; - - -private: - - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - LESdelta(const LESdelta&); - void operator=(const LESdelta&); - - -public: - - //- Runtime type information - TypeName("LESdelta"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - LESdelta, - dictionary, - ( - const word& name, - const fvMesh& mesh, - const dictionary& LESdeltaDict - ), - (name, mesh, LESdeltaDict) - ); - - - // Constructors - - //- Construct from name and mesh - LESdelta(const word& name, const fvMesh&); - - - // Selectors - - //- Return a reference to the selected LES delta - static autoPtr<LESdelta> New - ( - const word& name, - const fvMesh&, - const dictionary& - ); - - //- Return a reference to the selected LES delta - static autoPtr<LESdelta> New - ( - const word& name, - const fvMesh&, - const dictionary&, - const dictionaryConstructorTable& - ); - - - //- Destructor - virtual ~LESdelta() - {} - - - // Member Functions - - //- Return mesh reference - const fvMesh& mesh() const - { - return mesh_; - } - - //- Read the LESdelta dictionary - virtual void read(const dictionary&) = 0; - - // Correct values - virtual void correct() = 0; - - - // Member Operators - - virtual operator const volScalarField&() const - { - return delta_; - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/Make/files b/src/turbulenceModels/LES/LESdeltas/Make/files deleted file mode 100644 index b150cc49969..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/Make/files +++ /dev/null @@ -1,7 +0,0 @@ -LESdelta/LESdelta.C -cubeRootVolDelta/cubeRootVolDelta.C -PrandtlDelta/PrandtlDelta.C -smoothDelta/smoothDelta.C -maxDeltaxyz/maxDeltaxyz.C - -LIB = $(FOAM_LIBBIN)/libLESdeltas diff --git a/src/turbulenceModels/LES/LESdeltas/Make/options b/src/turbulenceModels/LES/LESdeltas/Make/options deleted file mode 100644 index 6ef95061d10..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/Make/options +++ /dev/null @@ -1,9 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/LESmodels/isoLESmodels/lnInclude \ - -I$(LIB_SRC)/transportModels/incompressible/lnInclude - -LIB_LIBS = \ - -lfiniteVolume \ - -lmeshTools diff --git a/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C b/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C deleted file mode 100644 index a66e32fe576..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.C +++ /dev/null @@ -1,102 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "PrandtlDelta.H" -#include "wallDist.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(PrandtlDelta, 0); -addToRunTimeSelectionTable(LESdelta, PrandtlDelta, dictionary); - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void PrandtlDelta::calcDelta() -{ - delta_ = min - ( - static_cast<const volScalarField&>(geometricDelta_()), - (kappa_/Cdelta_)*wallDist::New(mesh_).y() - ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -PrandtlDelta::PrandtlDelta -( - const word& name, - const fvMesh& mesh, - const dictionary& dd -) -: - LESdelta(name, mesh), - geometricDelta_(LESdelta::New(name, mesh, dd.subDict(type() + "Coeffs"))), - kappa_(dd.lookupOrDefault<scalar>("kappa", 0.41)), - Cdelta_ - ( - dd.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Cdelta", 0.158) - ) -{ - calcDelta(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void PrandtlDelta::read(const dictionary& d) -{ - const dictionary& dd(d.subDict(type() + "Coeffs")); - - geometricDelta_().read(dd); - d.readIfPresent<scalar>("kappa", kappa_); - dd.readIfPresent<scalar>("Cdelta", Cdelta_); - calcDelta(); -} - - -void PrandtlDelta::correct() -{ - geometricDelta_().correct(); - - if (mesh_.changing()) - { - calcDelta(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H b/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H deleted file mode 100644 index d8840ff1a88..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/PrandtlDelta/PrandtlDelta.H +++ /dev/null @@ -1,110 +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::PrandtlDelta - -Description - Simple cube-root of cell volume delta used in LES models. - -SourceFiles - PrandtlDelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef PrandtlDelta_H -#define PrandtlDelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class PrandtlDelta Declaration -\*---------------------------------------------------------------------------*/ - -class PrandtlDelta -: - public LESdelta -{ - // Private data - - autoPtr<LESdelta> geometricDelta_; - scalar kappa_; - scalar Cdelta_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - PrandtlDelta(const PrandtlDelta&); - void operator=(const PrandtlDelta&); - - // Calculate the delta values - void calcDelta(); - - -public: - - //- Runtime type information - TypeName("Prandtl"); - - - // Constructors - - //- Construct from name, mesh and IOdictionary - PrandtlDelta - ( - const word& name, - const fvMesh& mesh, - const dictionary& - ); - - - //- Destructor - virtual ~PrandtlDelta() - {} - - - // Member Functions - - //- Read the LESdelta dictionary - virtual void read(const dictionary&); - - // Correct values - virtual void correct(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C b/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C deleted file mode 100644 index 0e5e2820dd0..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.C +++ /dev/null @@ -1,117 +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 "cubeRootVolDelta.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(cubeRootVolDelta, 0); -addToRunTimeSelectionTable(LESdelta, cubeRootVolDelta, dictionary); - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void cubeRootVolDelta::calcDelta() -{ - label nD = mesh().nGeometricD(); - - if (nD == 3) - { - delta_.internalField() = deltaCoeff_*pow(mesh().V(), 1.0/3.0); - } - else if (nD == 2) - { - WarningIn("cubeRootVolDelta::calcDelta()") - << "Case is 2D, LES is not strictly applicable\n" - << endl; - - const Vector<label>& directions = mesh().geometricD(); - - scalar thickness = 0.0; - for (direction dir=0; dir<directions.nComponents; dir++) - { - if (directions[dir] == -1) - { - thickness = mesh().bounds().span()[dir]; - break; - } - } - - delta_.internalField() = deltaCoeff_*sqrt(mesh().V()/thickness); - } - else - { - FatalErrorIn("cubeRootVolDelta::calcDelta()") - << "Case is not 3D or 2D, LES is not applicable" - << exit(FatalError); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -cubeRootVolDelta::cubeRootVolDelta -( - const word& name, - const fvMesh& mesh, - const dictionary& dd -) -: - LESdelta(name, mesh), - deltaCoeff_(readScalar(dd.subDict(type() + "Coeffs").lookup("deltaCoeff"))) -{ - calcDelta(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void cubeRootVolDelta::read(const dictionary& dd) -{ - dd.subDict(type() + "Coeffs").lookup("deltaCoeff") >> deltaCoeff_; - calcDelta(); -} - - -void cubeRootVolDelta::correct() -{ - if (mesh_.changing()) - { - calcDelta(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H b/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H deleted file mode 100644 index f6abbe7e127..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/cubeRootVolDelta/cubeRootVolDelta.H +++ /dev/null @@ -1,108 +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::cubeRootVolDelta - -Description - Simple cube-root of cell volume delta used in LES models. - -SourceFiles - cubeRootVolDelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef cubeRootVolDelta_H -#define cubeRootVolDelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class cubeRootVolDelta Declaration -\*---------------------------------------------------------------------------*/ - -class cubeRootVolDelta -: - public LESdelta -{ - // Private data - - scalar deltaCoeff_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - cubeRootVolDelta(const cubeRootVolDelta&); - void operator=(const cubeRootVolDelta&); - - // Calculate the delta values - void calcDelta(); - - -public: - - //- Runtime type information - TypeName("cubeRootVol"); - - - // Constructors - - //- Construct from name, mesh and IOdictionary - cubeRootVolDelta - ( - const word& name, - const fvMesh& mesh, - const dictionary& - ); - - - //- Destructor - virtual ~cubeRootVolDelta() - {} - - - // Member Functions - - //- Read the LESdelta dictionary - virtual void read(const dictionary&); - - // Correct values - virtual void correct(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C deleted file mode 100644 index e4bf785fb08..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C +++ /dev/null @@ -1,149 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "maxDeltaxyz.H" -#include "addToRunTimeSelectionTable.H" -#include "surfaceFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(maxDeltaxyz, 0); -addToRunTimeSelectionTable(LESdelta, maxDeltaxyz, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void maxDeltaxyz::calcDelta() -{ - label nD = mesh().nGeometricD(); - - tmp<volScalarField> hmax - ( - new volScalarField - ( - IOobject - ( - "hmax", - mesh().time().timeName(), - mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh(), - dimensionedScalar("zrero", dimLength, 0.0) - ) - ); - - const cellList& cells = mesh().cells(); - const vectorField& cellC = mesh().cellCentres(); - const vectorField& faceC = mesh().faceCentres(); - const vectorField faceN(mesh().faceAreas()/mag(mesh().faceAreas())); - - forAll(cells, cellI) - { - scalar deltaMaxTmp = 0.0; - const labelList& cFaces = cells[cellI]; - const point& cc = cellC[cellI]; - - forAll(cFaces, cFaceI) - { - label faceI = cFaces[cFaceI]; - const point& fc = faceC[faceI]; - const vector& n = faceN[faceI]; - - scalar tmp = magSqr(n*(n & (fc - cc))); - if (tmp > deltaMaxTmp) - { - deltaMaxTmp = tmp; - } - } - - hmax()[cellI] = deltaCoeff_*sqrt(deltaMaxTmp); - } - - if (nD == 3) - { - delta_.internalField() = hmax(); - } - else if (nD == 2) - { - WarningIn("maxDeltaxyz::calcDelta()") - << "Case is 2D, LES is not strictly applicable\n" - << endl; - - delta_.internalField() = hmax(); - } - else - { - FatalErrorIn("maxDeltaxyz::calcDelta()") - << "Case is not 3D or 2D, LES is not applicable" - << exit(FatalError); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -maxDeltaxyz::maxDeltaxyz -( - const word& name, - const fvMesh& mesh, - const dictionary& dd -) -: - LESdelta(name, mesh), - deltaCoeff_(readScalar(dd.subDict(type() + "Coeffs").lookup("deltaCoeff"))) -{ - calcDelta(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void maxDeltaxyz::read(const dictionary& dd) -{ - dd.subDict(type() + "Coeffs").lookup("deltaCoeff") >> deltaCoeff_; - calcDelta(); -} - - -void maxDeltaxyz::correct() -{ - if (mesh_.changing()) - { - calcDelta(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H deleted file mode 100644 index 05df8af5520..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H +++ /dev/null @@ -1,113 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::maxDeltaxyz - -Description - Delta calculated by taking the maximum distance between the cell centre - and any face centre. For a regular hex cell, the computed delta will - equate to half of the cell width; accordingly, the deltaCoeff model - coefficient should be set to 2 for this case. - -SourceFiles - maxDeltaxyz.C - -\*---------------------------------------------------------------------------*/ - -#ifndef maxDeltaxyzDelta_H -#define maxDeltaxyzDelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class maxDeltaxyz Declaration -\*---------------------------------------------------------------------------*/ - -class maxDeltaxyz -: - public LESdelta -{ - // Private data - - //- Model coefficient - scalar deltaCoeff_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - maxDeltaxyz(const maxDeltaxyz&); - void operator=(const maxDeltaxyz&); - - // Calculate the delta values - void calcDelta(); - - -public: - - //- Runtime type information - TypeName("maxDeltaxyz"); - - - // Constructors - - //- Construct from name, mesh and IOdictionary - maxDeltaxyz - ( - const word& name, - const fvMesh& mesh, - const dictionary& - ); - - - //- Destructor - virtual ~maxDeltaxyz() - {} - - - // Member Functions - - //- Read the LESdelta dictionary - virtual void read(const dictionary&); - - // Correct values - virtual void correct(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C b/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C deleted file mode 100644 index 1b28e85a0e7..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.C +++ /dev/null @@ -1,197 +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 "smoothDelta.H" -#include "addToRunTimeSelectionTable.H" -#include "FaceCellWave.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(smoothDelta, 0); -addToRunTimeSelectionTable(LESdelta, smoothDelta, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -// Fill changedFaces (with face labels) and changedFacesInfo (with delta) -// This is the initial set of faces from which to start the waves. -// Since there might be lots of places with delta jumps we can follow various -// strategies for this initial 'seed'. -// - start from single cell/face and let FaceCellWave pick up all others -// from there. might be quite a few waves before everything settles. -// - start from all faces. Lots of initial transfers. -// We do something inbetween: -// - start from all faces where there is a jump. Since we cannot easily -// determine this across coupled patches (cyclic, processor) introduce -// all faces of these and let FaceCellWave sort it out. -void smoothDelta::setChangedFaces -( - const polyMesh& mesh, - const volScalarField& delta, - DynamicList<label>& changedFaces, - DynamicList<deltaData>& changedFacesInfo -) -{ - for (label faceI = 0; faceI < mesh.nInternalFaces(); faceI++) - { - scalar ownDelta = delta[mesh.faceOwner()[faceI]]; - - scalar neiDelta = delta[mesh.faceNeighbour()[faceI]]; - - // Check if owner delta much larger than neighbour delta or vice versa - - if (ownDelta > maxDeltaRatio_ * neiDelta) - { - changedFaces.append(faceI); - changedFacesInfo.append(deltaData(ownDelta)); - } - else if (neiDelta > maxDeltaRatio_ * ownDelta) - { - changedFaces.append(faceI); - changedFacesInfo.append(deltaData(neiDelta)); - } - } - - // Insert all faces of coupled patches no matter what. Let FaceCellWave - // sort it out. - forAll(mesh.boundaryMesh(), patchI) - { - const polyPatch& patch = mesh.boundaryMesh()[patchI]; - - if (patch.coupled()) - { - forAll(patch, patchFaceI) - { - label meshFaceI = patch.start() + patchFaceI; - - scalar ownDelta = delta[mesh.faceOwner()[meshFaceI]]; - - changedFaces.append(meshFaceI); - changedFacesInfo.append(deltaData(ownDelta)); - } - } - } - - changedFaces.shrink(); - changedFacesInfo.shrink(); -} - - -void smoothDelta::calcDelta() -{ - const volScalarField& geometricDelta = geometricDelta_(); - - // Fill changed faces with info - DynamicList<label> changedFaces(mesh_.nFaces()/100 + 100); - DynamicList<deltaData> changedFacesInfo(changedFaces.size()); - - setChangedFaces(mesh_, geometricDelta, changedFaces, changedFacesInfo); - - // Set initial field on cells. - List<deltaData> cellDeltaData(mesh_.nCells()); - - forAll(geometricDelta, cellI) - { - cellDeltaData[cellI] = geometricDelta[cellI]; - } - - // Set initial field on faces. - List<deltaData> faceDeltaData(mesh_.nFaces()); - - - // Propagate information over whole domain. - FaceCellWave<deltaData, scalar> deltaCalc - ( - mesh_, - changedFaces, - changedFacesInfo, - faceDeltaData, - cellDeltaData, - mesh_.globalData().nTotalCells()+1, // max iterations - maxDeltaRatio_ - ); - - forAll(delta_, cellI) - { - delta_[cellI] = cellDeltaData[cellI].delta(); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -smoothDelta::smoothDelta -( - const word& name, - const fvMesh& mesh, - const dictionary& dd -) -: - LESdelta(name, mesh), - geometricDelta_ - ( - LESdelta::New("geometricDelta", mesh, dd.subDict(type() + "Coeffs")) - ), - maxDeltaRatio_ - ( - readScalar(dd.subDict(type() + "Coeffs").lookup("maxDeltaRatio")) - ) -{ - calcDelta(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void smoothDelta::read(const dictionary& d) -{ - const dictionary& dd(d.subDict(type() + "Coeffs")); - - geometricDelta_().read(dd); - dd.lookup("maxDeltaRatio") >> maxDeltaRatio_; - calcDelta(); -} - - -void smoothDelta::correct() -{ - geometricDelta_().correct(); - - if (mesh_.changing()) - { - calcDelta(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H b/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H deleted file mode 100644 index e80d0948447..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDelta.H +++ /dev/null @@ -1,290 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::smoothDelta - -Description - Smoothed delta which takes a given simple geometric delta and applies - smoothing to it such that the ratio of deltas between two cells is no - larger than a specified amount, typically 1.15. - -SourceFiles - smoothDelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef smoothDelta_H -#define smoothDelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class smoothDelta Declaration -\*---------------------------------------------------------------------------*/ - -class smoothDelta -: - public LESdelta -{ -public: - - //- Public member class used by mesh-wave to propagate the delta-ratio - class deltaData - { - scalar delta_; - - // Private Member Functions - - //- Update. Gets information from neighbouring face/cell and - // uses this to update itself (if necessary) and return true. - template<class TrackingData> - inline bool update - ( - const deltaData& w2, - const scalar scale, - const scalar tol, - TrackingData& td - ); - - - public: - - // Constructors - - //- Construct null - inline deltaData(); - - //- Construct from delta value - inline deltaData(const scalar delta); - - - // Member Functions - - // Access - - scalar delta() const - { - return delta_; - } - - - // Needed by FaceCellWave - - //- 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 polyMesh&, - const deltaData&, - const scalar, - TrackingData& td - ) const; - - //- Convert any absolute coordinates into relative to - // (patch)face centre - template<class TrackingData> - inline void leaveDomain - ( - const polyMesh&, - const polyPatch&, - const label patchFaceI, - const point& faceCentre, - TrackingData& td - ); - - //- Reverse of leaveDomain - template<class TrackingData> - inline void enterDomain - ( - const polyMesh&, - const polyPatch&, - const label patchFaceI, - const point& faceCentre, - TrackingData& td - ); - - //- Apply rotation matrix to any coordinates - template<class TrackingData> - inline void transform - ( - const polyMesh&, - const tensor&, - TrackingData& td - ); - - //- Influence of neighbouring face. - template<class TrackingData> - inline bool updateCell - ( - const polyMesh&, - const label thisCellI, - const label neighbourFaceI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Influence of neighbouring cell. - template<class TrackingData> - inline bool updateFace - ( - const polyMesh&, - const label thisFaceI, - const label neighbourCellI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Influence of different value on same face. - template<class TrackingData> - inline bool updateFace - ( - const polyMesh&, - const label thisFaceI, - const deltaData& neighbourInfo, - const scalar tol, - TrackingData& td - ); - - //- Same (like operator==) - template<class TrackingData> - inline bool equal(const deltaData&, TrackingData& td) const; - - // Member Operators - - // Needed for List IO - inline bool operator==(const deltaData&) const; - - inline bool operator!=(const deltaData&) const; - - // IOstream Operators - - friend Ostream& operator<< - ( - Ostream& os, - const deltaData& wDist - ) - { - return os << wDist.delta_; - } - - friend Istream& operator>>(Istream& is, deltaData& wDist) - { - return is >> wDist.delta_; - } - }; - - -private: - - // Private data - - autoPtr<LESdelta> geometricDelta_; - scalar maxDeltaRatio_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - smoothDelta(const smoothDelta&); - void operator=(const smoothDelta&); - - // Calculate the delta values - void calcDelta(); - - - void setChangedFaces - ( - const polyMesh& mesh, - const volScalarField& delta, - DynamicList<label>& changedFaces, - DynamicList<deltaData>& changedFacesInfo - ); - - -public: - - //- Runtime type information - TypeName("smooth"); - - - // Constructors - - //- Construct from name, mesh and IOdictionary - smoothDelta - ( - const word& name, - const fvMesh& mesh, - const dictionary& - ); - - - //- Destructor - virtual ~smoothDelta() - {} - - - // Member Functions - - //- Read the LESdelta dictionary - virtual void read(const dictionary&); - - // Correct values - virtual void correct(); -}; - - -//- Data associated with deltaData type are contiguous -template<> -inline bool contiguous<smoothDelta::deltaData>() -{ - return true; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#include "smoothDeltaDeltaDataI.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H b/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H deleted file mode 100644 index 16fbd8b519f..00000000000 --- a/src/turbulenceModels/LES/LESdeltas/smoothDelta/smoothDeltaDeltaDataI.H +++ /dev/null @@ -1,227 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -\*---------------------------------------------------------------------------*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -// Update this with w2 if applicable -template<class TrackingData> -inline bool smoothDelta::deltaData::update -( - const smoothDelta::deltaData& w2, - const scalar scale, - const scalar tol, - TrackingData& td -) -{ - if (!valid(td) || (delta_ < VSMALL)) - { - // My delta not set. Take over neighbour. - delta_ = w2.delta()/scale; - - // Something changed. Let caller know. - return true; - } - else if (w2.delta() > (1 + tol)*scale*delta_) - { - // Neighbour is too big for me. Up my delta. - delta_ = w2.delta()/scale; - - // Something changed. Let caller know. - return true; - } - else - { - // Neighbour is not too big for me or change is too small - // Nothing changed. - return false; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -// Null constructor -inline smoothDelta::deltaData::deltaData() -: - delta_(-GREAT) -{} - - -// Construct from components -inline smoothDelta::deltaData::deltaData(const scalar delta) -: - delta_(delta) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template<class TrackingData> -inline bool smoothDelta::deltaData::valid(TrackingData& td) const -{ - return delta_ > -SMALL; -} - - -// Checks for cyclic faces -template<class TrackingData> -inline bool smoothDelta::deltaData::sameGeometry -( - const polyMesh&, - const deltaData&, - const scalar, - TrackingData& td -) const -{ - return true; -} - - -template<class TrackingData> -inline void smoothDelta::deltaData::leaveDomain -( - const polyMesh&, - const polyPatch&, - const label, - const point&, - TrackingData& td -) -{} - - -template<class TrackingData> -inline void smoothDelta::deltaData::transform -( - const polyMesh&, - const tensor&, - TrackingData& td -) -{} - - -// Update absolute geometric quantities. -template<class TrackingData> -inline void smoothDelta::deltaData::enterDomain -( - const polyMesh&, - const polyPatch&, - const label, - const point&, - TrackingData& td -) -{} - - -// Update this (cellI) with face information. -template<class TrackingData> -inline bool smoothDelta::deltaData::updateCell -( - const polyMesh&, - const label, - const label, - const deltaData& neighbourWallInfo, - const scalar tol, - TrackingData& td -) -{ - // Take over info from face if more than deltaRatio larger. - return update(neighbourWallInfo, td, tol, td); -} - - -// Update this (face) with cell information. -template<class TrackingData> -inline bool smoothDelta::deltaData::updateFace -( - const polyMesh&, - const label, - const label, - const deltaData& neighbourWallInfo, - const scalar tol, - TrackingData& td -) -{ - // Take over information from cell without any scaling (scale = 1.0) - return update(neighbourWallInfo, 1.0, tol, td); -} - - -// Update this (face) with coupled face information. -template<class TrackingData> -inline bool smoothDelta::deltaData::updateFace -( - const polyMesh&, - const label, - const deltaData& neighbourWallInfo, - const scalar tol, - TrackingData& td -) -{ - // Take over information from coupled face without any scaling (scale = 1.0) - return update(neighbourWallInfo, 1.0, tol, td); -} - - -template<class TrackingData> -inline bool smoothDelta::deltaData::equal -( - const deltaData& rhs, - TrackingData& td -) const -{ - return operator==(rhs); -} - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -inline bool smoothDelta::deltaData::operator== -( - const deltaData& rhs -) const -{ - return delta_ == rhs.delta(); -} - - -inline bool smoothDelta::deltaData::operator!= -( - const deltaData& rhs -) const -{ - return !(*this == rhs); -} - - -// ************************************************************************* // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.C b/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.C deleted file mode 100644 index 0414535108d..00000000000 --- a/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.C +++ /dev/null @@ -1,67 +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 "error.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(LESfilter, 0); - defineRunTimeSelectionTable(LESfilter, dictionary); -} - - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -Foam::autoPtr<Foam::LESfilter> Foam::LESfilter::New -( - const fvMesh& mesh, - const dictionary& dict -) -{ - const word filterType(dict.lookup("filter")); - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(filterType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "LESfilter::New(const fvMesh&, const dictionary&)" - ) << "Unknown LESfilter type " - << filterType << nl << nl - << "Valid LESfilter types are :" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<LESfilter>(cstrIter()(mesh, dict)); -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H b/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H deleted file mode 100644 index 410ada0682c..00000000000 --- a/src/turbulenceModels/LES/LESfilters/LESfilter/LESfilter.H +++ /dev/null @@ -1,158 +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::LESfilter - -Description - Abstract class for LES filters - -SourceFiles - LESfilter.C - newFilter.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LESfilter_H -#define LESfilter_H - -#include "volFields.H" -#include "typeInfo.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -class fvMesh; - -/*---------------------------------------------------------------------------*\ - Class LESfilter Declaration -\*---------------------------------------------------------------------------*/ - -class LESfilter -{ - // Private data - - const fvMesh& mesh_; - - - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - LESfilter(const LESfilter&); - void operator=(const LESfilter&); - - -public: - - //- Runtime type information - TypeName("LESfilter"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - LESfilter, - dictionary, - ( - const fvMesh& mesh, - const dictionary& LESfilterDict - ), - (mesh, LESfilterDict) - ); - - - // Constructors - - //- Construct from components - LESfilter(const fvMesh& mesh) - : - mesh_(mesh) - {} - - - // Selectors - - //- Return a reference to the selected LES filter - static autoPtr<LESfilter> New - ( - const fvMesh&, - const dictionary& - ); - - - //- Destructor - virtual ~LESfilter() - {} - - - // Member Functions - - //- Return mesh reference - const fvMesh& mesh() const - { - return mesh_; - } - - //- Read the LESfilter dictionary - virtual void read(const dictionary&) = 0; - - - // Member Operators - - virtual tmp<volScalarField> operator() - ( - const tmp<volScalarField>& - ) const = 0; - - virtual tmp<volVectorField> operator() - ( - const tmp<volVectorField>& - ) const = 0; - - virtual tmp<volSymmTensorField> operator() - ( - const tmp<volSymmTensorField>& - ) const = 0; - - virtual tmp<volTensorField> operator() - ( - const tmp<volTensorField>& - ) const = 0; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/Make/files b/src/turbulenceModels/LES/LESfilters/Make/files deleted file mode 100644 index 864b819f321..00000000000 --- a/src/turbulenceModels/LES/LESfilters/Make/files +++ /dev/null @@ -1,6 +0,0 @@ -LESfilter/LESfilter.C -simpleFilter/simpleFilter.C -laplaceFilter/laplaceFilter.C -anisotropicFilter/anisotropicFilter.C - -LIB = $(FOAM_LIBBIN)/libLESfilters diff --git a/src/turbulenceModels/LES/LESfilters/Make/options b/src/turbulenceModels/LES/LESfilters/Make/options deleted file mode 100644 index 6d158a43206..00000000000 --- a/src/turbulenceModels/LES/LESfilters/Make/options +++ /dev/null @@ -1,4 +0,0 @@ -EXE_INC = -I$(LIB_SRC)/finiteVolume/lnInclude - -LIB_LIBS = \ - -lfiniteVolume diff --git a/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C b/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C deleted file mode 100644 index 08ce6197c65..00000000000 --- a/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.C +++ /dev/null @@ -1,239 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "anisotropicFilter.H" -#include "addToRunTimeSelectionTable.H" -#include "zeroGradientFvPatchFields.H" -#include "wallFvPatch.H" -#include "fvc.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(anisotropicFilter, 0); - addToRunTimeSelectionTable(LESfilter, anisotropicFilter, dictionary); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::anisotropicFilter::anisotropicFilter -( - const fvMesh& mesh, - scalar widthCoeff -) -: - LESfilter(mesh), - widthCoeff_(widthCoeff), - coeff_ - ( - IOobject - ( - "anisotropicFilterCoeff", - mesh.time().timeName(), - mesh - ), - mesh, - dimensionedVector("zero", dimLength*dimLength, vector::zero), - calculatedFvPatchVectorField::typeName - ) -{ - for (direction d=0; d<vector::nComponents; d++) - { - coeff_.internalField().replace - ( - d, - (1/widthCoeff_)* - sqr - ( - 2.0*mesh.V() - /fvc::surfaceSum(mag(mesh.Sf().component(d)))().internalField() - ) - ); - } -} - - -Foam::anisotropicFilter::anisotropicFilter -( - const fvMesh& mesh, - const dictionary& bd -) -: - LESfilter(mesh), - widthCoeff_(readScalar(bd.subDict(type() + "Coeffs").lookup("widthCoeff"))), - coeff_ - ( - IOobject - ( - "anisotropicFilterCoeff", - mesh.time().timeName(), - mesh - ), - mesh, - dimensionedVector("zero", dimLength*dimLength, vector::zero), - calculatedFvPatchScalarField::typeName - ) -{ - for (direction d=0; d<vector::nComponents; d++) - { - coeff_.internalField().replace - ( - d, - (1/widthCoeff_)* - sqr - ( - 2.0*mesh.V() - /fvc::surfaceSum(mag(mesh.Sf().component(d)))().internalField() - ) - ); - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::anisotropicFilter::read(const dictionary& bd) -{ - bd.subDict(type() + "Coeffs").lookup("widthCoeff") >> widthCoeff_; -} - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -Foam::tmp<Foam::volScalarField> Foam::anisotropicFilter::operator() -( - const tmp<volScalarField>& unFilteredField -) const -{ - tmp<volScalarField> tmpFilteredField = - unFilteredField - + ( - coeff_ - & fvc::surfaceIntegrate - ( - mesh().Sf() - *fvc::snGrad(unFilteredField()) - ) - ); - - unFilteredField.clear(); - - return tmpFilteredField; -} - - -Foam::tmp<Foam::volVectorField> Foam::anisotropicFilter::operator() -( - const tmp<volVectorField>& unFilteredField -) const -{ - tmp<volVectorField> tmpFilteredField = - unFilteredField - + ( - coeff_ - & fvc::surfaceIntegrate - ( - mesh().Sf() - *fvc::snGrad(unFilteredField()) - ) - ); - - unFilteredField.clear(); - - return tmpFilteredField; -} - - -Foam::tmp<Foam::volSymmTensorField> Foam::anisotropicFilter::operator() -( - const tmp<volSymmTensorField>& unFilteredField -) const -{ - tmp<volSymmTensorField> tmpFilteredField - ( - new volSymmTensorField - ( - IOobject - ( - "anisotropicFilteredSymmTensorField", - mesh().time().timeName(), - mesh() - ), - mesh(), - unFilteredField().dimensions() - ) - ); - - for (direction d=0; d<symmTensor::nComponents; d++) - { - tmpFilteredField().replace - ( - d, anisotropicFilter::operator()(unFilteredField().component(d)) - ); - } - - unFilteredField.clear(); - - return tmpFilteredField; -} - - -Foam::tmp<Foam::volTensorField> Foam::anisotropicFilter::operator() -( - const tmp<volTensorField>& unFilteredField -) const -{ - tmp<volTensorField> tmpFilteredField - ( - new volTensorField - ( - IOobject - ( - "anisotropicFilteredTensorField", - mesh().time().timeName(), - mesh() - ), - mesh(), - unFilteredField().dimensions() - ) - ); - - for (direction d=0; d<tensor::nComponents; d++) - { - tmpFilteredField().replace - ( - d, anisotropicFilter::operator()(unFilteredField().component(d)) - ); - } - - unFilteredField.clear(); - - return tmpFilteredField; -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.H b/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.H deleted file mode 100644 index aac332e3a5b..00000000000 --- a/src/turbulenceModels/LES/LESfilters/anisotropicFilter/anisotropicFilter.H +++ /dev/null @@ -1,131 +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::anisotropicFilter - -Description - anisotropic filter - - \verbatim - Kernel as filter as Test filter with ratio 2 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Box filter: g = delta2/24 -> g = delta2/6 - Spherical box filter: g = delta2/64 -> g = delta2/16 - Gaussian filter: g = delta2/24 -> g = delta2/6 - \endverbatim - -SourceFiles - anisotropicFilter.C - -\*---------------------------------------------------------------------------*/ - -#ifndef anisotropicFilter_H -#define anisotropicFilter_H - -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class anisotropicFilter Declaration -\*---------------------------------------------------------------------------*/ - -class anisotropicFilter -: - public LESfilter -{ - // Private data - - scalar widthCoeff_; - volVectorField coeff_; - - - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - anisotropicFilter(const anisotropicFilter&); - void operator=(const anisotropicFilter&); - - -public: - - //- Runtime type information - TypeName("anisotropic"); - - // Constructors - - //- Construct from components - anisotropicFilter(const fvMesh& mesh, scalar widthCoeff); - - //- Construct from IOdictionary - anisotropicFilter(const fvMesh& mesh, const dictionary&); - - - //- Destructor - virtual ~anisotropicFilter() - {} - - - // Member Functions - - //- Read the LESfilter dictionary - virtual void read(const dictionary&); - - - // Member Operators - - virtual tmp<volScalarField> operator() - ( - const tmp<volScalarField>& - ) const; - - virtual tmp<volVectorField> operator() - ( - const tmp<volVectorField>& - ) const; - - virtual tmp<volSymmTensorField> operator() - ( - const tmp<volSymmTensorField>& - ) const; - - virtual tmp<volTensorField> operator() - ( - const tmp<volTensorField>& - ) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C b/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C deleted file mode 100644 index 24db120ffa9..00000000000 --- a/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.C +++ /dev/null @@ -1,151 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "laplaceFilter.H" -#include "addToRunTimeSelectionTable.H" -#include "calculatedFvPatchFields.H" -#include "fvm.H" -#include "fvc.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(laplaceFilter, 0); - addToRunTimeSelectionTable(LESfilter, laplaceFilter, dictionary); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::laplaceFilter::laplaceFilter(const fvMesh& mesh, scalar widthCoeff) -: - LESfilter(mesh), - widthCoeff_(widthCoeff), - coeff_ - ( - IOobject - ( - "laplaceFilterCoeff", - mesh.time().timeName(), - mesh - ), - mesh, - dimensionedScalar("zero", dimLength*dimLength, 0), - calculatedFvPatchScalarField::typeName - ) -{ - coeff_.dimensionedInternalField() = pow(mesh.V(), 2.0/3.0)/widthCoeff_; -} - - -Foam::laplaceFilter::laplaceFilter(const fvMesh& mesh, const dictionary& bd) -: - LESfilter(mesh), - widthCoeff_(readScalar(bd.subDict(type() + "Coeffs").lookup("widthCoeff"))), - coeff_ - ( - IOobject - ( - "laplaceFilterCoeff", - mesh.time().timeName(), - mesh - ), - mesh, - dimensionedScalar("zero", dimLength*dimLength, 0), - calculatedFvPatchScalarField::typeName - ) -{ - coeff_.dimensionedInternalField() = pow(mesh.V(), 2.0/3.0)/widthCoeff_; -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::laplaceFilter::read(const dictionary& bd) -{ - bd.subDict(type() + "Coeffs").lookup("widthCoeff") >> widthCoeff_; -} - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -Foam::tmp<Foam::volScalarField> Foam::laplaceFilter::operator() -( - const tmp<volScalarField>& unFilteredField -) const -{ - tmp<volScalarField> filteredField = - unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volVectorField> Foam::laplaceFilter::operator() -( - const tmp<volVectorField>& unFilteredField -) const -{ - tmp<volVectorField> filteredField = - unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volSymmTensorField> Foam::laplaceFilter::operator() -( - const tmp<volSymmTensorField>& unFilteredField -) const -{ - tmp<volSymmTensorField> filteredField = - unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volTensorField> Foam::laplaceFilter::operator() -( - const tmp<volTensorField>& unFilteredField -) const -{ - tmp<volTensorField> filteredField = - unFilteredField() + fvc::laplacian(coeff_, unFilteredField()); - - unFilteredField.clear(); - - return filteredField; -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.H b/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.H deleted file mode 100644 index bb7ad27eec4..00000000000 --- a/src/turbulenceModels/LES/LESfilters/laplaceFilter/laplaceFilter.H +++ /dev/null @@ -1,132 +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::laplaceFilter - -Description - Laplace filter for LES - - \verbatim - Kernel as filter as Test filter with ratio 2 - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Box filter: g = delta2/24 -> g = delta2/6 - Spherical box filter: g = delta2/64 -> g = delta2/16 - Gaussian filter: g = delta2/24 -> g = delta2/6 - \endverbatim - -SourceFiles - laplaceFilter.C - -\*---------------------------------------------------------------------------*/ - -#ifndef laplaceFilter_H -#define laplaceFilter_H - -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class laplaceFilter Declaration -\*---------------------------------------------------------------------------*/ - -class laplaceFilter -: - public LESfilter -{ - // Private data - - scalar widthCoeff_; - volScalarField coeff_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - laplaceFilter(const laplaceFilter&); - void operator=(const laplaceFilter&); - - -public: - - //- Runtime type information - TypeName("laplace"); - - - // Constructors - - //- Construct from components - laplaceFilter(const fvMesh& mesh, scalar widthCoeff); - - //- Construct from IOdictionary - laplaceFilter(const fvMesh& mesh, const dictionary&); - - - //- Destructor - virtual ~laplaceFilter() - {} - - - // Member Functions - - //- Read the LESfilter dictionary - virtual void read(const dictionary&); - - - // Member Operators - - virtual tmp<volScalarField> operator() - ( - const tmp<volScalarField>& - ) const; - - virtual tmp<volVectorField> operator() - ( - const tmp<volVectorField>& - ) const; - - virtual tmp<volSymmTensorField> operator() - ( - const tmp<volSymmTensorField>& - ) const; - - virtual tmp<volTensorField> operator() - ( - const tmp<volTensorField>& - ) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C b/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C deleted file mode 100644 index d3140fddcc6..00000000000 --- a/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.C +++ /dev/null @@ -1,128 +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 "simpleFilter.H" -#include "addToRunTimeSelectionTable.H" -#include "fvc.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - defineTypeNameAndDebug(simpleFilter, 0); - addToRunTimeSelectionTable(LESfilter, simpleFilter, dictionary); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::simpleFilter::simpleFilter -( - const fvMesh& mesh -) -: - LESfilter(mesh) -{} - - -Foam::simpleFilter::simpleFilter(const fvMesh& mesh, const dictionary&) -: - LESfilter(mesh) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::simpleFilter::read(const dictionary&) -{} - - -// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // - -Foam::tmp<Foam::volScalarField> Foam::simpleFilter::operator() -( - const tmp<volScalarField>& unFilteredField -) const -{ - tmp<volScalarField> filteredField = fvc::surfaceSum - ( - mesh().magSf()*fvc::interpolate(unFilteredField) - )/fvc::surfaceSum(mesh().magSf()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volVectorField> Foam::simpleFilter::operator() -( - const tmp<volVectorField>& unFilteredField -) const -{ - tmp<volVectorField> filteredField = fvc::surfaceSum - ( - mesh().magSf()*fvc::interpolate(unFilteredField) - )/fvc::surfaceSum(mesh().magSf()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volSymmTensorField> Foam::simpleFilter::operator() -( - const tmp<volSymmTensorField>& unFilteredField -) const -{ - tmp<volSymmTensorField> filteredField = fvc::surfaceSum - ( - mesh().magSf()*fvc::interpolate(unFilteredField) - )/fvc::surfaceSum(mesh().magSf()); - - unFilteredField.clear(); - - return filteredField; -} - - -Foam::tmp<Foam::volTensorField> Foam::simpleFilter::operator() -( - const tmp<volTensorField>& unFilteredField -) const -{ - tmp<volTensorField> filteredField = fvc::surfaceSum - ( - mesh().magSf()*fvc::interpolate(unFilteredField) - )/fvc::surfaceSum(mesh().magSf()); - - unFilteredField.clear(); - - return filteredField; -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.H b/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.H deleted file mode 100644 index f14af21b21c..00000000000 --- a/src/turbulenceModels/LES/LESfilters/simpleFilter/simpleFilter.H +++ /dev/null @@ -1,121 +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::simpleFilter - -Description - Simple top-hat filter used in dynamic LES models. - - Implemented as a surface integral of the face interpolate of the field. - -SourceFiles - simpleFilter.C - -\*---------------------------------------------------------------------------*/ - -#ifndef simpleFilter_H -#define simpleFilter_H - -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class simpleFilter Declaration -\*---------------------------------------------------------------------------*/ - -class simpleFilter -: - public LESfilter - -{ - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - simpleFilter(const simpleFilter&); - void operator=(const simpleFilter&); - - -public: - - //- Runtime type information - TypeName("simple"); - - - // Constructors - - //- Construct from components - simpleFilter(const fvMesh& mesh); - - //- Construct from IOdictionary - simpleFilter(const fvMesh& mesh, const dictionary&); - - - //- Destructor - virtual ~simpleFilter() - {} - - - // Member Functions - - //- Read the LESfilter dictionary - virtual void read(const dictionary&); - - - // Member Operators - - virtual tmp<volScalarField> operator() - ( - const tmp<volScalarField>& - ) const; - - virtual tmp<volVectorField> operator() - ( - const tmp<volVectorField>& - ) const; - - virtual tmp<volSymmTensorField> operator() - ( - const tmp<volSymmTensorField>& - ) const; - - virtual tmp<volTensorField> operator() - ( - const tmp<volTensorField>& - ) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/Allwmake b/src/turbulenceModels/compressible/Allwmake deleted file mode 100755 index ec2033465e9..00000000000 --- a/src/turbulenceModels/compressible/Allwmake +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory - -# Parse arguments for library compilation -targetType=libso -. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x - -wmake $targetType turbulenceModel -wmake $targetType RAS -wmake $targetType LES - -# ----------------------------------------------------------------- end-of-file diff --git a/src/turbulenceModels/compressible/LES/DESModel/DESModel.C b/src/turbulenceModels/compressible/LES/DESModel/DESModel.C deleted file mode 100644 index 74873f49e56..00000000000 --- a/src/turbulenceModels/compressible/LES/DESModel/DESModel.C +++ /dev/null @@ -1,57 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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 "DESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * * // - -DESModel::DESModel -( - const word& type, - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName -) -: - LESModel(type, rho, U, phi, thermoPhysicalModel, turbulenceModelName) - -{} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/DESModel/DESModelDoc.H b/src/turbulenceModels/compressible/LES/DESModel/DESModelDoc.H deleted file mode 100644 index e9deb3208ed..00000000000 --- a/src/turbulenceModels/compressible/LES/DESModel/DESModelDoc.H +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpCmpDESTurbulence Compressible DES turbulence -@{ - \ingroup grpCmpTurbulence - This group contains compressible DES models. -@} - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.C b/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.C deleted file mode 100644 index 6d724be63a4..00000000000 --- a/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.C +++ /dev/null @@ -1,166 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "DeardorffDiffStress.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(DeardorffDiffStress, 0); -addToRunTimeSelectionTable(LESModel, DeardorffDiffStress, dictionary); - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void DeardorffDiffStress::updateSubGridScaleFields(const volScalarField& K) -{ - muSgs_ = ck_*rho()*sqrt(K)*delta(); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -DeardorffDiffStress::DeardorffDiffStress -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - GenSGSStress(rho, U, phi, thermoPhysicalModel), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.094 - ) - ), - cm_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cm", - coeffDict_, - 4.13 - ) - ) -{ - updateSubGridScaleFields(0.5*tr(B_)); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenSGSStress::correct(gradU); - - volSymmTensorField D(symm(gradU)); - - volSymmTensorField P(-rho()*twoSymm(B_ & gradU)); - - volScalarField K(0.5*tr(B_)); - - tmp<fvSymmTensorMatrix> BEqn - ( - fvm::ddt(rho(), B_) - + fvm::div(phi(), B_) - - fvm::laplacian(DBEff(), B_) - + fvm::Sp(cm_*rho()*sqrt(K)/delta(), B_) - == - P - + 0.8*rho()*K*D - - (2*ce_ - 0.667*cm_)*I*rho()*epsilon() - ); - - BEqn().relax(); - BEqn().solve(); - - // Bounding the component kinetic energies - - forAll(B_, celli) - { - B_[celli].component(symmTensor::XX) = - max(B_[celli].component(symmTensor::XX), 1.0e-10); - B_[celli].component(symmTensor::YY) = - max(B_[celli].component(symmTensor::YY), 1.0e-10); - B_[celli].component(symmTensor::ZZ) = - max(B_[celli].component(symmTensor::ZZ), 1.0e-10); - } - - K = 0.5*tr(B_); - bound(K, kMin_); - - updateSubGridScaleFields(K); -} - - -bool DeardorffDiffStress::read() -{ - if (GenSGSStress::read()) - { - ck_.readIfPresent(coeffDict()); - cm_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.H b/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.H deleted file mode 100644 index f84c00f5d3e..00000000000 --- a/src/turbulenceModels/compressible/LES/DeardorffDiffStress/DeardorffDiffStress.H +++ /dev/null @@ -1,150 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::DeardorffDiffStress - -Group - grpCmpLESTurbulence - -Description - Differential SGS Stress Equation Model for compressible flows - - The DSEM uses a model version of the full balance equation for the SGS - stress tensor to simulate the behaviour of B. - Thus, - \verbatim - d/dt(rho*B) + div(rho*U*B) - div(muSgs*grad(B)) - = - P - - c1*rho*epsilon/k*B - - 0.667*(1 - c1)*rho*epsilon*I - - c2*(P - 0.333*trP*I) - - where - - k = 0.5*trB, - epsilon = ce*k^3/2/delta, - epsilon/k = ce*k^1/2/delta - P = -rho*(B'L + L'B) - muSgs = ck*rho*sqrt(k)*delta - muEff = muSgs + mu - \endverbatim - -SourceFiles - DeardorffDiffStress.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleDeardorffDiffStress_H -#define compressibleDeardorffDiffStress_H - -#include "GenSGSStress.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class DeardorffDiffStress Declaration -\*---------------------------------------------------------------------------*/ - -class DeardorffDiffStress -: - public GenSGSStress -{ - // Private data - - dimensionedScalar ck_; - dimensionedScalar cm_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volScalarField& K); - - // Disallow default bitwise copy construct and assignment - DeardorffDiffStress(const DeardorffDiffStress&); - DeardorffDiffStress& operator=(const DeardorffDiffStress&); - - -public: - - //- Runtime type information - TypeName("DeardorffDiffStress"); - - // Constructors - - //- Constructor from components - DeardorffDiffStress - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~DeardorffDiffStress() - {} - - - // Member Functions - - //- Return the effective diffusivity for B - tmp<volScalarField> DBEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DBEff", muSgs_ + mu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.C b/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.C deleted file mode 100644 index d6ceef8489e..00000000000 --- a/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.C +++ /dev/null @@ -1,157 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameWithName(GenEddyVisc, "GenEddyVisc"); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -GenEddyVisc::GenEddyVisc -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - - ce_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ce", - coeffDict_, - 1.048 - ) - ), - - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - muSgs_ - ( - IOobject - ( - "muSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - alphaSgs_ - ( - IOobject - ( - "alphaSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{ -// printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> GenEddyVisc::B() const -{ - return ((2.0/3.0)*I)*k() - (muSgs_/rho())*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<volSymmTensorField> GenEddyVisc::devRhoBeff() const -{ - return -muEff()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> GenEddyVisc::divDevRhoBeff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -void GenEddyVisc::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); -} - - -bool GenEddyVisc::read() -{ - if (LESModel::read()) - { - ce_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.H b/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.H deleted file mode 100644 index d4af6e5e2a7..00000000000 --- a/src/turbulenceModels/compressible/LES/GenEddyVisc/GenEddyVisc.H +++ /dev/null @@ -1,172 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::GenEddyVisc - -Group - grpCmpLESTurbulence - -Description - General base class for all compressible models that can be implemented as - an eddy viscosity, i.e. algebraic and one-equation models. - - Contains fields for k (SGS turbulent kinetic energy), gamma - (modelled viscosity) and epsilon (SGS dissipation). - -SourceFiles - GenEddyVisc.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleGenEddyVisc_H -#define compressibleGenEddyVisc_H - -#include "LESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class GenEddyVisc Declaration -\*---------------------------------------------------------------------------*/ - -class GenEddyVisc -: - virtual public LESModel -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - GenEddyVisc(const GenEddyVisc&); - GenEddyVisc& operator=(const GenEddyVisc&); - - -protected: - - // Model coefficients - - dimensionedScalar ce_; - dimensionedScalar Prt_; - - - // Fields - - volScalarField muSgs_; - volScalarField alphaSgs_; - - -public: - - //- Partial Runtime type information - static const word typeName; - - // Constructors - - //- Construct from components - GenEddyVisc - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~GenEddyVisc() - {} - - - // Member Functions - - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ce_*k()*sqrt(k())/delta() - ) - ); - } - - //- Return viscosity - virtual tmp<volScalarField> muSgs() const - { - return muSgs_; - } - - //- Return thermal diffusivity - virtual tmp<volScalarField> alphaSgs() const - { - return alphaSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoBeff() const; - - //- Returns div(rho*dev(B)). - // This is the additional term due to the filtering of the NSE. - virtual tmp<fvVectorMatrix> divDevRhoBeff(volVectorField& U) const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.C b/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.C deleted file mode 100644 index f643e2c4b0a..00000000000 --- a/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.C +++ /dev/null @@ -1,178 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "GenSGSStress.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameWithName(GenSGSStress, "GenSGSStress"); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -GenSGSStress::GenSGSStress -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - - ce_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ce", - coeffDict_, - 1.048 - ) - ), - - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - B_ - ( - IOobject - ( - "B", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - muSgs_ - ( - IOobject - ( - "muSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - alphaSgs_ - ( - IOobject - ( - "alphaSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> GenSGSStress::devRhoBeff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - rho()*B_ - mu()*dev(twoSymm(fvc::grad(U()))) - ) - ); -} - - -tmp<fvVectorMatrix> GenSGSStress::divDevRhoBeff(volVectorField& U) const -{ - return - ( - fvc::div(rho()*B_ + 0.05*muSgs_*fvc::grad(U)) - + fvc::laplacian(0.95*muSgs_, U, "laplacian(muEff,U)") - - fvm::laplacian(muEff(), U) - - fvc::div(mu()*dev2(T(fvc::grad(U)))) - ); -} - - -void GenSGSStress::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); -} - - -bool GenSGSStress::read() -{ - if (LESModel::read()) - { - ce_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.H b/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.H deleted file mode 100644 index 44eef6da8f1..00000000000 --- a/src/turbulenceModels/compressible/LES/GenSGSStress/GenSGSStress.H +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::GenSGSStress - -Group - grpCmpLESTurbulence - -Description - General base class for all compressible models that directly - solve for the SGS stress tensor B. - - Contains tensor fields B (the SGS stress tensor) as well as scalar - fields for k (SGS turbulent energy) gamma (SGS viscosity) and epsilon - (SGS dissipation). - -SourceFiles - GenSGSStress.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleGenSGSStress_H -#define compressibleGenSGSStress_H - -#include "LESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class GenSGSStress Declaration -\*---------------------------------------------------------------------------*/ - -class GenSGSStress -: - virtual public LESModel -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - GenSGSStress(const GenSGSStress&); - GenSGSStress& operator=(const GenSGSStress&); - - -protected: - - // Model coefficients - - dimensionedScalar ce_; - dimensionedScalar Prt_; - - // Fields - - volSymmTensorField B_; - volScalarField muSgs_; - volScalarField alphaSgs_; - - -public: - - //- Partial Runtime type information - static const word typeName; - - // Constructors - - //- Constructor from components - GenSGSStress - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~GenSGSStress() - {} - - - // Member Functions - - //- Return the SGS turbulent kinetic energy - virtual tmp<volScalarField> k() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - 0.5*tr(B_) - ) - ); - } - - //- Return the SGS turbulent dissipation - virtual tmp<volScalarField> epsilon() const - { - const volScalarField K(k()); - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ce_*K*sqrt(K)/delta() - ) - ); - } - - //- Return the SGS viscosity - virtual tmp<volScalarField> muSgs() const - { - return muSgs_; - } - - //- Return the SGS thermal diffusivity - virtual tmp<volScalarField> alphaSgs() const - { - return alphaSgs_; - } - - //- Return the sub-grid stress tensor - virtual tmp<volSymmTensorField> B() const - { - return B_; - } - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoBeff() const; - - //- Returns divergence of B : i.e. the additional term in the - // filtered NSE - virtual tmp<fvVectorMatrix> divDevRhoBeff(volVectorField& U) const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/LESModel/LESModel.C b/src/turbulenceModels/compressible/LES/LESModel/LESModel.C deleted file mode 100644 index 0a338e29068..00000000000 --- a/src/turbulenceModels/compressible/LES/LESModel/LESModel.C +++ /dev/null @@ -1,209 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "LESModel.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LESModel, 0); -defineRunTimeSelectionTable(LESModel, dictionary); -addToRunTimeSelectionTable(turbulenceModel, LESModel, turbulenceModel); - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void LESModel::printCoeffs() -{ - if (printCoeffs_) - { - Info<< type() << "Coeffs" << coeffDict_ << endl; - } -} - - -// * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * * // - -LESModel::LESModel -( - const word& type, - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName -) -: - turbulenceModel(rho, U, phi, thermoPhysicalModel, turbulenceModelName), - - IOdictionary - ( - IOobject - ( - "LESProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ), - - printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subOrEmptyDict(type + "Coeffs")), - - kMin_("kMin", sqr(dimVelocity), SMALL), - - delta_(LESdelta::New("delta", U.mesh(), *this)) -{ - kMin_.readIfPresent(*this); - - // Force the construction of the mesh deltaCoeffs which may be needed - // for the construction of the derived models and BCs - mesh_.deltaCoeffs(); -} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<LESModel> LESModel::New -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "LESProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("LESModel") - ); - - Info<< "Selecting LES turbulence model " << modelType << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(modelType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "LESModel::New" - "(" - "const volScalarField&, " - "const volVectorField&, " - "const surfaceScalarField&, " - "const fluidThermo&, " - "const word&" - ")" - ) << "Unknown LESModel type " - << modelType << nl << nl - << "Valid LESModel types:" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<LESModel> - ( - cstrIter()(rho, U, phi, thermoPhysicalModel, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void LESModel::correct(const tmp<volTensorField>&) -{ - turbulenceModel::correct(); - delta_().correct(); -} - - -void LESModel::correct() -{ - correct(fvc::grad(U_)); -} - - -bool LESModel::read() -{ - // Bit of trickery : we are both IOdictionary ('RASProperties') and - // an regIOobject (from the turbulenceModel). Problem is to distinguish - // between the two - we only want to reread the IOdictionary. - - bool ok = IOdictionary::readData - ( - IOdictionary::readStream - ( - IOdictionary::type() - ) - ); - IOdictionary::close(); - - if (ok) - { - if (const dictionary* dictPtr = subDictPtr(type() + "Coeffs")) - { - coeffDict_ <<= *dictPtr; - } - - kMin_.readIfPresent(*this); - - delta_().read(*this); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/LESModel/LESModel.H b/src/turbulenceModels/compressible/LES/LESModel/LESModel.H deleted file mode 100644 index 5b4cc39fca2..00000000000 --- a/src/turbulenceModels/compressible/LES/LESModel/LESModel.H +++ /dev/null @@ -1,304 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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/>. - -Namespace - Foam::compressible::LESModels - -Group - grpCmpLESTurbulence - -Description - Namespace for compressible LES models. - -Class - Foam::compressible::LESModel - -Description - Base class for all compressible flow LES SGS models. - - This class defines the basic interface for a compressible flow SGS - model, and encapsulates data of value to all possible models. - In particular this includes references to all the dependent fields - (rho, U, phi), the physical viscosity mu, and the LESProperties - dictionary, which contains the model selection and model coefficients. - -SourceFiles - LESModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLESModel_H -#define compressibleLESModel_H - -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "compressible/LES/compressibleLESdelta/compressibleLESdelta.H" -#include "fvm.H" -#include "fvc.H" -#include "fvMatrices.H" -#include "fluidThermo.H" -#include "bound.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class LESModel Declaration -\*---------------------------------------------------------------------------*/ - -class LESModel -: - public turbulenceModel, - public IOdictionary -{ - -protected: - - // Protected data - - Switch printCoeffs_; - dictionary coeffDict_; - - dimensionedScalar kMin_; - - autoPtr<Foam::LESdelta> delta_; - - - // Protected Member Functions - - //- Print model coefficients - virtual void printCoeffs(); - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - LESModel(const LESModel&); - - //- Disallow default bitwise assignment - LESModel& operator=(const LESModel&); - - -public: - - //- Runtime type information - TypeName("LESModel"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - LESModel, - dictionary, - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName - ), - (rho, U, phi, thermoPhysicalModel, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - LESModel - ( - const word& type, - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - // Selectors - - //- Return a reference to the selected LES model - static autoPtr<LESModel> New - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - //- Destructor - virtual ~LESModel() - {} - - - // Member Functions - - // Access - - //- Const access to the coefficients dictionary, - // which provides info. about choice of models, - // and all related data (particularly model coefficients). - virtual const dictionary& coeffDict() const - { - return coeffDict_; - } - - //- Return the lower allowable limit for k (default: SMALL) - const dimensionedScalar& kMin() const - { - return kMin_; - } - - //- Allow kMin to be changed - dimensionedScalar& kMin() - { - return kMin_; - } - - //- Access function to filter width - inline const volScalarField& delta() const - { - return delta_(); - } - - - //- Return the SGS turbulent viscosity - virtual tmp<volScalarField> muSgs() const = 0; - - //- Return the effective viscosity - virtual tmp<volScalarField> muEff() const - { - return tmp<volScalarField> - ( - new volScalarField("muEff", muSgs() + mu()) - ); - } - - //- Return the SGS turbulent thermal diffusivity - virtual tmp<volScalarField> alphaSgs() const = 0; - - //- Return the effective turbulent temperature diffusivity - virtual tmp<volScalarField> kappaEff() const - { - return thermo().kappaEff(alphaSgs()); - } - - //- Return the effective turbulent temperature diffusivity for a patch - virtual tmp<scalarField> kappaEff(const label patchI) const - { - return - thermo().kappaEff(alphaSgs()().boundaryField()[patchI], patchI); - } - - //- Return the effective thermal diffusivity - virtual tmp<volScalarField> alphaEff() const - { - return thermo().alphaEff(alphaSgs()); - } - - //- Return the effective turbulence thermal diffusivity for a patch - virtual tmp<scalarField> alphaEff(const label patchI) const - { - return - thermo().alphaEff(alphaSgs()().boundaryField()[patchI], patchI); - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const = 0; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoBeff() const = 0; - - //- Returns div(rho*dev(B)). - // This is the additional term due to the filtering of the NSE. - virtual tmp<fvVectorMatrix> divDevRhoBeff(volVectorField& U) const = 0; - - - // RAS compatibility functions for the turbulenceModel base class - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return muSgs(); - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphaSgs(); - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return B(); - } - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const - { - return devRhoBeff(); - } - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const - { - return divDevRhoBeff(U); - } - - - //- Correct Eddy-Viscosity and related properties. - // This calls correct(const tmp<volTensorField>& gradU) by supplying - // gradU calculated locally. - virtual void correct(); - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/LESModel/LESModelDoc.H b/src/turbulenceModels/compressible/LES/LESModel/LESModelDoc.H deleted file mode 100644 index ac8c52e36ad..00000000000 --- a/src/turbulenceModels/compressible/LES/LESModel/LESModelDoc.H +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpCmpLESTurbulence Compressible LES turbulence -@{ - \ingroup grpCmpTurbulence - This group contains compressible LES models. -@} - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/compressible/LES/Make/files b/src/turbulenceModels/compressible/LES/Make/files deleted file mode 100644 index 58e7485772a..00000000000 --- a/src/turbulenceModels/compressible/LES/Make/files +++ /dev/null @@ -1,16 +0,0 @@ -LESModel/LESModel.C -DESModel/DESModel.C -GenEddyVisc/GenEddyVisc.C -GenSGSStress/GenSGSStress.C - -Smagorinsky/Smagorinsky.C -oneEqEddy/oneEqEddy.C -lowReOneEqEddy/lowReOneEqEddy.C -homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C -DeardorffDiffStress/DeardorffDiffStress.C -SpalartAllmaras/SpalartAllmaras.C - -compressibleLESdelta/compressibleLESdelta.C -vanDriestDelta/vanDriestDelta.C - -LIB = $(FOAM_LIBBIN)/libcompressibleLESModels diff --git a/src/turbulenceModels/compressible/LES/Make/options b/src/turbulenceModels/compressible/LES/Make/options deleted file mode 100644 index 5f392cebf63..00000000000 --- a/src/turbulenceModels/compressible/LES/Make/options +++ /dev/null @@ -1,14 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESfilters/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude - -LIB_LIBS = \ - -lcompressibleTurbulenceModel \ - -lLESdeltas \ - -lLESfilters \ - -lfiniteVolume \ - -lmeshTools diff --git a/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.C b/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.C deleted file mode 100644 index 89719bb7e57..00000000000 --- a/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.C +++ /dev/null @@ -1,125 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "Smagorinsky.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Smagorinsky, 0); -addToRunTimeSelectionTable(LESModel, Smagorinsky, dictionary); - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Smagorinsky::updateSubGridScaleFields(const volTensorField& gradU) -{ - volSymmTensorField D(symm(gradU)); - - volScalarField a(ce_/delta()); - volScalarField b((2.0/3.0)*tr(D)); - volScalarField c(2*ck_*delta()*(dev(D) && D)); - - volScalarField k(sqr((-b + sqrt(sqr(b) + 4*a*c))/(2*a))); - - muSgs_ = ck_*rho()*delta()*sqrt(k); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Smagorinsky::Smagorinsky -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - GenEddyVisc(rho, U, phi, thermoPhysicalModel), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.02 - ) - ) -{ - updateSubGridScaleFields(fvc::grad(U)); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Smagorinsky::correct(const tmp<volTensorField>& gradU) -{ - GenEddyVisc::correct(gradU); - updateSubGridScaleFields(gradU()); -} - - -bool Smagorinsky::read() -{ - if (GenEddyVisc::read()) - { - ck_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.H b/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.H deleted file mode 100644 index 56821ae60eb..00000000000 --- a/src/turbulenceModels/compressible/LES/Smagorinsky/Smagorinsky.H +++ /dev/null @@ -1,153 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::Smagorinsky - -Group - grpCmpLESTurbulence - -Description - The choric Smagorinsky Model for compressible flows. - - Algebraic eddy viscosity SGS model founded on the assumption that - local equilibrium prevails. - Thus, - \verbatim - - B = 2/3*k*I - 2*nuSgs*dev(D) - - where - - D = symm(grad(U)); - k from rho*D:B + ce*rho*k^3/2/delta = 0 - muSgs = ck*rho*sqrt(k)*delta - \endverbatim - -SourceFiles - Smagorinsky.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleSmagorinsky_H -#define compressibleSmagorinsky_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class Smagorinsky Declaration -\*---------------------------------------------------------------------------*/ - -class Smagorinsky -: - public GenEddyVisc -{ - // Private data - - dimensionedScalar ck_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volTensorField& gradU); - - // Disallow default bitwise copy construct and assignment - Smagorinsky(const Smagorinsky&); - Smagorinsky& operator=(const Smagorinsky&); - - -public: - - //- Runtime type information - TypeName("Smagorinsky"); - - // Constructors - - //- Construct from components - Smagorinsky - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~Smagorinsky() - {} - - - // Member Functions - - //- Return SGS kinetic energy - // calculated from the given velocity gradient - tmp<volScalarField> k(const tmp<volTensorField>& gradU) const - { - volSymmTensorField D(symm(gradU)); - - volScalarField a(ce_/delta()); - volScalarField b((2.0/3.0)*tr(D)); - volScalarField c(2*ck_*delta()*(dev(D) && D)); - - return sqr((-b + sqrt(sqr(b) + 4*a*c))/(2*a)); - } - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k(fvc::grad(U())); - } - - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.C b/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.C deleted file mode 100644 index ab6718a0cc4..00000000000 --- a/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.C +++ /dev/null @@ -1,445 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmaras.H" -#include "addToRunTimeSelectionTable.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmaras, 0); -addToRunTimeSelectionTable(LESModel, SpalartAllmaras, dictionary); - - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -void SpalartAllmaras::updateSubGridScaleFields() -{ - muSgs_.internalField() = rho()*fv1()*nuTilda_.internalField(); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -tmp<volScalarField> SpalartAllmaras::fv1() const -{ - volScalarField chi3(pow3(rho()*nuTilda_/mu())); - return chi3/(chi3 + pow3(Cv1_)); -} - - -tmp<volScalarField> SpalartAllmaras::fv2() const -{ - if (ashfordCorrection_) - { - return 1.0/pow3(scalar(1) + rho()*nuTilda_/(mu()*Cv2_)); - } - else - { - const volScalarField chi("chi", rho()*nuTilda_/mu()); - return 1.0 - chi/(1.0 + chi*fv1()); - } -} - - -tmp<volScalarField> SpalartAllmaras::fv3() const -{ - if (ashfordCorrection_) - { - volScalarField chi(rho()*nuTilda_/mu()); - volScalarField chiByCv2((1/Cv2_)*chi); - - return - (scalar(1) + chi*fv1()) - *(1/Cv2_) - *(3*(scalar(1) + chiByCv2) + sqr(chiByCv2)) - /pow3(scalar(1) + chiByCv2); - } - else - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "fv3", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("fv3", dimless, 1), - zeroGradientFvPatchScalarField::typeName - ) - ); - } -} - - -tmp<volScalarField> SpalartAllmaras::fw -( - const volScalarField& Stilda, - const volScalarField& dTilda -) const -{ - volScalarField r - ( - min - ( - nuTilda_ - /( - max - ( - Stilda, - dimensionedScalar("SMALL", Stilda.dimensions(), SMALL) - ) - *sqr(kappa_*dTilda) - ), - scalar(10.0) - ) - ); - r.boundaryField() == 0.0; - - volScalarField g(r + Cw2_*(pow6(r) - r)); - - return g*pow((1.0 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); -} - - -tmp<volScalarField> SpalartAllmaras::dTilda() const -{ - tmp<volScalarField> tdTilda(CDES_*delta()); - min(tdTilda().dimensionedInternalField(), tdTilda(), y_); - return tdTilda; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -SpalartAllmaras::SpalartAllmaras -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - DESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - - sigmaNut_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaNut", - coeffDict_, - 0.66666 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - Cb1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb1", - coeffDict_, - 0.1355 - ) - ), - Cb2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb2", - coeffDict_, - 0.622 - ) - ), - Cv1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv1", - coeffDict_, - 7.1 - ) - ), - Cv2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv2", - coeffDict_, - 5.0 - ) - ), - CDES_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "CDES", - coeffDict_, - 0.65 - ) - ), - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.07 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - *this, - 0.41 - ) - ), - Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), - Cw2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw2", - coeffDict_, - 0.3 - ) - ), - Cw3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw3", - coeffDict_, - 2.0 - ) - ), - - ashfordCorrection_(coeffDict_.lookupOrDefault("ashfordCorrection", true)), - - y_(wallDist::New(mesh_).y()), - - nuTilda_ - ( - IOobject - ( - "nuTilda", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - muSgs_ - ( - IOobject - ( - "muSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - alphaSgs_ - ( - IOobject - ( - "alphaSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{ - updateSubGridScaleFields(); - - printCoeffs(); - - if (ashfordCorrection_) - { - Info<< " Employing Ashford correction" << endl; - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> SpalartAllmaras::B() const -{ - return ((2.0/3.0)*I)*k() - (muSgs_/rho())*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<volSymmTensorField> SpalartAllmaras::devRhoBeff() const -{ - return -muEff()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<volScalarField> SpalartAllmaras::epsilon() const -{ - return 2*muEff()/rho()*magSqr(symm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevRhoBeff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -void SpalartAllmaras::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - LESModel::correct(gradU); - - const volScalarField dTilda(this->dTilda()); - volScalarField Stilda - ( - fv3()*::sqrt(2.0)*mag(skew(gradU)) + fv2()*nuTilda_/sqr(kappa_*dTilda) - ); - - tmp<fvScalarMatrix> nuTildaEqn - ( - fvm::ddt(rho(), nuTilda_) - + fvm::div(phi(), nuTilda_) - - fvm::laplacian - ( - (nuTilda_*rho() + mu())/sigmaNut_, - nuTilda_, - "laplacian(DnuTildaEff,nuTilda)" - ) - - rho()*Cb2_/sigmaNut_*magSqr(fvc::grad(nuTilda_)) - == - rho()*Cb1_*Stilda*nuTilda_ - - fvm::Sp(rho()*Cw1_*fw(Stilda, dTilda)*nuTilda_/sqr(dTilda), nuTilda_) - ); - - nuTildaEqn().relax(); - nuTildaEqn().solve(); - - bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0)); - nuTilda_.correctBoundaryConditions(); - - updateSubGridScaleFields(); -} - - -bool SpalartAllmaras::read() -{ - if (LESModel::read()) - { - sigmaNut_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - Cb1_.readIfPresent(coeffDict()); - Cb2_.readIfPresent(coeffDict()); - Cv1_.readIfPresent(coeffDict()); - Cv2_.readIfPresent(coeffDict()); - CDES_.readIfPresent(coeffDict()); - ck_.readIfPresent(coeffDict()); - kappa_.readIfPresent(*this); - Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; - Cw2_.readIfPresent(coeffDict()); - Cw3_.readIfPresent(coeffDict()); - - ashfordCorrection_.readIfPresent("ashfordCorrection", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -tmp<volScalarField> SpalartAllmaras::LESRegion() const -{ - tmp<volScalarField> tLESRegion - ( - new volScalarField - ( - IOobject - ( - "DES::LESRegion", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - neg(dTilda() - y_) - ) - ); - - return tLESRegion; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.H b/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.H deleted file mode 100644 index 133cd6d1734..00000000000 --- a/src/turbulenceModels/compressible/LES/SpalartAllmaras/SpalartAllmaras.H +++ /dev/null @@ -1,214 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::compressible::LESModels::SpalartAllmaras - -Group - grpCmpDESTurbulence - -Description - SpalartAllmaras for compressible flows - - Extended according to - \verbatim - "An Unstructured Grid Generation and Adaptive Solution Technique - for High Reynolds Number Compressible Flows" - G.A. Ashford, - Ph.D. thesis, University of Michigan, 1996. - \endverbatim - by using the optional flag \c ashfordCorrection - -SourceFiles - SpalartAllmaras.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleSpalartAllmaras_H -#define compressibleSpalartAllmaras_H - -#include "DESModel.H" -#include "volFields.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class SpalartAllmaras Declaration -\*---------------------------------------------------------------------------*/ - -class SpalartAllmaras -: - public DESModel -{ - // Private data - - // Model coefficients - - dimensionedScalar sigmaNut_; - dimensionedScalar Prt_; - - dimensionedScalar Cb1_; - dimensionedScalar Cb2_; - dimensionedScalar Cv1_; - dimensionedScalar Cv2_; - dimensionedScalar CDES_; - dimensionedScalar ck_; - dimensionedScalar kappa_; - dimensionedScalar Cw1_; - dimensionedScalar Cw2_; - dimensionedScalar Cw3_; - - - //- Optional flag to activate the Ashford correction - Switch ashfordCorrection_; - - - // Fields - - //- Wall distance - // Note: different to wall distance in parent RASModel - // which is for near-wall cells only - const volScalarField& y_; - - volScalarField nuTilda_; - volScalarField muSgs_; - volScalarField alphaSgs_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(); - - tmp<volScalarField> fv1() const; - tmp<volScalarField> fv2() const; - tmp<volScalarField> fv3() const; - - tmp<volScalarField> fw - ( - const volScalarField& Stilda, - const volScalarField& dTilda - ) const; - - //- Length scale - tmp<volScalarField> dTilda() const; - - // Disallow default bitwise copy construct and assignment - SpalartAllmaras(const SpalartAllmaras&); - SpalartAllmaras& operator=(const SpalartAllmaras&); - - -public: - - //- Runtime type information - TypeName("SpalartAllmaras"); - - - // Constructors - - //- Constructor from components - SpalartAllmaras - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~SpalartAllmaras() - {} - - - // Member Functions - - tmp<volScalarField> nuTilda() const - { - return nuTilda_; - } - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return sqr(muSgs()/rho()/ck_/dTilda()); - } - - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const; - - //- Return SGS viscosity - virtual tmp<volScalarField> muSgs() const - { - return muSgs_; - } - - //- Return SGS thermal diffusivity - virtual tmp<volScalarField> alphaSgs() const - { - return alphaSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoBeff() const; - - //- Returns div(rho*dev(B)). - // This is the additional term due to the filtering of the NSE. - virtual tmp<fvVectorMatrix> divDevRhoBeff(volVectorField& U) const; - - //- Correct nuTilda and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); - - //- Return the LES field indicator - virtual tmp<volScalarField> LESRegion() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.C b/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.C deleted file mode 100644 index 4b8fbbc44ad..00000000000 --- a/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.C +++ /dev/null @@ -1,66 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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 "compressibleLESdelta.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineRunTimeSelectionTable(LESdelta, dictionary); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LESdelta::LESdelta(const word& name, const fvMesh& mesh) -: - foamLESdelta(name, mesh) -{} - - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -Foam::autoPtr<foamLESdelta> LESdelta::New -( - const word& name, - const fvMesh& mesh, - const dictionary& dict -) -{ - return foamLESdelta::New(name, mesh, dict, *dictionaryConstructorTablePtr_); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.H b/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.H deleted file mode 100644 index 56d1437cc2d..00000000000 --- a/src/turbulenceModels/compressible/LES/compressibleLESdelta/compressibleLESdelta.H +++ /dev/null @@ -1,109 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESdelta - -Description - Abstract base class for compressible LES deltas - -SourceFiles - compressibleLESdelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLESdelta_H -#define compressibleLESdelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// To avoid macro problems typedef scoped class -typedef Foam::LESdelta foamLESdelta; - -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class LESdelta Declaration -\*---------------------------------------------------------------------------*/ - -class LESdelta -: - public foamLESdelta -{ - -public: - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - foamLESdelta, - dictionary, - ( - const word& name, - const fvMesh& mesh, - const dictionary& LESdeltaDict - ), - (name, mesh, LESdeltaDict) - ); - - // Constructors - - //- Construct from name and mesh - LESdelta(const word& name, const fvMesh& mesh); - - - // Selectors - - //- Return a reference to the selected LES delta - static autoPtr<foamLESdelta> New - ( - const word& name, - const fvMesh& mesh, - const dictionary& dict - ); - - - //- Destructor - virtual ~LESdelta() - {} -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C b/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C deleted file mode 100644 index 7b146b89a10..00000000000 --- a/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C +++ /dev/null @@ -1,191 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "homogeneousDynOneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(homogeneousDynOneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, homogeneousDynOneEqEddy, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void homogeneousDynOneEqEddy::updateSubGridScaleFields -( - const volSymmTensorField& D -) -{ - muSgs_ = ck_(D)*rho()*sqrt(k_)*delta(); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -dimensionedScalar homogeneousDynOneEqEddy::ck_ -( - const volSymmTensorField& D -) const -{ - volScalarField KK(0.5*(filter_(magSqr(U())) - magSqr(filter_(U())))); - - volSymmTensorField LL(dev(filter_(sqr(U())) - (sqr(filter_(U()))))); - - volSymmTensorField MM - ( - delta()*(filter_(sqrt(k_)*D) - 2*sqrt(KK + filter_(k_))*filter_(D)) - ); - - return average(LL && MM)/average(magSqr(MM)); -} - - -dimensionedScalar homogeneousDynOneEqEddy::ce_ -( - const volSymmTensorField& D -) const -{ - volScalarField KK(0.5*(filter_(magSqr(U())) - magSqr(filter_(U())))); - - volScalarField mm - ( - pow(KK + filter_(k_), 1.5)/(2*delta()) - filter_(pow(k_, 1.5))/delta() - ); - - volScalarField ee - ( - 2*delta()*ck_(D) - *( - filter_(sqrt(k_)*magSqr(D)) - - 2*sqrt(KK + filter_(k_))*magSqr(filter_(D)) - ) - ); - - return average(ee*mm)/average(mm*mm); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -homogeneousDynOneEqEddy::homogeneousDynOneEqEddy -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - GenEddyVisc(rho, U, phi, thermoPhysicalModel), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()) -{ - updateSubGridScaleFields(dev(symm(fvc::grad(U)))); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void homogeneousDynOneEqEddy::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenEddyVisc::correct(gradU); - - volSymmTensorField D(dev(symm(gradU))); - volScalarField divU(fvc::div(phi()/fvc::interpolate(rho()))); - volScalarField G(GName(), 2*muSgs_*(gradU && D)); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho(), k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::SuSp(2.0/3.0*rho()*divU, k_) - - fvm::Sp(ce_(D)*rho()*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(D); -} - - -bool homogeneousDynOneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - filter_.read(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H b/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H deleted file mode 100644 index fca371f0d39..00000000000 --- a/src/turbulenceModels/compressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H +++ /dev/null @@ -1,161 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::homogeneousDynOneEqEddy - -Group - grpCmpLESTurbulence - -Description - One Equation Eddy Viscosity Model for compressible flows. - - Eddy viscosity SGS model using a modeled balance equation to simulate - the behaviour of k. - Thus - \verbatim - d/dt(k) + div(U*k) - div(nuSgs*grad(k)) - = - -rho*B*L - ce*rho*k^3/2/delta - - and - - B = 2/3*k*I - 2*nuSgs*dev(D) - - where - - D = symm(grad(U)); - nuSgs = ck*sqrt(k)*delta - \endverbatim - -SourceFiles - homogeneousDynOneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleHomogeneousDynOneEqEddy_H -#define compressibleHomogeneousDynOneEqEddy_H - -#include "GenEddyVisc.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class homogeneousDynOneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class homogeneousDynOneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volSymmTensorField& D); - - //- Calculate ck, ce by filtering the velocity field U. - dimensionedScalar ck_(const volSymmTensorField& D) const; - dimensionedScalar ce_(const volSymmTensorField& D) const; - - // Disallow default bitwise copy construct and assignment - homogeneousDynOneEqEddy(const homogeneousDynOneEqEddy&); - homogeneousDynOneEqEddy& operator=(const homogeneousDynOneEqEddy&); - - -public: - - //- Runtime type information - TypeName("homogeneousDynOneEqEddy"); - - - // Constructors - - //- Constructor from components - homogeneousDynOneEqEddy - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~homogeneousDynOneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", muSgs_ + mu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.C b/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.C deleted file mode 100644 index 704daaa4898..00000000000 --- a/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.C +++ /dev/null @@ -1,165 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "lowReOneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -defineTypeNameAndDebug(lowReOneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, lowReOneEqEddy, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void lowReOneEqEddy::updateSubGridScaleFields() -{ - // High Re eddy viscosity - muSgs_ = ck_*rho()*sqrt(k_)*delta(); - - // low Re no corrected eddy viscosity - muSgs_ -= (mu()/beta_)*(scalar(1) - exp(-beta_*muSgs_/mu())); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -lowReOneEqEddy::lowReOneEqEddy -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - GenEddyVisc(rho, U, phi, thermoPhysicalModel), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.07 - ) - ), - beta_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta", - coeffDict_, - 0.01 - ) - ) -{ - updateSubGridScaleFields(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void lowReOneEqEddy::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenEddyVisc::correct(gradU); - - volScalarField divU(fvc::div(phi()/fvc::interpolate(rho()))); - volScalarField G(GName(), 2*muSgs_*(gradU && dev(symm(gradU)))); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho(), k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::SuSp(2.0/3.0*rho()*divU, k_) - - fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(); -} - - -bool lowReOneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - ck_.readIfPresent(coeffDict()); - beta_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.H b/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.H deleted file mode 100644 index e3e836d3a58..00000000000 --- a/src/turbulenceModels/compressible/LES/lowReOneEqEddy/lowReOneEqEddy.H +++ /dev/null @@ -1,152 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::lowReOneEqEddy - -Group - grpCmpLESTurbulence - -Description - One Equation Eddy Viscosity Model for compressible flow - - \verbatim - d/dt(rho*k) + div(rho*U*k) - div(muEff*grad(k)) - = - -rho*B*L - ce*rho*k^3/2/delta - - and - - B = 2/3*k*I - 2*nuSgs*dev(D) - - where - - nuSgsHiRe = ck*sqrt(k)*delta - nuSgs = (nu/beta)*(1 - exp(-beta*nuSgsHiRe/nu)); - \endverbatim - -SourceFiles - lowReOneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLowReOneEqEddy_H -#define compressibleLowReOneEqEddy_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class lowReOneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class lowReOneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - dimensionedScalar ck_; - dimensionedScalar beta_; - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(); - - // Disallow default bitwise copy construct and assignment - lowReOneEqEddy(const lowReOneEqEddy&); - lowReOneEqEddy& operator=(const lowReOneEqEddy&); - - -public: - - //- Runtime type information - TypeName("lowReOneEqEddy"); - - - // Constructors - - //- Constructor from components - lowReOneEqEddy - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~lowReOneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", muSgs_ + mu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.C b/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.C deleted file mode 100644 index 537e98ecf76..00000000000 --- a/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.C +++ /dev/null @@ -1,151 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "oneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(oneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, oneEqEddy, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void oneEqEddy::updateSubGridScaleFields() -{ - muSgs_ = ck_*rho()*sqrt(k_)*delta(); - muSgs_.correctBoundaryConditions(); - - alphaSgs_ = muSgs_/Prt_; - alphaSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -oneEqEddy::oneEqEddy -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, rho, U, phi, thermoPhysicalModel, turbulenceModelName), - GenEddyVisc(rho, U, phi, thermoPhysicalModel), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.094 - ) - ) -{ - updateSubGridScaleFields(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void oneEqEddy::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenEddyVisc::correct(gradU); - - volScalarField divU(fvc::div(phi()/fvc::interpolate(rho()))); - volScalarField G(GName(), 2*muSgs_*(gradU && dev(symm(gradU)))); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho(), k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::SuSp(2.0/3.0*rho()*divU, k_) - - fvm::Sp(ce_*rho()*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(); -} - - -bool oneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - ck_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.H b/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.H deleted file mode 100644 index 7e0896935ca..00000000000 --- a/src/turbulenceModels/compressible/LES/oneEqEddy/oneEqEddy.H +++ /dev/null @@ -1,156 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::oneEqEddy - -Group - grpCmpLESTurbulence - -Description - One Equation Eddy Viscosity Model for compressible flows - - Eddy viscosity SGS model using a modeled balance equation to simulate the - behaviour of k, hence, - \verbatim - d/dt(rho*k) + div(rho*U*k) - div(muEff*grad(k)) - = - -rho*D:B - ce*rho*k^(3/2)/delta - - and - - B = 2/3*k*I - 2*nuSgs*dev(D) - - where - - D = symm(grad(U)); - nuSgs = ck*sqrt(k)*delta - muSgs = rho*nuSgs - muEff = muSgs + mu - \endverbatim - -SourceFiles - oneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleOneEqEddy_H -#define compressibleOneEqEddy_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class oneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class oneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - dimensionedScalar ck_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(); - - // Disallow default bitwise copy construct and assignment - oneEqEddy(const oneEqEddy&); - oneEqEddy& operator=(const oneEqEddy&); - - -public: - - //- Runtime type information - TypeName("oneEqEddy"); - - - // Constructors - - //- Constructor from components - oneEqEddy - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~oneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", muSgs_ + mu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.C b/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.C deleted file mode 100644 index 8c9137846d0..00000000000 --- a/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.C +++ /dev/null @@ -1,161 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "vanDriestDelta.H" -#include "LESModel.H" -#include "wallFvPatch.H" -#include "wallDistData.H" -#include "wallPointYPlus.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(vanDriestDelta, 0); -addToRunTimeSelectionTable(LESdelta, vanDriestDelta, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void vanDriestDelta::calcDelta() -{ - const LESModel& lesModel = mesh_.lookupObject<LESModel>("LESProperties"); - - const volVectorField& U = lesModel.U(); - const volScalarField& rho = lesModel.rho(); - const volScalarField& mu = lesModel.mu(); - tmp<volScalarField> muSgs = lesModel.muSgs(); - - volScalarField ystar - ( - IOobject - ( - "ystar", - mesh_.time().constant(), - mesh_ - ), - mesh_, - dimensionedScalar("ystar", dimLength, GREAT) - ); - - const fvPatchList& patches = mesh_.boundary(); - forAll(patches, patchi) - { - if (isA<wallFvPatch>(patches[patchi])) - { - const fvPatchVectorField& Uw = U.boundaryField()[patchi]; - const scalarField& rhow = rho.boundaryField()[patchi]; - const scalarField& muw = mu.boundaryField()[patchi]; - const scalarField& muSgsw = muSgs().boundaryField()[patchi]; - - ystar.boundaryField()[patchi] = - muw/(rhow*sqrt((muw + muSgsw)*mag(Uw.snGrad())/rhow + VSMALL)); - } - } - - scalar cutOff = wallPointYPlus::yPlusCutOff; - wallPointYPlus::yPlusCutOff = 500; - wallDistData<wallPointYPlus> y(mesh_, ystar); - wallPointYPlus::yPlusCutOff = cutOff; - - delta_ = min - ( - static_cast<const volScalarField&>(geometricDelta_()), - (kappa_/Cdelta_)*((scalar(1) + SMALL) - exp(-y/ystar/Aplus_))*y - ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -vanDriestDelta::vanDriestDelta -( - const word& name, - const fvMesh& mesh, - const dictionary& dd -) -: - LESdelta(name, mesh), - geometricDelta_ - ( - LESdelta::New("geometricDelta", mesh, dd.subDict(type() + "Coeffs")) - ), - kappa_(dd.lookupOrDefault<scalar>("kappa", 0.41)), - Aplus_ - ( - dd.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Aplus", 26.0) - ), - Cdelta_ - ( - dd.subDict(type() + "Coeffs").lookupOrDefault<scalar>("Cdelta", 0.158) - ), - calcInterval_ - ( - dd.subDict(type() + "Coeffs").lookupOrDefault<label>("calcInterval", 1) - ) -{ - delta_ = geometricDelta_(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void vanDriestDelta::read(const dictionary& d) -{ - const dictionary& dd(d.subDict(type() + "Coeffs")); - - geometricDelta_().read(dd); - d.readIfPresent<scalar>("kappa", kappa_); - dd.readIfPresent<scalar>("Aplus", Aplus_); - dd.readIfPresent<scalar>("Cdelta", Cdelta_); - dd.readIfPresent<label>("calcInterval", calcInterval_); - calcDelta(); -} - - -void vanDriestDelta::correct() -{ - if (mesh().time().timeIndex() % calcInterval_ == 0) - { - geometricDelta_().correct(); - calcDelta(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.H b/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.H deleted file mode 100644 index 88e26c75540..00000000000 --- a/src/turbulenceModels/compressible/LES/vanDriestDelta/vanDriestDelta.H +++ /dev/null @@ -1,113 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::LESModels::vanDriestDelta - -Description - Simple cube-root of cell volume delta used in compressible LES models. - -SourceFiles - vanDriestDelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef vanDriestDelta_H -#define vanDriestDelta_H - -#include "compressibleLESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class vanDriestDelta Declaration -\*---------------------------------------------------------------------------*/ - -class vanDriestDelta -: - public LESdelta -{ - // Private data - - autoPtr<Foam::LESdelta> geometricDelta_; - scalar kappa_; - scalar Aplus_; - scalar Cdelta_; - label calcInterval_; - - - // Private Member Functions - - //- Disallow default bitwise copy construct and assignment - vanDriestDelta(const vanDriestDelta&); - void operator=(const vanDriestDelta&); - - // Calculate the delta values - void calcDelta(); - - -public: - - //- Runtime type information - TypeName("vanDriest"); - - - // Constructors - - //- Construct from name, mesh and IOdictionary - vanDriestDelta(const word& name, const fvMesh& mesh, const dictionary&); - - - //- Destructor - virtual ~vanDriestDelta() - {} - - - // Member Functions - - //- Read the LESdelta dictionary - virtual void read(const dictionary&); - - // Correct values - virtual void correct(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LRR/LRR.C b/src/turbulenceModels/compressible/RAS/LRR/LRR.C deleted file mode 100644 index e17052df0e0..00000000000 --- a/src/turbulenceModels/compressible/RAS/LRR/LRR.C +++ /dev/null @@ -1,483 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "LRR.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LRR, 0); -addToRunTimeSelectionTable(RASModel, LRR, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LRR::LRR -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - Clrr1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clrr1", - coeffDict_, - 1.8 - ) - ), - Clrr2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clrr2", - coeffDict_, - 0.6 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - Cs_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cs", - coeffDict_, - 0.25 - ) - ), - Ceps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps", - coeffDict_, - 0.15 - ) - ), - couplingFactor_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "couplingFactor", - coeffDict_, - 0.0 - ) - ), - sigmaR_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaR", - coeffDict_, - 0.81967 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - R_ - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - autoCreateR("R", mesh_) - ), - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn - ( - "LRR::LRR" - "( const volScalarField&, const volVectorField&" - ", const surfaceScalarField&, fluidThermo&, const word&" - ", const word&)" - ) << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = Cmu_*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LRR::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - rho_*R_ - mu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LRR::divDevRhoReff(volVectorField& U) const -{ - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(rho_*R_ + couplingFactor_*mut_*fvc::grad(U)) - + fvc::laplacian((1.0 - couplingFactor_)*mut_, U) - - fvm::laplacian(muEff(), U) - - fvc::div(mu()*dev2(T(fvc::grad(U)))) - ); - } - else - { - return - ( - fvc::div(rho_*R_) - + fvc::laplacian(mut_, U) - - fvm::laplacian(muEff(), U) - - fvc::div(mu()*dev2(T(fvc::grad(U)))) - ); - } -} - - -bool LRR::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - Clrr1_.readIfPresent(coeffDict()); - Clrr2_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - Cs_.readIfPresent(coeffDict()); - Ceps_.readIfPresent(coeffDict()); - sigmaR_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - couplingFactor_.readIfPresent(coeffDict()); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn("LRR::read()") - << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - return true; - } - else - { - return false; - } -} - - -void LRR::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volSymmTensorField P(-twoSymm(R_ & fvc::grad(U_))); - volScalarField G(GName(), 0.5*mag(tr(P))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - //- fvm::laplacian(Ceps*rho_*(k_/epsilon_)*R_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*rho_*G*epsilon_/k_ - - fvm::Sp(C2_*rho_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Reynolds stress equation - - const fvPatchList& patches = mesh_.boundary(); - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - forAll(curPatch, facei) - { - label faceCelli = curPatch.faceCells()[facei]; - P[faceCelli] *= min - ( - G[faceCelli]/(0.5*mag(tr(P[faceCelli])) + SMALL), - 100.0 - ); - } - } - } - - - tmp<fvSymmTensorMatrix> REqn - ( - fvm::ddt(rho_, R_) - + fvm::div(phi_, R_) - //- fvm::laplacian(Cs*rho_*(k_/epsilon_)*R_, R_) - - fvm::laplacian(DREff(), R_) - + fvm::Sp(Clrr1_*rho_*epsilon_/k_, R_) - == - rho_*P - - (2.0/3.0*(1 - Clrr1_)*I)*rho_*epsilon_ - - Clrr2_*rho_*dev(P) - ); - - REqn().relax(); - solve(REqn); - - R_.max - ( - dimensionedSymmTensor - ( - "zero", - R_.dimensions(), - symmTensor - ( - kMin_.value(), -GREAT, -GREAT, - kMin_.value(), -GREAT, - kMin_.value() - ) - ) - ); - - k_ = 0.5*tr(R_); - bound(k_, kMin_); - - - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - - // Correct wall shear stresses - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - symmTensorField& Rw = R_.boundaryField()[patchi]; - - const scalarField& rhow = rho_.boundaryField()[patchi]; - const scalarField& mutw = mut_.boundaryField()[patchi]; - - const vectorField snGradU(U_.boundaryField()[patchi].snGrad()); - - const vectorField& faceAreas - = mesh_.Sf().boundaryField()[patchi]; - - const scalarField& magFaceAreas - = mesh_.magSf().boundaryField()[patchi]; - - forAll(curPatch, facei) - { - // Calculate near-wall velocity gradient - tensor gradUw - = (faceAreas[facei]/magFaceAreas[facei])*snGradU[facei]; - - // Calculate near-wall shear-stress tensor - tensor tauw = -(mutw[facei]/rhow[facei])*2*dev(symm(gradUw)); - - // Reset the shear components of the stress tensor - Rw[facei].xy() = tauw.xy(); - Rw[facei].xz() = tauw.xz(); - Rw[facei].yz() = tauw.yz(); - } - } - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LRR/LRR.H b/src/turbulenceModels/compressible/RAS/LRR/LRR.H deleted file mode 100644 index a80bf4171be..00000000000 --- a/src/turbulenceModels/compressible/RAS/LRR/LRR.H +++ /dev/null @@ -1,210 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::RASModels::LRR - -Group - grpCmpRASTurbulence - -Description - Launder, Reece and Rodi Reynolds-stress turbulence model for - compressible flows. - - The default model coefficients correspond to the following: - \verbatim - LRRCoeffs - { - Cmu 0.09; - Clrr1 1.8; - Clrr2 0.6; - C1 1.44; - C2 1.92; - Cs 0.25; - Ceps 0.15; - Prt 1.0; // only for compressible - sigmaEps 1.3; - sigmaR 0.81967; // only for compressible - couplingFactor 0.0; // only for incompressible - } - \endverbatim - -SourceFiles - LRR.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLRR_H -#define compressibleLRR_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class LRR Declaration -\*---------------------------------------------------------------------------*/ - -class LRR -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - - dimensionedScalar Clrr1_; - dimensionedScalar Clrr2_; - - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar Cs_; - dimensionedScalar Ceps_; - - dimensionedScalar couplingFactor_; - - dimensionedScalar sigmaR_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - - - // Fields - - volSymmTensorField R_; - volScalarField k_; - volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; - - -public: - - //- Runtime type information - TypeName("LRR"); - - // Constructors - - //- Construct from components - LRR - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LRR() - {} - - - // Member Functions - - //- Return the effective diffusivity for R - tmp<volScalarField> DREff() const - { - return tmp<volScalarField> - ( - new volScalarField("DREff", mut_/sigmaR_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return R_; - } - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C b/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C deleted file mode 100644 index 60a1a53a1cb..00000000000 --- a/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C +++ /dev/null @@ -1,524 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LaunderGibsonRSTM.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LaunderGibsonRSTM, 0); -addToRunTimeSelectionTable(RASModel, LaunderGibsonRSTM, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LaunderGibsonRSTM::LaunderGibsonRSTM -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - coeffDict_, - 0.41 - ) - ), - Clg1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clg1", - coeffDict_, - 1.8 - ) - ), - Clg2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clg2", - coeffDict_, - 0.6 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - Cs_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cs", - coeffDict_, - 0.25 - ) - ), - Ceps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps", - coeffDict_, - 0.15 - ) - ), - C1Ref_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1Ref", - coeffDict_, - 0.5 - ) - ), - C2Ref_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2Ref", - coeffDict_, - 0.3 - ) - ), - couplingFactor_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "couplingFactor", - coeffDict_, - 0.0 - ) - ), - sigmaR_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaR", - coeffDict_, - 0.81967 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - n_(wallDist::New(mesh_).n()), - y_(wallDist::New(mesh_).y()), - - R_ - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - autoCreateR("R", mesh_) - ), - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn - ( - "LaunderGibsonRSTM::LaunderGibsonRSTM" - "(const volScalarField&, const volVectorField&" - ", const surfaceScalarField&, fluidThermo&)" - ) << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = Cmu_*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LaunderGibsonRSTM::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - rho_*R_ - mu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LaunderGibsonRSTM::divDevRhoReff(volVectorField& U) const -{ - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(rho_*R_ + couplingFactor_*mut_*fvc::grad(U)) - + fvc::laplacian((1.0 - couplingFactor_)*mut_, U) - - fvm::laplacian(muEff(), U) - - fvc::div(mu()*dev2(T(fvc::grad(U)))) - ); - } - else - { - return - ( - fvc::div(rho_*R_) - + fvc::laplacian(mut_, U) - - fvm::laplacian(muEff(), U) - - fvc::div(mu()*dev2(T(fvc::grad(U)))) - ); - } -} - - -bool LaunderGibsonRSTM::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - kappa_.readIfPresent(coeffDict()); - Clg1_.readIfPresent(coeffDict()); - Clg2_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - Cs_.readIfPresent(coeffDict()); - Ceps_.readIfPresent(coeffDict()); - C1Ref_.readIfPresent(coeffDict()); - C2Ref_.readIfPresent(coeffDict()); - sigmaR_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - couplingFactor_.readIfPresent(coeffDict()); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn("LaunderGibsonRSTM::read()") - << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - return true; - } - else - { - return false; - } -} - - -void LaunderGibsonRSTM::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volSymmTensorField P(-twoSymm(R_ & fvc::grad(U_))); - volScalarField G(GName(), 0.5*mag(tr(P))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - //- fvm::laplacian(Ceps*rho_*(k_/epsilon_)*R_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*rho_*G*epsilon_/k_ - - fvm::Sp(C2_*rho_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Reynolds stress equation - - const fvPatchList& patches = mesh_.boundary(); - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - forAll(curPatch, facei) - { - label faceCelli = curPatch.faceCells()[facei]; - P[faceCelli] *= min - ( - G[faceCelli]/(0.5*mag(tr(P[faceCelli])) + SMALL), - 100.0 - ); - } - } - } - - volSymmTensorField reflect(C1Ref_*epsilon_/k_*R_ - C2Ref_*Clg2_*dev(P)); - - tmp<fvSymmTensorMatrix> REqn - ( - fvm::ddt(rho_, R_) - + fvm::div(phi_, R_) - //- fvm::laplacian(Cs*rho_*(k_/epsilon_)*R_, R_) - - fvm::laplacian(DREff(), R_) - + fvm::Sp(Clg1_*rho_*epsilon_/k_, R_) - == - rho_*P - + (2.0/3.0*(Clg1_ - 1)*I)*rho_*epsilon_ - - Clg2_*rho_*dev(P) - - // wall reflection terms - + symm - ( - I*((n_ & reflect) & n_) - - 1.5*(n_*(reflect & n_) - + (n_ & reflect)*n_) - )*pow(Cmu_, 0.75)*rho_*pow(k_, 1.5)/(kappa_*y_*epsilon_) - ); - - REqn().relax(); - solve(REqn); - - R_.max - ( - dimensionedSymmTensor - ( - "zero", - R_.dimensions(), - symmTensor - ( - kMin_.value(), -GREAT, -GREAT, - kMin_.value(), -GREAT, - kMin_.value() - ) - ) - ); - - k_ == 0.5*tr(R_); - bound(k_, kMin_); - - - // Re-calculate turbulent viscosity - mut_ = Cmu_*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - // Correct wall shear stresses - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - symmTensorField& Rw = R_.boundaryField()[patchi]; - - const scalarField& mutw = mut_.boundaryField()[patchi]; - const scalarField& rhow = rho_.boundaryField()[patchi]; - - const vectorField snGradU(U_.boundaryField()[patchi].snGrad()); - - const vectorField& faceAreas - = mesh_.Sf().boundaryField()[patchi]; - - const scalarField& magFaceAreas - = mesh_.magSf().boundaryField()[patchi]; - - forAll(curPatch, facei) - { - // Calculate near-wall velocity gradient - tensor gradUw - = (faceAreas[facei]/magFaceAreas[facei])*snGradU[facei]; - - // Calculate near-wall shear-stress tensor - tensor tauw = -(mutw[facei]/rhow[facei])*2*dev(symm(gradUw)); - - // Reset the shear components of the stress tensor - Rw[facei].xy() = tauw.xy(); - Rw[facei].xz() = tauw.xz(); - Rw[facei].yz() = tauw.yz(); - } - } - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H b/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H deleted file mode 100644 index b3aa0ddb50d..00000000000 --- a/src/turbulenceModels/compressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H +++ /dev/null @@ -1,220 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::compressible::RASModels::LaunderGibsonRSTM - -Group - grpCmpRASTurbulence - -Description - Launder-Gibson Reynolds stress turbulence model for compressible flows. - - The default model coefficients correspond to the following: - \verbatim - LaunderGibsonRSTMCoeffs - { - Cmu 0.09; - kappa 0.41; - Clg1 1.8; - Clg2 0.6; - C1 1.44; - C2 1.92; - C1Ref 0.5; - C2Ref 0.3; - Cs 0.25; - Ceps 0.15; - sigmah 1.0; // only for compressible - sigmaEps 1.3; - sigmaR 0.81967; - couplingFactor 0.0; - } - \endverbatim - -SourceFiles - LaunderGibsonRSTM.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLaunderGibsonRSTM_H -#define compressibleLaunderGibsonRSTM_H - -#include "RASModel.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class LaunderGibsonRSTM Declaration -\*---------------------------------------------------------------------------*/ - -class LaunderGibsonRSTM -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar kappa_; - - dimensionedScalar Clg1_; - dimensionedScalar Clg2_; - - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar Cs_; - dimensionedScalar Ceps_; - - dimensionedScalar C1Ref_; - dimensionedScalar C2Ref_; - - dimensionedScalar couplingFactor_; - - dimensionedScalar sigmaR_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - - - // Fields - - const volVectorField& n_; - const volScalarField& y_; - - volSymmTensorField R_; - volScalarField k_; - volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; - - -public: - - //- Runtime type information - TypeName("LaunderGibsonRSTM"); - - // Constructors - - //- Construct from components - LaunderGibsonRSTM - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LaunderGibsonRSTM() - {} - - - // Member Functions - - //- Return the effective diffusivity for R - tmp<volScalarField> DREff() const - { - return tmp<volScalarField> - ( - new volScalarField("DREff", mut_/sigmaR_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return R_; - } - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C b/src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C deleted file mode 100644 index 6a7d0a1abd9..00000000000 --- a/src/turbulenceModels/compressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C +++ /dev/null @@ -1,363 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "LaunderSharmaKE.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LaunderSharmaKE, 0); -addToRunTimeSelectionTable(RASModel, LaunderSharmaKE, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> LaunderSharmaKE::fMu() const -{ - return exp(-3.4/sqr(scalar(1) + rho_*sqr(k_)/(mu()*epsilon_)/50.0)); -} - - -tmp<volScalarField> LaunderSharmaKE::f2() const -{ - return - scalar(1) - - 0.3*exp(-min(sqr(rho_*sqr(k_)/(mu()*epsilon_)), scalar(50.0))); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LaunderSharmaKE::LaunderSharmaKE -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - C3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C3", - coeffDict_, - -0.33 - ) - ), - sigmak_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmak", - coeffDict_, - 1.0 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateLowReMut("mut", mesh_) - ), - - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = rho_*Cmu_*fMu()*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LaunderSharmaKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LaunderSharmaKE::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LaunderSharmaKE::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool LaunderSharmaKE::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - C3_.readIfPresent(coeffDict()); - sigmak_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void LaunderSharmaKE::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ == rho_*Cmu_*fMu()*sqr(k_)/epsilon_; - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - // Calculate parameters and coefficients for Launder-Sharma low-Reynolds - // number model - - volScalarField E(2.0*mu()*mut_*fvc::magSqrGradGrad(U_)/rho_); - volScalarField D(2.0*mu()*magSqr(fvc::grad(sqrt(k_)))/rho_); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField G(GName(), mut_*(tgradU() && dev(twoSymm(tgradU())))); - tgradU.clear(); - - - // Dissipation equation - - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*G*epsilon_/k_ - - fvm::SuSp(((2.0/3.0)*C1_ + C3_)*rho_*divU, epsilon_) - - fvm::Sp(C2_*f2()*rho_*epsilon_/k_, epsilon_) - + E - ); - - epsEqn().relax(); - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - fvm::SuSp(2.0/3.0*rho_*divU, k_) - - fvm::Sp(rho_*(epsilon_ + D)/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - mut_ == Cmu_*fMu()*rho_*sqr(k_)/epsilon_; - - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/Make/files b/src/turbulenceModels/compressible/RAS/Make/files deleted file mode 100644 index e107b6793d8..00000000000 --- a/src/turbulenceModels/compressible/RAS/Make/files +++ /dev/null @@ -1,55 +0,0 @@ -/* RAS turbulence models */ -RASModel/RASModel.C -laminar/laminar.C -kEpsilon/kEpsilon.C -RNGkEpsilon/RNGkEpsilon.C -LaunderSharmaKE/LaunderSharmaKE.C -LRR/LRR.C -LaunderGibsonRSTM/LaunderGibsonRSTM.C -realizableKE/realizableKE.C -SpalartAllmaras/SpalartAllmaras.C -kOmegaSST/kOmegaSST.C -v2f/v2f.C - -/* Wall functions */ -wallFunctions = derivedFvPatchFields/wallFunctions - -alphatWallFunctions = $(wallFunctions)/alphatWallFunctions -$(alphatWallFunctions)/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C -$(alphatWallFunctions)/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C - -mutWallFunctions = $(wallFunctions)/mutWallFunctions -$(mutWallFunctions)/mutWallFunction/mutWallFunctionFvPatchScalarField.C - -$(mutWallFunctions)/mutkWallFunction/mutkWallFunctionFvPatchScalarField.C -$(mutWallFunctions)/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.C - -$(mutWallFunctions)/mutUWallFunction/mutUWallFunctionFvPatchScalarField.C -$(mutWallFunctions)/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.C -$(mutWallFunctions)/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.C -$(mutWallFunctions)/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.C - -epsilonWallFunctions = $(wallFunctions)/epsilonWallFunctions -$(epsilonWallFunctions)/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C -$(epsilonWallFunctions)/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C - -fWallFunctions = $(wallFunctions)/fWallFunctions -$(fWallFunctions)/fWallFunction/fWallFunctionFvPatchScalarField.C - -omegaWallFunctions = $(wallFunctions)/omegaWallFunctions -$(omegaWallFunctions)/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C - -kqRWallFunctions = $(wallFunctions)/kqRWallFunctions -$(kqRWallFunctions)/kqRWallFunction/kqRWallFunctionFvPatchFields.C -$(kqRWallFunctions)/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C - -v2WallFunctions = $(wallFunctions)/v2WallFunctions -$(v2WallFunctions)/v2WallFunction/v2WallFunctionFvPatchScalarField.C - -/* Patch fields */ -derivedFvPatchFields/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C -derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C -derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C -backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C - -LIB = $(FOAM_LIBBIN)/libcompressibleRASModels diff --git a/src/turbulenceModels/compressible/RAS/Make/options b/src/turbulenceModels/compressible/RAS/Make/options deleted file mode 100644 index 8b8e57cd179..00000000000 --- a/src/turbulenceModels/compressible/RAS/Make/options +++ /dev/null @@ -1,13 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -LIB_LIBS = \ - -lcompressibleTurbulenceModel \ - -lfiniteVolume \ - -lfluidThermophysicalModels \ - -lspecie \ - -lmeshTools diff --git a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C b/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C deleted file mode 100644 index 7e09a4b1a86..00000000000 --- a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.C +++ /dev/null @@ -1,210 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "RASModel.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(RASModel, 0); -defineRunTimeSelectionTable(RASModel, dictionary); -addToRunTimeSelectionTable(turbulenceModel, RASModel, turbulenceModel); - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void RASModel::printCoeffs() -{ - if (printCoeffs_) - { - Info<< type() << "Coeffs" << coeffDict_ << endl; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -RASModel::RASModel -( - const word& type, - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -: - turbulenceModel(rho, U, phi, thermophysicalModel, turbulenceModelName), - - IOdictionary - ( - IOobject - ( - "RASProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ), - - turbulence_(lookup("turbulence")), - printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subOrEmptyDict(type + "Coeffs")), - - kMin_("kMin", sqr(dimVelocity), SMALL), - epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL), - omegaMin_("omegaMin", dimless/dimTime, SMALL) -{ - kMin_.readIfPresent(*this); - epsilonMin_.readIfPresent(*this); - omegaMin_.readIfPresent(*this); - - // Force the construction of the mesh deltaCoeffs which may be needed - // for the construction of the derived models and BCs - mesh_.deltaCoeffs(); -} - - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -autoPtr<RASModel> RASModel::New -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "RASProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("RASModel") - ); - - Info<< "Selecting RAS turbulence model " << modelType << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(modelType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "RASModel::New" - "(" - "const volScalarField&, " - "const volVectorField&, " - "const surfaceScalarField&, " - "fluidThermo&, " - "const word&" - ")" - ) << "Unknown RASModel type " - << modelType << nl << nl - << "Valid RASModel types:" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<RASModel> - ( - cstrIter()(rho, U, phi, thermophysicalModel, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void RASModel::correct() -{ - turbulenceModel::correct(); -} - - -bool RASModel::read() -{ - //if (regIOobject::read()) - - // Bit of trickery : we are both IOdictionary ('RASProperties') and - // an regIOobject from the turbulenceModel level. Problem is to distinguish - // between the two - we only want to reread the IOdictionary. - - bool ok = IOdictionary::readData - ( - IOdictionary::readStream - ( - IOdictionary::type() - ) - ); - IOdictionary::close(); - - if (ok) - { - lookup("turbulence") >> turbulence_; - - if (const dictionary* dictPtr = subDictPtr(type() + "Coeffs")) - { - coeffDict_ <<= *dictPtr; - } - - kMin_.readIfPresent(*this); - epsilonMin_.readIfPresent(*this); - omegaMin_.readIfPresent(*this); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.H b/src/turbulenceModels/compressible/RAS/RASModel/RASModel.H deleted file mode 100644 index 6780860b871..00000000000 --- a/src/turbulenceModels/compressible/RAS/RASModel/RASModel.H +++ /dev/null @@ -1,268 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Namespace - Foam::compressible::RASModels - -Description - Namespace for compressible RAS turbulence models. - -Class - Foam::compressible::RASModel - -Description - Abstract base class for turbulence models for compressible and combusting - flows. - -SourceFiles - RASModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleRASModel_H -#define compressibleRASModel_H - -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "fvm.H" -#include "fvc.H" -#include "fvMatrices.H" -#include "fluidThermo.H" -#include "IOdictionary.H" -#include "Switch.H" -#include "bound.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class RASModel Declaration -\*---------------------------------------------------------------------------*/ - -class RASModel -: - public turbulenceModel, - public IOdictionary -{ - -protected: - - // Protected data - - //- Turbulence on/off flag - Switch turbulence_; - - //- Flag to print the model coeffs at run-time - Switch printCoeffs_; - - //- Model coefficients dictionary - dictionary coeffDict_; - - //- Lower limit of k - dimensionedScalar kMin_; - - //- Lower limit of epsilon - dimensionedScalar epsilonMin_; - - //- Lower limit for omega - dimensionedScalar omegaMin_; - - - // Protected Member Functions - - //- Print model coefficients - virtual void printCoeffs(); - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - RASModel(const RASModel&); - - //- Disallow default bitwise assignment - void operator=(const RASModel&); - - -public: - - //- Runtime type information - TypeName("RASModel"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - RASModel, - dictionary, - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName - ), - (rho, U, phi, thermoPhysicalModel, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - RASModel - ( - const word& type, - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - // Selectors - - //- Return a reference to the selected RAS model - static autoPtr<RASModel> New - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - //- Destructor - virtual ~RASModel() - {} - - - // Member Functions - - // Access - - //- Return the lower allowable limit for k (default: SMALL) - const dimensionedScalar& kMin() const - { - return kMin_; - } - - //- Return the lower allowable limit for epsilon (default: SMALL) - const dimensionedScalar& epsilonMin() const - { - return epsilonMin_; - } - - //- Return the lower allowable limit for omega (default: SMALL) - const dimensionedScalar& omegaMin() const - { - return omegaMin_; - } - - //- Allow kMin to be changed - dimensionedScalar& kMin() - { - return kMin_; - } - - //- Allow epsilonMin to be changed - dimensionedScalar& epsilonMin() - { - return epsilonMin_; - } - - //- Allow omegaMin to be changed - dimensionedScalar& omegaMin() - { - return omegaMin_; - } - - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const - { - return coeffDict_; - } - - - //- Return the effective viscosity - virtual tmp<volScalarField> muEff() const - { - return tmp<volScalarField> - ( - new volScalarField("muEff", mut() + mu()) - ); - } - - //- Return the effective turbulent temperature diffusivity - virtual tmp<volScalarField> kappaEff() const - { - return thermo().kappaEff(alphat()); - } - - //- Return the effective turbulent temperature diffusivity for a patch - virtual tmp<scalarField> kappaEff(const label patchI) const - { - return thermo().kappaEff(alphat(patchI), patchI); - } - - //- Return the effective turbulent thermal diffusivity - virtual tmp<volScalarField> alphaEff() const - { - return thermo().alphaEff(alphat()); - } - - //- Return the effective turbulent thermal diffusivity for a patch - virtual tmp<scalarField> alphaEff(const label patchI) const - { - return thermo().alphaEff(alphat(patchI), patchI); - } - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.C b/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.C deleted file mode 100644 index 58ad1f571e2..00000000000 --- a/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.C +++ /dev/null @@ -1,372 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "RNGkEpsilon.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(RNGkEpsilon, 0); -addToRunTimeSelectionTable(RASModel, RNGkEpsilon, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -RNGkEpsilon::RNGkEpsilon -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.0845 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.42 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.68 - ) - ), - C3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C3", - coeffDict_, - -0.33 - ) - ), - sigmak_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmak", - coeffDict_, - 0.71942 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 0.71942 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - eta0_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "eta0", - coeffDict_, - 4.38 - ) - ), - beta_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta", - coeffDict_, - 0.012 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = Cmu_*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> RNGkEpsilon::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> RNGkEpsilon::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> RNGkEpsilon::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool RNGkEpsilon::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - C3_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - eta0_.readIfPresent(coeffDict()); - beta_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void RNGkEpsilon::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField S2((tgradU() && dev(twoSymm(tgradU())))); - tgradU.clear(); - - volScalarField G(GName(), mut_*S2); - - volScalarField eta(sqrt(mag(S2))*k_/epsilon_); - volScalarField eta3(eta*sqr(eta)); - - volScalarField R - ( - ((eta*(-eta/eta0_ + scalar(1)))/(beta_*eta3 + scalar(1))) - ); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - (C1_ - R)*G*epsilon_/k_ - - fvm::SuSp(((2.0/3.0)*C1_ + C3_)*rho_*divU, epsilon_) - - fvm::Sp(C2_*rho_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - fvm::SuSp(2.0/3.0*rho_*divU, k_) - - fvm::Sp(rho_*epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.H b/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.H deleted file mode 100644 index ba8061365cb..00000000000 --- a/src/turbulenceModels/compressible/RAS/RNGkEpsilon/RNGkEpsilon.H +++ /dev/null @@ -1,210 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::compressible::RASModels::RNGkEpsilon - -Group - grpCmpRASTurbulence - -Description - Renormalisation group k-epsilon turbulence model for compressible flows - including rapid distortion theory (RDT) based compression term. - - References: - \verbatim - "Development of Turbulence Models for Shear Flow by a - Double Expansion Technique", - Yakhot, V., Orszag, S.A., Thangam, S., Gatski, T.B. and Speziale, C.G.", - Physics of Fluids A, Vol. 4, No. 7, 1992, pp 1510-1520. - - For the RDT-based compression term: - "k-epsilon equations for compressible reciprocating engine flows" - El Tahry, S. H., - AIAA Journal of Energy 7, 1983, pp 345-353. - \endverbatim - - The default model coefficients correspond to the following: - \verbatim - RNGkEpsilonCoeffs - { - Cmu 0.0845; - C1 1.42; - C2 1.68; - C3 -0.33; // only for compressible - Prt 1.0; // only for compressible - sigmak 0.71942; - sigmaEps 0.71942; - eta0 4.38; - beta 0.012; - } - \endverbatim - -SourceFiles - RNGkEpsilon.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleRNGkEpsilon_H -#define compressibleRNGkEpsilon_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class RNGkEpsilon Declaration -\*---------------------------------------------------------------------------*/ - -class RNGkEpsilon -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar C3_; - dimensionedScalar sigmak_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - dimensionedScalar eta0_; - dimensionedScalar beta_; - - // Fields - - volScalarField k_; - volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; - - -public: - - //- Runtime type information - TypeName("RNGkEpsilon"); - - // Constructors - - //- Construct from components - RNGkEpsilon - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~RNGkEpsilon() - {} - - - // Member Functions - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", mut_/sigmak_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.C b/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.C deleted file mode 100644 index bd54bd80f48..00000000000 --- a/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.C +++ /dev/null @@ -1,479 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmaras.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmaras, 0); -addToRunTimeSelectionTable(RASModel, SpalartAllmaras, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> SpalartAllmaras::chi() const -{ - return rho_*nuTilda_/mu(); -} - - -tmp<volScalarField> SpalartAllmaras::fv1(const volScalarField& chi) const -{ - const volScalarField chi3(pow3(chi)); - return chi3/(chi3 + pow3(Cv1_)); -} - - -tmp<volScalarField> SpalartAllmaras::fv2 -( - const volScalarField& chi, - const volScalarField& fv1 -) const -{ - if (ashfordCorrection_) - { - return 1.0/pow3(scalar(1) + chi/Cv2_); - } - else - { - return 1.0 - chi/(1.0 + chi*fv1); - } -} - - -tmp<volScalarField> SpalartAllmaras::fv3 -( - const volScalarField& chi, - const volScalarField& fv1 -) const -{ - if (ashfordCorrection_) - { - const volScalarField chiByCv2((1/Cv2_)*chi); - - return - (scalar(1) + chi*fv1) - *(1/Cv2_) - *(3*(scalar(1) + chiByCv2) + sqr(chiByCv2)) - /pow3(scalar(1) + chiByCv2); - } - else - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "fv3", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("fv3", dimless, 1), - zeroGradientFvPatchScalarField::typeName - ) - ); - } -} - - -tmp<volScalarField> SpalartAllmaras::fw(const volScalarField& Stilda) const -{ - volScalarField r - ( - min - ( - nuTilda_ - /( - max - ( - Stilda, - dimensionedScalar("SMALL", Stilda.dimensions(), SMALL) - ) - *sqr(kappa_*y_) - ), - scalar(10.0) - ) - ); - r.boundaryField() == 0.0; - - const volScalarField g(r + Cw2_*(pow6(r) - r)); - - return g*pow((1.0 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -SpalartAllmaras::SpalartAllmaras -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - sigmaNut_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaNut", - coeffDict_, - 0.66666 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - coeffDict_, - 0.41 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - Cb1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb1", - coeffDict_, - 0.1355 - ) - ), - Cb2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb2", - coeffDict_, - 0.622 - ) - ), - Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), - Cw2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw2", - coeffDict_, - 0.3 - ) - ), - Cw3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw3", - coeffDict_, - 2.0 - ) - ), - Cv1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv1", - coeffDict_, - 7.1 - ) - ), - Cv2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv2", - coeffDict_, - 5.0 - ) - ), - - nuTilda_ - ( - IOobject - ( - "nuTilda", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ), - - y_(wallDist::New(mesh_).y()) -{ - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); - - if (ashfordCorrection_) - { - Info<< " Employing Ashford correction" << endl; - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> SpalartAllmaras::k() const -{ - WarningIn("tmp<volScalarField> SpalartAllmaras::k() const") - << "Turbulence kinetic energy not defined for Spalart-Allmaras model. " - << "Returning zero field" << endl; - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_ - ), - mesh_, - dimensionedScalar("0", dimensionSet(0, 2, -2, 0, 0), 0) - ) - ); -} - - -tmp<volScalarField> SpalartAllmaras::epsilon() const -{ - WarningIn("tmp<volScalarField> SpalartAllmaras::epsilon() const") - << "Turbulence kinetic energy dissipation rate not defined for " - << "Spalart-Allmaras model. Returning zero field" - << endl; - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_ - ), - mesh_, - dimensionedScalar("0", dimensionSet(0, 2, -3, 0, 0), 0) - ) - ); -} - - -tmp<volSymmTensorField> SpalartAllmaras::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k() - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<volSymmTensorField> SpalartAllmaras::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevRhoReff(volVectorField& U) const -{ - const volScalarField muEff_(muEff()); - - return - ( - - fvm::laplacian(muEff_, U) - - fvc::div(muEff_*dev2(T(fvc::grad(U)))) - ); -} - - -bool SpalartAllmaras::read() -{ - if (RASModel::read()) - { - sigmaNut_.readIfPresent(coeffDict()); - kappa_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - Cb1_.readIfPresent(coeffDict()); - Cb2_.readIfPresent(coeffDict()); - Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; - Cw2_.readIfPresent(coeffDict()); - Cw3_.readIfPresent(coeffDict()); - Cv1_.readIfPresent(coeffDict()); - Cv2_.readIfPresent(coeffDict()); - - ashfordCorrection_.readIfPresent("ashfordCorrection", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void SpalartAllmaras::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*nuTilda_*fv1(chi()); - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - const volScalarField chi(this->chi()); - const volScalarField fv1(this->fv1(chi)); - - const volScalarField Stilda - ( - fv3(chi, fv1)*::sqrt(2.0)*mag(skew(fvc::grad(U_))) - + fv2(chi, fv1)*nuTilda_/sqr(kappa_*y_) - ); - - tmp<fvScalarMatrix> nuTildaEqn - ( - fvm::ddt(rho_, nuTilda_) - + fvm::div(phi_, nuTilda_) - - fvm::laplacian(DnuTildaEff(), nuTilda_) - - Cb2_/sigmaNut_*rho_*magSqr(fvc::grad(nuTilda_)) - == - Cb1_*rho_*Stilda*nuTilda_ - - fvm::Sp(Cw1_*fw(Stilda)*nuTilda_*rho_/sqr(y_), nuTilda_) - ); - - nuTildaEqn().relax(); - solve(nuTildaEqn); - bound(nuTilda_, dimensionedScalar("0", nuTilda_.dimensions(), 0.0)); - nuTilda_.correctBoundaryConditions(); - - // Re-calculate viscosity - mut_.internalField() = fv1*nuTilda_.internalField()*rho_.internalField(); - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.H b/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.H deleted file mode 100644 index 0d366d71ba0..00000000000 --- a/src/turbulenceModels/compressible/RAS/SpalartAllmaras/SpalartAllmaras.H +++ /dev/null @@ -1,233 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::compressible::RASModels::SpalartAllmaras - -Group - grpCmpRASTurbulence - -Description - Spalart-Allmaras one-eqn mixing-length model for compressible - external flows. - - Reference: - \verbatim - "A One-Equation Turbulence Model for Aerodynamic Flows" - P.R. Spalart, - S.R. Allmaras, - La Recherche Aerospatiale, No. 1, 1994, pp. 5-21. - \endverbatim - - Extended according to: - \verbatim - "An Unstructured Grid Generation and Adaptive Solution Technique - for High Reynolds Number Compressible Flows" - G.A. Ashford, - Ph.D. thesis, University of Michigan, 1996. - \endverbatim - by using the optional flag \c ashfordCorrection - - The default model coefficients correspond to the following: - \verbatim - SpalartAllmarasCoeffs - { - Cb1 0.1355; - Cb2 0.622; - Cw2 0.3; - Cw3 2.0; - Cv1 7.1; - Cv2 5.0; - sigmaNut 0.66666; - Prt 1.0; // only for compressible - kappa 0.41; - } - \endverbatim - -SourceFiles - SpalartAllmaras.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleSpalartAllmaras_H -#define compressibleSpalartAllmaras_H - -#include "RASModel.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class SpalartAllmaras Declaration -\*---------------------------------------------------------------------------*/ - -class SpalartAllmaras -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar sigmaNut_; - dimensionedScalar kappa_; - dimensionedScalar Prt_; - - dimensionedScalar Cb1_; - dimensionedScalar Cb2_; - dimensionedScalar Cw1_; - dimensionedScalar Cw2_; - dimensionedScalar Cw3_; - dimensionedScalar Cv1_; - dimensionedScalar Cv2_; - - - //- Optional flag to activate the Ashford correction - Switch ashfordCorrection_; - - - // Fields - - volScalarField nuTilda_; - volScalarField mut_; - volScalarField alphat_; - - //- Wall distance - // Note: different to wall distance in parent RASModel - // which is for near-wall cells only - const volScalarField& y_; - - - // Protected Member Functions - - tmp<volScalarField> chi() const; - tmp<volScalarField> fv1(const volScalarField& chi) const; - tmp<volScalarField> fv2 - ( - const volScalarField& chi, - const volScalarField& fv1 - ) const; - tmp<volScalarField> fv3 - ( - const volScalarField& chi, - const volScalarField& fv1 - ) const; - tmp<volScalarField> fw(const volScalarField& Stilda) const; - - -public: - - //- Runtime type information - TypeName("SpalartAllmaras"); - - - // Constructors - - //- Construct from components - SpalartAllmaras - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~SpalartAllmaras() - {} - - - // Member Functions - - //- Return the effective diffusivity for nuTilda - tmp<volScalarField> DnuTildaEff() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - "DnuTildaEff", - (rho_*nuTilda_ + mu())/sigmaNut_ - ) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const; - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const; - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C b/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C deleted file mode 100644 index 7846bec8208..00000000000 --- a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C +++ /dev/null @@ -1,357 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "backwardsCompatibilityWallFunctions.H" - -#include "volFields.H" -#include "calculatedFvPatchField.H" -#include "alphatWallFunctionFvPatchScalarField.H" -#include "mutkWallFunctionFvPatchScalarField.H" -#include "mutLowReWallFunctionFvPatchScalarField.H" -#include "epsilonWallFunctionFvPatchScalarField.H" -#include "kqRWallFunctionFvPatchField.H" -#include "omegaWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -tmp<volScalarField> autoCreateAlphat -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject alphatHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (alphatHeader.headerOk()) - { - return tmp<volScalarField>(new volScalarField(alphatHeader, mesh)); - } - else - { - Info<< "--> Creating " << fieldName - << " to employ run-time selectable wall functions" << endl; - - const fvBoundaryMesh& bm = mesh.boundary(); - - wordList alphatBoundaryTypes(bm.size()); - - forAll(bm, patchI) - { - if (isA<wallFvPatch>(bm[patchI])) - { - alphatBoundaryTypes[patchI] = - alphatWallFunctionFvPatchScalarField::typeName; - } - else - { - alphatBoundaryTypes[patchI] = - calculatedFvPatchField<scalar>::typeName; - } - } - - tmp<volScalarField> alphat - ( - new volScalarField - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - dimensionedScalar("zero", dimDensity*dimArea/dimTime, 0.0), - alphatBoundaryTypes - ) - ); - - Info<< " Writing new " << fieldName << endl; - alphat().write(); - - return alphat; - } -} - - -tmp<volScalarField> autoCreateMut -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject mutHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (mutHeader.headerOk()) - { - return tmp<volScalarField>(new volScalarField(mutHeader, mesh)); - } - else - { - Info<< "--> Creating " << fieldName - << " to employ run-time selectable wall functions" << endl; - - const fvBoundaryMesh& bm = mesh.boundary(); - - wordList mutBoundaryTypes(bm.size()); - - forAll(bm, patchI) - { - if (isA<wallFvPatch>(bm[patchI])) - { - mutBoundaryTypes[patchI] = - mutkWallFunctionFvPatchScalarField::typeName; - } - else - { - mutBoundaryTypes[patchI] = - calculatedFvPatchField<scalar>::typeName; - } - } - - tmp<volScalarField> mut - ( - new volScalarField - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - dimensionedScalar("zero", dimDensity*dimArea/dimTime, 0.0), - mutBoundaryTypes - ) - ); - - Info<< " Writing new " << fieldName << endl; - mut().write(); - - return mut; - } -} - - -tmp<volScalarField> autoCreateLowReMut -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject mutHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (mutHeader.headerOk()) - { - return tmp<volScalarField>(new volScalarField(mutHeader, mesh)); - } - else - { - Info<< "--> Creating " << fieldName - << " to employ run-time selectable wall functions" << endl; - - const fvBoundaryMesh& bm = mesh.boundary(); - - wordList mutBoundaryTypes(bm.size()); - - forAll(bm, patchI) - { - if (isA<wallFvPatch>(bm[patchI])) - { - mutBoundaryTypes[patchI] = - mutLowReWallFunctionFvPatchScalarField::typeName; - } - else - { - mutBoundaryTypes[patchI] = - calculatedFvPatchField<scalar>::typeName; - } - } - - tmp<volScalarField> mut - ( - new volScalarField - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - dimensionedScalar("zero", dimDensity*dimArea/dimTime, 0.0), - mutBoundaryTypes - ) - ); - - Info<< " Writing new " << fieldName << endl; - mut().write(); - - return mut; - } -} - - -tmp<volScalarField> autoCreateEpsilon -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - epsilonWallFunctionFvPatchScalarField - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateOmega -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - omegaWallFunctionFvPatchScalarField - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateK -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - kqRWallFunctionFvPatchField<scalar> - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateQ -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - kqRWallFunctionFvPatchField<scalar> - > - ( - fieldName, - mesh - ); -} - - -tmp<volSymmTensorField> autoCreateR -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - symmTensor, - kqRWallFunctionFvPatchField<symmTensor> - > - ( - fieldName, - mesh - ); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // - diff --git a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H b/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H deleted file mode 100644 index c2b34c4a6e0..00000000000 --- a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H +++ /dev/null @@ -1,129 +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::compressible - -Description - Auto creation of fields to provide backwards compatibility with - runtime selectable wall functions - -SourceFiles - backwardsCompatibilityWallFunctions.C - backwardsCompatibilityWallFunctionsTemplates.C - -\*---------------------------------------------------------------------------*/ - -#ifndef backwardsCompatibilityWallFunctions_H -#define backwardsCompatibilityWallFunctions_H - -#include "fvMesh.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - //- mut - tmp<volScalarField> autoCreateMut - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- mut for Low-Reynolds number models - tmp<volScalarField> autoCreateLowReMut - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- alphat - tmp<volScalarField> autoCreateAlphat - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- epsilon - tmp<volScalarField> autoCreateEpsilon - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- omega - tmp<volScalarField> autoCreateOmega - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- k - tmp<volScalarField> autoCreateK - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- Q - tmp<volScalarField> autoCreateQ - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- R - tmp<volSymmTensorField> autoCreateR - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- Helper function to create the new field - template<class Type, class PatchType> - tmp<GeometricField<Type, fvPatchField, volMesh> > - autoCreateWallFunctionField - ( - const word& fieldName, - const fvMesh& mesh - ); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "backwardsCompatibilityWallFunctionsTemplates.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C b/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C deleted file mode 100644 index d91f1bcd724..00000000000 --- a/src/turbulenceModels/compressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C +++ /dev/null @@ -1,169 +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 "backwardsCompatibilityWallFunctions.H" -#include "Time.H" -#include "OSspecific.H" - -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type, class PatchType> -tmp<GeometricField<Type, fvPatchField, volMesh> > -autoCreateWallFunctionField -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject mutHeader - ( - "mut", - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ); - - typedef GeometricField<Type, fvPatchField, volMesh> fieldType; - - if (mutHeader.headerOk()) - { - return tmp<fieldType> - ( - new fieldType - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ), - mesh - ) - ); - } - else - { - Info<< "--> Upgrading " << fieldName - << " to employ run-time selectable wall functions" << endl; - - // Read existing field - IOobject ioObj - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - tmp<fieldType> fieldOrig - ( - new fieldType - ( - ioObj, - mesh - ) - ); - - // rename file - Info<< " Backup original " << fieldName << " to " - << fieldName << ".old" << endl; - mvBak(ioObj.objectPath(), "old"); - - - PtrList<fvPatchField<Type> > newPatchFields(mesh.boundary().size()); - - forAll(newPatchFields, patchI) - { - if (isA<wallFvPatch>(mesh.boundary()[patchI])) - { - newPatchFields.set - ( - patchI, - new PatchType - ( - mesh.boundary()[patchI], - fieldOrig().dimensionedInternalField() - ) - ); - newPatchFields[patchI] == fieldOrig().boundaryField()[patchI]; - } - else - { - newPatchFields.set - ( - patchI, - fieldOrig().boundaryField()[patchI].clone() - ); - } - } - - tmp<fieldType> fieldNew - ( - new fieldType - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - fieldOrig().dimensions(), - fieldOrig().internalField(), - newPatchFields - ) - ); - - Info<< " Writing updated " << fieldName << endl; - fieldNew().write(); - - return fieldNew; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/doc/compressibleRASBoundaryConditionsDoc.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/doc/compressibleRASBoundaryConditionsDoc.H deleted file mode 100644 index d0ef1e1af9c..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/doc/compressibleRASBoundaryConditionsDoc.H +++ /dev/null @@ -1,39 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpCmpRASBoundaryConditions RAS compressible boundary conditions -@{ - \ingroup grpCmpRASTurbulence - This group contains compressible RAS turbulence model boundary conditions -@} - -\defgroup grpCmpWallFunctions RAS compressible wall functions -@{ - \ingroup grpCmpRASBoundaryConditions - This group contains compressible RAS turbulence model wall functions -@} - - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C deleted file mode 100644 index 0d6694fa3bb..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C +++ /dev/null @@ -1,179 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "turbulentMixingLengthDissipationRateInletFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "surfaceFields.H" -#include "volFields.H" -#include "compressible/turbulenceModel/turbulenceModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(0.0), - kName_("k") -{ - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - inletOutletFvPatchScalarField(ptf, p, iF, mapper), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(readScalar(dict.lookup("mixingLength"))), - kName_(dict.lookupOrDefault<word>("k", "k")) -{ - this->phiName_ = dict.lookupOrDefault<word>("phi", "phi"); - fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf -) -: - inletOutletFvPatchScalarField(ptf), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(ptf, iF), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulentMixingLengthDissipationRateInletFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - // Lookup Cmu corresponding to the turbulence model selected - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalar Cmu = - turbulence.coeffDict().lookupOrDefault<scalar>("Cmu", 0.09); - - const scalar Cmu75 = pow(Cmu, 0.75); - - const fvPatchScalarField& kp = - patch().lookupPatchField<volScalarField, scalar>(kName_); - - const fvsPatchScalarField& phip = - patch().lookupPatchField<surfaceScalarField, scalar>(this->phiName_); - - this->refValue() = Cmu75*kp*sqrt(kp)/mixingLength_; - this->valueFraction() = 1.0 - pos(phip); - - inletOutletFvPatchScalarField::updateCoeffs(); -} - - -void turbulentMixingLengthDissipationRateInletFvPatchScalarField::write -( - Ostream& os -) const -{ - fvPatchScalarField::write(os); - os.writeKeyword("mixingLength") - << mixingLength_ << token::END_STATEMENT << nl; - os.writeKeyword("phi") << this->phiName_ << token::END_STATEMENT << nl; - os.writeKeyword("k") << kName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - turbulentMixingLengthDissipationRateInletFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H deleted file mode 100644 index 63aa24b8eb6..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H +++ /dev/null @@ -1,203 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible:: - turbulentMixingLengthDissipationRateInletFvPatchScalarField - -Group - grpCmpRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition provides a turbulence dissipation, \f$\epsilon\f$ - (epsilon) inlet condition based on a specified mixing length. The patch - values are calculated using: - - \f[ - \epsilon_p = \frac{C_{\mu}^{0.75} k^{1.5}}{L} - \f] - - where - - \vartable - \epsilon_p | patch epsilon values - C_{\mu} | Model coefficient, set to 0.09 - k | turbulence kinetic energy - L | length scale - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - mixingLength | Length scale [m] | yes | - phi | flux field name | no | phi - k | turbulence kinetic energy field name | no | k - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type compressible::turbulentMixingLengthDissipationRateInlet; - mixingLength 0.005; - value uniform 200; // placeholder - } - \endverbatim - -Note - In the event of reverse flow, a zero-gradient condition is applied - -SeeAlso - Foam::inletOutletFvPatchField - -SourceFiles - turbulentMixingLengthDissipationRateInletFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleturbulentMixingLengthDissipationRateInletFvPatchField_H -#define compressibleturbulentMixingLengthDissipationRateInletFvPatchField_H - -#include "inletOutletFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulentMixingLengthDissipationRateInletFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class turbulentMixingLengthDissipationRateInletFvPatchScalarField -: - public inletOutletFvPatchScalarField -{ - // Private data - - //- turbulent length scale - scalar mixingLength_; - - //- Name of the turbulent kinetic energy field - word kName_; - - -public: - - //- Runtime type information - TypeName("compressible::turbulentMixingLengthDissipationRateInlet"); - - - // Constructors - - //- Construct from patch and internal field - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // turbulentMixingLengthDissipationRateInletFvPatchScalarField - // onto a new patch - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - *this - ) - ); - } - - //- Construct as copy setting internal field reference - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C deleted file mode 100644 index 70017d52505..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C +++ /dev/null @@ -1,180 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "turbulentMixingLengthFrequencyInletFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "surfaceFields.H" -#include "volFields.H" -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(0.0), - kName_("k") -{ - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - inletOutletFvPatchScalarField(ptf, p, iF, mapper), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(readScalar(dict.lookup("mixingLength"))), - kName_(dict.lookupOrDefault<word>("k", "k")) -{ - this->phiName_ = dict.lookupOrDefault<word>("phi", "phi"); - - fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf -) -: - inletOutletFvPatchScalarField(ptf), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(ptf, iF), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulentMixingLengthFrequencyInletFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - // Lookup Cmu corresponding to the turbulence model selected - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalar Cmu = - turbulence.coeffDict().lookupOrDefault<scalar>("Cmu", 0.09); - - const scalar Cmu25 = pow(Cmu, 0.25); - - const fvPatchScalarField& kp = - patch().lookupPatchField<volScalarField, scalar>(kName_); - - const fvsPatchScalarField& phip = - patch().lookupPatchField<surfaceScalarField, scalar>(this->phiName_); - - this->refValue() = sqrt(kp)/(Cmu25*mixingLength_); - this->valueFraction() = 1.0 - pos(phip); - - inletOutletFvPatchScalarField::updateCoeffs(); -} - - -void turbulentMixingLengthFrequencyInletFvPatchScalarField::write -( - Ostream& os -) const -{ - fvPatchScalarField::write(os); - os.writeKeyword("mixingLength") - << mixingLength_ << token::END_STATEMENT << nl; - os.writeKeyword("phi") << this->phiName_ << token::END_STATEMENT << nl; - os.writeKeyword("k") << kName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - turbulentMixingLengthFrequencyInletFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H deleted file mode 100644 index cafd2d9d108..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H +++ /dev/null @@ -1,202 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::turbulentMixingLengthFrequencyInletFvPatchScalarField - -Group - grpCmpRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition provides a turbulence specific dissipation, - \f$\omega\f$ (omega) inlet condition based on a specified mixing length. - The patch values are calculated using: - - \f[ - \omega_p = \frac{k^{0.5}}{C_{\mu}^{0.25} L} - \f] - - where - - \vartable - \omega_p | patch omega values - C_{\mu} | Model coefficient, set to 0.09 - k | turbulence kinetic energy - L | length scale - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - mixingLength | Length scale [m] | yes | - phi | flux field name | no | phi - k | turbulence kinetic energy field name | no | k - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type compressible::turbulentMixingLengthFrequencyInlet; - mixingLength 0.005; - value uniform 200; // placeholder - } - \endverbatim - -Note - In the event of reverse flow, a zero-gradient condition is applied - -SeeAlso - Foam::inletOutletFvPatchField - -SourceFiles - turbulentMixingLengthFrequencyInletFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleturbulentMixingLengthFrequencyInletFvPatchScalarField_H -#define compressibleturbulentMixingLengthFrequencyInletFvPatchScalarField_H - -#include "inletOutletFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulentMixingLengthFrequencyInletFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class turbulentMixingLengthFrequencyInletFvPatchScalarField -: - public inletOutletFvPatchScalarField -{ - // Private data - - //- Turbulent length scale - scalar mixingLength_; - - //- Name of the turbulent kinetic energy field - word kName_; - - -public: - - //- Runtime type information - TypeName("compressible::turbulentMixingLengthFrequencyInlet"); - - - // Constructors - - //- Construct from patch and internal field - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // turbulentMixingLengthFrequencyInletFvPatchScalarField - // onto a new patch - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - *this - ) - ); - } - - //- Construct as copy setting internal field reference - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index 347993c1fb3..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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 "epsilonLowReWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar epsilonLowReWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -void epsilonLowReWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu75 = pow(Cmu_, 0.75); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tmu = turbulence.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const tmp<volScalarField> tmut = turbulence.mut(); - const volScalarField& mut = tmut(); - const scalarField& mutw = mut.boundaryField()[patchI]; - - const scalarField& rhow = turbulence.rho().boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set epsilon and G - forAll(mutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar yPlus = Cmu25*sqrt(k[cellI])*y[faceI]/(muw[faceI]/rhow[faceI]); - - scalar w = cornerWeights[faceI]; - - if (yPlus > yPlusLam_) - { - epsilon[cellI] = w*Cmu75*pow(k[cellI], 1.5)/(kappa_*y[faceI]); - } - else - { - epsilon[cellI] = - w*2.0*k[cellI]*muw[faceI]/rhow[faceI]/sqr(y[faceI]); - } - - G[cellI] = - w - *(mutw[faceI] + muw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - epsilonWallFunctionFvPatchScalarField(p, iF), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - epsilonWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - yPlusLam_(ptf.yPlusLam_) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - epsilonWallFunctionFvPatchScalarField(p, iF, dict), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ewfpsf -) -: - epsilonWallFunctionFvPatchScalarField(ewfpsf), - yPlusLam_(ewfpsf.yPlusLam_) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ewfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - epsilonWallFunctionFvPatchScalarField(ewfpsf, iF), - yPlusLam_(ewfpsf.yPlusLam_) -{} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - epsilonLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index bac27237c38..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,190 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Class - Foam::compressible::epsilonLowReWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulence dissipation wall function - condition for low- and high-Reynolds number turbulent flow cases. - - The condition can be applied to wall boundaries, whereby it inserts near - wall epsilon values directly into the epsilon equation to act as a - constraint. - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type epsilonLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::epsilonWallFunctionFvPatchScalarField - -SourceFiles - epsilonLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef epsilonLowReWallFunctionFvPatchScalarField_H -#define epsilonLowReWallFunctionFvPatchScalarField_H - -#include "epsilonWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class epsilonLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class epsilonLowReWallFunctionFvPatchScalarField -: - public epsilonWallFunctionFvPatchScalarField -{ - -protected: - - // Protected data - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - //- Calculate the epsilon and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon - ); - - -public: - - //- Runtime type information - TypeName("compressible::epsilonLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - epsilonLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - epsilonLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // epsilonLowReWallFunctionFvPatchScalarField - // onto a new patch - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new epsilonLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new epsilonLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C deleted file mode 100644 index 1bf17b6fad6..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,586 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "epsilonWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -scalar epsilonWallFunctionFvPatchScalarField::tolerance_ = 1e-5; - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void epsilonWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("epsilonWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void epsilonWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -void epsilonWallFunctionFvPatchScalarField::setMaster() -{ - if (master_ != -1) - { - return; - } - - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - label master = -1; - forAll(bf, patchI) - { - if (isA<epsilonWallFunctionFvPatchScalarField>(bf[patchI])) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - if (master == -1) - { - master = patchI; - } - - epf.master() = master; - } - } -} - - -void epsilonWallFunctionFvPatchScalarField::createAveragingWeights() -{ - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - const fvMesh& mesh = epsilon.mesh(); - - if (initialised_ && !mesh.changing()) - { - return; - } - - volScalarField weights - ( - IOobject - ( - "weights", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false // do not register - ), - mesh, - dimensionedScalar("zero", dimless, 0.0) - ); - - DynamicList<label> epsilonPatches(bf.size()); - forAll(bf, patchI) - { - if (isA<epsilonWallFunctionFvPatchScalarField>(bf[patchI])) - { - epsilonPatches.append(patchI); - - const labelUList& faceCells = bf[patchI].patch().faceCells(); - forAll(faceCells, i) - { - label cellI = faceCells[i]; - weights[cellI]++; - } - } - } - - cornerWeights_.setSize(bf.size()); - forAll(epsilonPatches, i) - { - label patchI = epsilonPatches[i]; - const fvPatchScalarField& wf = weights.boundaryField()[patchI]; - cornerWeights_[patchI] = 1.0/wf.patchInternalField(); - } - - G_.setSize(dimensionedInternalField().size(), 0.0); - epsilon_.setSize(dimensionedInternalField().size(), 0.0); - - initialised_ = true; -} - - -epsilonWallFunctionFvPatchScalarField& -epsilonWallFunctionFvPatchScalarField::epsilonPatch(const label patchI) -{ - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - const epsilonWallFunctionFvPatchScalarField& epf = - refCast<const epsilonWallFunctionFvPatchScalarField>(bf[patchI]); - - return const_cast<epsilonWallFunctionFvPatchScalarField&>(epf); -} - - -void epsilonWallFunctionFvPatchScalarField::calculateTurbulenceFields -( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& epsilon0 -) -{ - // accumulate all of the G and epsilon contributions - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - const List<scalar>& w = cornerWeights_[patchI]; - - epf.calculate(turbulence, w, epf.patch(), G0, epsilon0); - } - } - - // apply zero-gradient condition for epsilon - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - epf == scalarField(epsilon0, epf.patch().faceCells()); - } - } -} - - -void epsilonWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu75 = pow(Cmu_, 0.75); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tmu = turbulence.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const tmp<volScalarField> tmut = turbulence.mut(); - const volScalarField& mut = tmut(); - const scalarField& mutw = mut.boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set epsilon and G - forAll(mutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar w = cornerWeights[faceI]; - - epsilon[cellI] += w*Cmu75*pow(k[cellI], 1.5)/(kappa_*y[faceI]); - - G[cellI] += - w - *(mutw[faceI] + muw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); - - // apply zero-gradient condition on start-up - this->operator==(patchInternalField()); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ewfpsf -) -: - fixedValueFvPatchField<scalar>(ewfpsf), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ewfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(ewfpsf, iF), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalarField& epsilonWallFunctionFvPatchScalarField::G(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - G_ = 0.0; - } - - return G_; - } - - return epsilonPatch(master_).G(); -} - - -scalarField& epsilonWallFunctionFvPatchScalarField::epsilon(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - epsilon_ = 0.0; - } - - return epsilon_; - } - - return epsilonPatch(master_).epsilon(init); -} - - -void epsilonWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), epsilon(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& epsilon0 = this->epsilon(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& epsilon = const_cast<FieldType&>(dimensionedInternalField()); - - forAll(*this, faceI) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = G0[cellI]; - epsilon[cellI] = epsilon0[cellI]; - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void epsilonWallFunctionFvPatchScalarField::updateCoeffs -( - const scalarField& weights -) -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), epsilon(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& epsilon0 = this->epsilon(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& epsilon = const_cast<FieldType&>(dimensionedInternalField()); - - scalarField& epsilonf = *this; - - // only set the values if the weights are > tolerance - forAll(weights, faceI) - { - scalar w = weights[faceI]; - - if (w > tolerance_) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = (1.0 - w)*G[cellI] + w*G0[cellI]; - epsilon[cellI] = (1.0 - w)*epsilon[cellI] + w*epsilon0[cellI]; - epsilonf[faceI] = epsilon[cellI]; - } - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void epsilonWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix -) -{ - if (manipulatedMatrix()) - { - return; - } - - matrix.setValues(patch().faceCells(), patchInternalField()); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void epsilonWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix, - const Field<scalar>& weights -) -{ - if (manipulatedMatrix()) - { - return; - } - - // filter weights so that we only apply the constraint where the - // weight > SMALL - DynamicList<label> constraintCells(weights.size()); - DynamicList<scalar> constraintEpsilon(weights.size()); - const labelUList& faceCells = patch().faceCells(); - - const DimensionedField<scalar, volMesh>& epsilon = - dimensionedInternalField(); - - label nConstrainedCells = 0; - - - forAll(weights, faceI) - { - // only set the values if the weights are > tolerance - if (weights[faceI] > tolerance_) - { - nConstrainedCells++; - - label cellI = faceCells[faceI]; - - constraintCells.append(cellI); - constraintEpsilon.append(epsilon[cellI]); - } - } - - if (debug) - { - Pout<< "Patch: " << patch().name() - << ": number of constrained cells = " << nConstrainedCells - << " out of " << patch().size() - << endl; - } - - matrix.setValues - ( - constraintCells, - scalarField(constraintEpsilon.xfer()) - ); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void epsilonWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchField<scalar>::write(os); - writeLocalEntries(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - epsilonWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H deleted file mode 100644 index b024313213d..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,292 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::compressible::epsilonWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulence dissipation wall function - condition for high Reynolds number, turbulent flow cases. - - The condition can be applied to wall boundaries, whereby it - - calculates \c epsilon and \c G - - inserts near wall epsilon values directly into the epsilon equation - to act as a constraint - - where - - \vartable - epsilon | turblence dissipation field - G | turblence generation field - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type compressible::epsilonWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedInternalValueFvPatchField - -SourceFiles - epsilonWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleEpsilonWallFunctionFvPatchScalarField_H -#define compressibleEpsilonWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -class turbulenceModel; - -/*---------------------------------------------------------------------------*\ - Class epsilonWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class epsilonWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Tolerance used in weighted calculations - static scalar tolerance_; - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Local copy of turbulence G field - scalarField G_; - - //- Local copy of turbulence epsilon field - scalarField epsilon_; - - //- Initialised flag - bool initialised_; - - //- Master patch ID - label master_; - - //- List of averaging corner weights - List<List<scalar> > cornerWeights_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Set the master patch - master is responsible for updating all - // wall function patches - virtual void setMaster(); - - //- Create the averaging weights for cells which are bounded by - // multiple wall function faces - virtual void createAveragingWeights(); - - //- Helper function to return non-const access to an epsilon patch - virtual epsilonWallFunctionFvPatchScalarField& epsilonPatch - ( - const label patchI - ); - - //- Main driver to calculate the turbulence fields - virtual void calculateTurbulenceFields - ( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& epsilon0 - ); - - //- Calculate the epsilon and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon - ); - - //- Return non-const access to the master patch ID - virtual label& master() - { - return master_; - } - - -public: - - //- Runtime type information - TypeName("compressible::epsilonWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - epsilonWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - epsilonWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // epsilonWallFunctionFvPatchScalarField - // onto a new patch - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new epsilonWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new epsilonWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - //- Destructor - virtual ~epsilonWallFunctionFvPatchScalarField() - {} - - - // Member functions - - // Access - - //- Return non-const access to the master's G field - scalarField& G(bool init = false); - - //- Return non-const access to the master's epsilon field - scalarField& epsilon(bool init = false); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(const scalarField& weights); - - //- Manipulate matrix - virtual void manipulateMatrix(fvMatrix<scalar>& matrix); - - //- Manipulate matrix with given weights - virtual void manipulateMatrix - ( - fvMatrix<scalar>& matrix, - const scalarField& weights - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C deleted file mode 100644 index 60ad82717c4..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,263 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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 "fWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "v2f.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void fWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("fWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void fWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -scalar fWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField -( - const fWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} - - -fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField -( - const fWallFunctionFvPatchScalarField& v2wfpsf -) -: - fixedValueFvPatchField<scalar>(v2wfpsf), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} - - -fWallFunctionFvPatchScalarField::fWallFunctionFvPatchScalarField -( - const fWallFunctionFvPatchScalarField& v2wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(v2wfpsf, iF), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void fWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const v2f& v2fModel = refCast<const v2f>(turbulence); - - const scalarField& y = v2fModel.y()[patchI]; - - const tmp<volScalarField> tk = v2fModel.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tepsilon = v2fModel.epsilon(); - const volScalarField& epsilon = tepsilon(); - - const tmp<volScalarField> tv2 = v2fModel.v2(); - const volScalarField& v2 = tv2(); - - const tmp<volScalarField> tmu = v2fModel.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const scalarField& rhow = v2fModel.rho().boundaryField()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - scalarField& f = *this; - - // Set f wall values - forAll(f, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uTau = Cmu25*sqrt(k[faceCellI]); - - scalar yPlus = uTau*y[faceI]/(muw[faceI]/rhow[faceI]); - - if (yPlus > yPlusLam_) - { - scalar N = 6.0; - scalar v2c = v2[faceCellI]; - scalar epsc = epsilon[faceCellI]; - scalar kc = k[faceCellI]; - - f[faceI] = N*v2c*epsc/(sqr(kc) + ROOTVSMALL); - f[faceI] /= sqr(uTau) + ROOTVSMALL; - } - else - { - f[faceI] = 0.0; - } - } - - fixedValueFvPatchField<scalar>::updateCoeffs(); - - // TODO: perform averaging for cells sharing more than one boundary face -} - - -void fWallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField<scalar>::evaluate(commsType); -} - - -void fWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - writeLocalEntries(os); - fixedValueFvPatchField<scalar>::write(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - fWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H deleted file mode 100644 index 6163d05ad9c..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/fWallFunctions/fWallFunction/fWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,209 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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::compressible::RASModels::fWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulence damping function, f, wall - function condition for low- and high Reynolds number, turbulent flow cases - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type fWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - fWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef fWallFunctionFvPatchScalarField_H -#define fWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class fWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class fWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - -public: - - //- Runtime type information - TypeName("compressible::fWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - fWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - fWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given fWallFunctionFvPatchScalarField - // onto a new patch - fWallFunctionFvPatchScalarField - ( - const fWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - fWallFunctionFvPatchScalarField - ( - const fWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new fWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - fWallFunctionFvPatchScalarField - ( - const fWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new fWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index 72a987b6897..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,255 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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 "kLowReWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void kLowReWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("kLowReWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar kLowReWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - Ceps2_(1.9), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - Ceps2_(ptf.Ceps2_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - Ceps2_(dict.lookupOrDefault<scalar>("Ceps2", 1.9)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& kwfpsf -) -: - fixedValueFvPatchField<scalar>(kwfpsf), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& kwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(kwfpsf, iF), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void kLowReWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbulence.y()[patchI]; - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tmu = turbulence.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const scalarField& rhow = turbulence.rho().boundaryField()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - scalarField& kw = *this; - - // Set k wall values - forAll(kw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uTau = Cmu25*sqrt(k[faceCellI]); - - scalar yPlus = uTau*y[faceI]/(muw[faceI]/rhow[faceI]); - - if (yPlus > yPlusLam_) - { - scalar Ck = -0.416; - scalar Bk = 8.366; - kw[faceI] = Ck/kappa_*log(yPlus) + Bk; - } - else - { - scalar C = 11.0; - scalar Cf = (1.0/sqr(yPlus + C) + 2.0*yPlus/pow3(C) - 1.0/sqr(C)); - kw[faceI] = 2400.0/sqr(Ceps2_)*Cf; - } - - kw[faceI] *= sqr(uTau); - } - - fixedValueFvPatchField<scalar>::updateCoeffs(); - - // TODO: perform averaging for cells sharing more than one boundary face -} - - -void kLowReWallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField<scalar>::evaluate(commsType); -} - - -void kLowReWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; - os.writeKeyword("Ceps2") << Ceps2_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - kLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index 511bc19b6c6..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,207 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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::compressible::kLowReWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulence kinetic energy wall function - condition for low- and high-Reynolds number turbulent flow cases. - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - Ceps2 | model coefficient | no | 1.9 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type kLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - kLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kLowReWallFunctionFvPatchScalarField_H -#define kLowReWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class kLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class kLowReWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Ceps2 coefficient - scalar Ceps2_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - -public: - - //- Runtime type information - TypeName("compressible::kLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - kLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - kLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given kLowReWallFunctionFvPatchScalarField - // onto a new patch - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new kLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new kLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C deleted file mode 100644 index 0d0fc613812..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C +++ /dev/null @@ -1,150 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "kqRWallFunctionFvPatchField.H" -#include "fvPatchFieldMapper.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::checkType() -{ - if (!isA<wallFvPatch>(this->patch())) - { - FatalErrorIn("kqRWallFunctionFvPatchField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << this->patch().name() - << " must be wall" << nl - << " Current patch type is " << this->patch().type() - << nl << endl - << abort(FatalError); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF -) -: - zeroGradientFvPatchField<Type>(p, iF) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& ptf, - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - zeroGradientFvPatchField<Type>(ptf, p, iF, mapper) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const dictionary& dict -) -: - zeroGradientFvPatchField<Type>(p, iF, dict) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& tkqrwfpf -) -: - zeroGradientFvPatchField<Type>(tkqrwfpf) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& tkqrwfpf, - const DimensionedField<Type, volMesh>& iF -) -: - zeroGradientFvPatchField<Type>(tkqrwfpf, iF) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::evaluate -( - const Pstream::commsTypes commsType -) -{ - zeroGradientFvPatchField<Type>::evaluate(commsType); -} - - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::write(Ostream& os) const -{ - zeroGradientFvPatchField<Type>::write(os); - this->writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H deleted file mode 100644 index e96076fbc76..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H +++ /dev/null @@ -1,182 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::kqRWallFunctionFvPatchField - -Group - grpCmpWallFunctions - -Description - This boundary condition is applied to turbulence \c k, \c q, and \c R - when using wall functions, and simply enforces a zero-gradient condition. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type compressible::kqRWallFunction; - } - \endverbatim - -SeeAlso - Foam::zeroGradientFvPatchField - -SourceFiles - kqRWallFunctionFvPatchField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressiblekqRWallFunctionFvPatchField_H -#define compressiblekqRWallFunctionFvPatchField_H - -#include "zeroGradientFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class kqRWallFunctionFvPatchField Declaration -\*---------------------------------------------------------------------------*/ - -template<class Type> -class kqRWallFunctionFvPatchField -: - public zeroGradientFvPatchField<Type> -{ - - // Private Member Functions - - //- Check the type of the patch - void checkType(); - - -public: - - //- Runtime type information - TypeName("compressible::kqRWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - kqRWallFunctionFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - kqRWallFunctionFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // kqRWallFunctionFvPatchField - // onto a new patch - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField&, - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchField<Type> > clone() const - { - return tmp<fvPatchField<Type> > - ( - new kqRWallFunctionFvPatchField(*this) - ); - } - - //- Construct as copy setting internal field reference - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchField<Type> > clone - ( - const DimensionedField<Type, volMesh>& iF - ) const - { - return tmp<fvPatchField<Type> > - ( - new kqRWallFunctionFvPatchField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Evaluate the patchField - virtual void evaluate - ( - const Pstream::commsTypes commsType=Pstream::Pstream::blocking - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "kqRWallFunctionFvPatchField.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C deleted file mode 100644 index 249b99ba3d0..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C +++ /dev/null @@ -1,47 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "kqRWallFunctionFvPatchFields.H" -#include "fvPatchFields.H" -#include "addToRunTimeSelectionTable.H" -#include "volFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -makePatchFields(kqRWallFunction); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index 269f9698a95..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,133 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutLowReWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> mutLowReWallFunctionFvPatchScalarField::calcMut() const -{ - return tmp<scalarField>(new scalarField(patch().size(), 0.0)); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutLowReWallFunctionFvPatchScalarField::mutLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(p, iF) -{} - - -mutLowReWallFunctionFvPatchScalarField::mutLowReWallFunctionFvPatchScalarField -( - const mutLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -mutLowReWallFunctionFvPatchScalarField::mutLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -mutLowReWallFunctionFvPatchScalarField::mutLowReWallFunctionFvPatchScalarField -( - const mutLowReWallFunctionFvPatchScalarField& mlrwfpsf -) -: - mutWallFunctionFvPatchScalarField(mlrwfpsf) -{} - - -mutLowReWallFunctionFvPatchScalarField::mutLowReWallFunctionFvPatchScalarField -( - const mutLowReWallFunctionFvPatchScalarField& mlrwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(mlrwfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> mutLowReWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const scalarField nuw - ( - turbModel.mu().boundaryField()[patchi] - /turbModel.rho().boundaryField()[patchi] - ); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - - return y*sqrt(nuw*mag(Uw.snGrad()))/nuw; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index 75f751288b9..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutLowReWallFunction/mutLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,168 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutLowReWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition for use - with low Reynolds number models. It sets \c nut to zero, and provides an - access function to calculate y+. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::compressible::mutWallFunctionFvPatchScalarField - -SourceFiles - mutLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutLowReWallFunctionFvPatchScalarField_H -#define compressibleMutLowReWallFunctionFvPatchScalarField_H - -#include "mutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutLowReWallFunctionFvPatchScalarField -: - public mutWallFunctionFvPatchScalarField -{ -protected: - - // Private Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - -public: - - //- Runtime type information - TypeName("mutLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutLowReWallFunctionFvPatchScalarField - // onto a new patch - mutLowReWallFunctionFvPatchScalarField - ( - const mutLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutLowReWallFunctionFvPatchScalarField - ( - const mutLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutLowReWallFunctionFvPatchScalarField - ( - const mutLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.C deleted file mode 100644 index 5591904c9e0..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,315 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutURoughWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> mutURoughWallFunctionFvPatchScalarField::calcYPlus -( - const scalarField& magUp -) const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patchi]; - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - const fvPatchScalarField& rho = turbModel.rho().boundaryField()[patchi]; - - tmp<scalarField> tyPlus(new scalarField(patch().size(), 0.0)); - scalarField& yPlus = tyPlus(); - - if (roughnessHeight_ > 0.0) - { - // Rough Walls - const scalar c_1 = 1/(90 - 2.25) + roughnessConstant_; - static const scalar c_2 = 2.25/(90 - 2.25); - static const scalar c_3 = 2.0*atan(1.0)/log(90/2.25); - static const scalar c_4 = c_3*log(2.25); - - //if (KsPlusBasedOnYPlus_) - { - // If KsPlus is based on YPlus the extra term added to the law - // of the wall will depend on yPlus - forAll(yPlus, facei) - { - const scalar Re = rho[facei]*magUp[facei]*y[facei]/muw[facei]; - const scalar kappaRe = kappa_*Re; - - scalar yp = yPlusLam_; - const scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - scalar dKsPlusdYPlus = roughnessHeight_/y[facei]; - - // Enforce the roughnessHeight to be less than the distance to - // the first cell centre. - if (dKsPlusdYPlus > 1) - { - dKsPlusdYPlus = 1; - } - - // Additional tuning parameter (fudge factor) - nominally = 1 - dKsPlusdYPlus *= roughnessFactor_; - - do - { - yPlusLast = yp; - - // The non-dimensional roughness height - scalar KsPlus = yp*dKsPlusdYPlus; - - // The extra term in the law-of-the-wall - scalar G = 0.0; - - scalar yPlusGPrime = 0.0; - - if (KsPlus >= 90) - { - const scalar t_1 = 1 + roughnessConstant_*KsPlus; - G = log(t_1); - yPlusGPrime = roughnessConstant_*KsPlus/t_1; - } - else if (KsPlus > 2.25) - { - const scalar t_1 = c_1*KsPlus - c_2; - const scalar t_2 = c_3*log(KsPlus) - c_4; - const scalar sint_2 = sin(t_2); - const scalar logt_1 = log(t_1); - G = logt_1*sint_2; - yPlusGPrime = - (c_1*sint_2*KsPlus/t_1) + (c_3*logt_1*cos(t_2)); - } - - scalar denom = 1.0 + log(E_*yp) - G - yPlusGPrime; - if (mag(denom) > VSMALL) - { - yp = (kappaRe + yp*(1 - yPlusGPrime))/denom; - } - - } while - ( - mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 - && ++iter < 10 - && yp > VSMALL - ); - - yPlus[facei] = max(0.0, yp); - } - } - } - else - { - // Smooth Walls - forAll(yPlus, facei) - { - const scalar Re = rho[facei]*magUp[facei]*y[facei]/muw[facei]; - const scalar kappaRe = kappa_*Re; - - scalar yp = yPlusLam_; - const scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - - do - { - yPlusLast = yp; - yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - - } while - ( - mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 - && ++iter < 10 - ); - - yPlus[facei] = max(0.0, yp); - } - } - - return tyPlus; -} - - -tmp<scalarField> mutURoughWallFunctionFvPatchScalarField::calcMut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - const fvPatchScalarField& rho = turbModel.rho().boundaryField()[patchi]; - - scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - tmp<scalarField> tyPlus = calcYPlus(magUp); - scalarField& yPlus = tyPlus(); - - tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0)); - scalarField& mutw = tmutw(); - - forAll(yPlus, facei) - { - if (yPlus[facei] > yPlusLam_) - { - const scalar Re = - rho[facei]*magUp[facei]*y[facei]/muw[facei] + ROOTVSMALL; - mutw[facei] = muw[facei]*(sqr(yPlus[facei])/Re - 1); - } - } - - return tmutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutURoughWallFunctionFvPatchScalarField::mutURoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(p, iF), - roughnessHeight_(pTraits<scalar>::zero), - roughnessConstant_(pTraits<scalar>::zero), - roughnessFactor_(pTraits<scalar>::zero) -{} - - -mutURoughWallFunctionFvPatchScalarField::mutURoughWallFunctionFvPatchScalarField -( - const mutURoughWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - roughnessHeight_(ptf.roughnessHeight_), - roughnessConstant_(ptf.roughnessConstant_), - roughnessFactor_(ptf.roughnessFactor_) -{} - - -mutURoughWallFunctionFvPatchScalarField::mutURoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutWallFunctionFvPatchScalarField(p, iF, dict), - roughnessHeight_(readScalar(dict.lookup("roughnessHeight"))), - roughnessConstant_(readScalar(dict.lookup("roughnessConstant"))), - roughnessFactor_(readScalar(dict.lookup("roughnessFactor"))) -{} - - -mutURoughWallFunctionFvPatchScalarField::mutURoughWallFunctionFvPatchScalarField -( - const mutURoughWallFunctionFvPatchScalarField& rwfpsf -) -: - mutWallFunctionFvPatchScalarField(rwfpsf), - roughnessHeight_(rwfpsf.roughnessHeight_), - roughnessConstant_(rwfpsf.roughnessConstant_), - roughnessFactor_(rwfpsf.roughnessFactor_) -{} - - -mutURoughWallFunctionFvPatchScalarField::mutURoughWallFunctionFvPatchScalarField -( - const mutURoughWallFunctionFvPatchScalarField& rwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(rwfpsf, iF), - roughnessHeight_(rwfpsf.roughnessHeight_), - roughnessConstant_(rwfpsf.roughnessConstant_), - roughnessFactor_(rwfpsf.roughnessFactor_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> mutURoughWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - return calcYPlus(magUp); -} - - -void mutURoughWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchScalarField::write(os); - writeLocalEntries(os); - os.writeKeyword("roughnessHeight") - << roughnessHeight_ << token::END_STATEMENT << nl; - os.writeKeyword("roughnessConstant") - << roughnessConstant_ << token::END_STATEMENT << nl; - os.writeKeyword("roughnessFactor") - << roughnessFactor_ << token::END_STATEMENT << nl; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutURoughWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.H deleted file mode 100644 index ea1aaa184fd..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutURoughWallFunction/mutURoughWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,240 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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::compressible::mutURoughWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions for rough walls, based on velocity. - - \heading Patch usage - - \table - Property | Description | Required | Default value - roughnessHeight | roughness height | yes | - roughnessConstant | roughness constanr | yes | - roughnessFactor | scaling factor | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutURoughWallFunction; - roughnessHeight 1e-5; - roughnessConstant 0.5; - roughnessFactor 1; - } - \endverbatim - -SeeAlso - Foam::compressible::mutWallFunctionFvPatchScalarField - -SourceFiles - mutURoughWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutURoughWallFunctionFvPatchScalarField_H -#define compressibleMutURoughWallFunctionFvPatchScalarField_H - -#include "mutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutURoughWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutURoughWallFunctionFvPatchScalarField -: - public mutWallFunctionFvPatchScalarField -{ -protected: - - // Protected data - - // Roughness parameters - - //- Height - scalar roughnessHeight_; - - //- Constant - scalar roughnessConstant_; - - //- Scale factor - scalar roughnessFactor_; - - - // Protected Member Functions - - //- Calculate yPLus - virtual tmp<scalarField> calcYPlus(const scalarField& magUp) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - -public: - - //- Runtime type information - TypeName("mutURoughWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutURoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutURoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutURoughWallFunctionFvPatchScalarField - // onto a new patch - mutURoughWallFunctionFvPatchScalarField - ( - const mutURoughWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutURoughWallFunctionFvPatchScalarField - ( - const mutURoughWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutURoughWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutURoughWallFunctionFvPatchScalarField - ( - const mutURoughWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutURoughWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Access - - //- Return the roughness height scale - scalar roughnessHeight() const - { - return roughnessHeight_; - } - - //- Return reference to the roughness height to allow adjustment - scalar& roughnessHeight() - { - return roughnessHeight_; - } - - //- Return the roughness constant scale - scalar roughnessConstant() const - { - return roughnessConstant_; - } - - //- Return reference to the roughness constant to allow adjustment - scalar& roughnessConstant() - { - return roughnessConstant_; - } - - //- Return the roughness scale factor - scalar roughnessFactor() const - { - return roughnessFactor_; - } - - //- Return reference to the roughness scale factor to allow - // adjustment - scalar& roughnessFactor() - { - return roughnessFactor_; - } - - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.C deleted file mode 100644 index 64bb1238ec7..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,223 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutUSpaldingWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> mutUSpaldingWallFunctionFvPatchScalarField::calcUTau -( - const scalarField& magGradU -) const -{ - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patch().index()]; - - const fvPatchVectorField& Uw = - turbModel.U().boundaryField()[patch().index()]; - - scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - const fvPatchScalarField& rhow = - turbModel.rho().boundaryField()[patch().index()]; - - const fvPatchScalarField& muw = - turbModel.mu().boundaryField()[patch().index()]; - const scalarField& mutw = *this; - - tmp<scalarField> tuTau(new scalarField(patch().size(), 0.0)); - scalarField& uTau = tuTau(); - - forAll(mutw, faceI) - { - scalar ut = - sqrt((mutw[faceI] + muw[faceI])*magGradU[faceI]/rhow[faceI]); - - if (ut > ROOTVSMALL) - { - int iter = 0; - scalar err = GREAT; - - do - { - scalar kUu = min(kappa_*magUp[faceI]/ut, 50); - scalar fkUu = exp(kUu) - 1 - kUu*(1 + 0.5*kUu); - - scalar f = - - ut*y[faceI]/(muw[faceI]/rhow[faceI]) - + magUp[faceI]/ut - + 1/E_*(fkUu - 1.0/6.0*kUu*sqr(kUu)); - - scalar df = - y[faceI]/(muw[faceI]/rhow[faceI]) - + magUp[faceI]/sqr(ut) - + 1/E_*kUu*fkUu/ut; - - scalar uTauNew = ut + f/df; - err = mag((ut - uTauNew)/ut); - ut = uTauNew; - - } while (ut > ROOTVSMALL && err > 0.01 && ++iter < 10); - - uTau[faceI] = max(0.0, ut); - } - } - - return tuTau; -} - - -tmp<scalarField> mutUSpaldingWallFunctionFvPatchScalarField::calcMut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magGradU(mag(Uw.snGrad())); - const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - - return max - ( - scalar(0), - rhow*sqr(calcUTau(magGradU))/(magGradU + ROOTVSMALL) - muw - ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutUSpaldingWallFunctionFvPatchScalarField:: -mutUSpaldingWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(p, iF) -{} - - -mutUSpaldingWallFunctionFvPatchScalarField:: -mutUSpaldingWallFunctionFvPatchScalarField -( - const mutUSpaldingWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -mutUSpaldingWallFunctionFvPatchScalarField:: -mutUSpaldingWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -mutUSpaldingWallFunctionFvPatchScalarField:: -mutUSpaldingWallFunctionFvPatchScalarField -( - const mutUSpaldingWallFunctionFvPatchScalarField& wfpsf -) -: - mutWallFunctionFvPatchScalarField(wfpsf) -{} - - -mutUSpaldingWallFunctionFvPatchScalarField:: -mutUSpaldingWallFunctionFvPatchScalarField -( - const mutUSpaldingWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(wfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> mutUSpaldingWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - - return y*calcUTau(mag(Uw.snGrad()))/(muw/rhow); -} - - -void mutUSpaldingWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutUSpaldingWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.H deleted file mode 100644 index a0322dbeb26..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUSpaldingWallFunction/mutUSpaldingWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,190 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutUSpaldingWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions for rough walls, based on velocity, using Spalding's - law to give a continuous nut profile to the wall (y+ = 0) - - \f[ - y^+ = u^+ + \frac{1}{E} \left[exp(\kappa u^+) - 1 - \kappa u^+\, - - 0.5 (\kappa u^+)^2 - \frac{1}{6} (\kappa u^+)^3\right] - \f] - - where - \vartable - y^+ | non-dimensional position - u^+ | non-dimensional velocity - \kappa | Von Karman constant - \endvartable - - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutUSpaldingWallFunction; - } - \endverbatim - -SeeAlso - Foam::compressible::mutWallFunctionFvPatchScalarField - -SourceFiles - mutUSpaldingWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutUSpaldingWallFunctionFvPatchScalarField_H -#define compressibleMutUSpaldingWallFunctionFvPatchScalarField_H - -#include "mutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutUSpaldingWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutUSpaldingWallFunctionFvPatchScalarField -: - public mutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - //- Calculate the friction velocity - virtual tmp<scalarField> calcUTau(const scalarField& magGradU) const; - - -public: - - //- Runtime type information - TypeName("mutUSpaldingWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutUSpaldingWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutUSpaldingWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutUSpaldingWallFunctionFvPatchScalarField - // onto a new patch - mutUSpaldingWallFunctionFvPatchScalarField - ( - const mutUSpaldingWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutUSpaldingWallFunctionFvPatchScalarField - ( - const mutUSpaldingWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutUSpaldingWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutUSpaldingWallFunctionFvPatchScalarField - ( - const mutUSpaldingWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutUSpaldingWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.C deleted file mode 100644 index 3148119dcfb..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,201 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutUWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> mutUWallFunctionFvPatchScalarField::calcYPlus -( - const scalarField& magUp -) const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patchi]; - const fvPatchScalarField& rhow = turbModel.rho().boundaryField()[patchi]; - const fvPatchScalarField& muw = turbModel.mu().boundaryField()[patchi]; - - tmp<scalarField> tyPlus(new scalarField(patch().size(), 0.0)); - scalarField& yPlus = tyPlus(); - - forAll(yPlus, faceI) - { - scalar kappaRe = kappa_*magUp[faceI]*y[faceI]/(muw[faceI]/rhow[faceI]); - - scalar yp = yPlusLam_; - scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - - do - { - yPlusLast = yp; - yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - - } while (mag(ryPlusLam*(yp - yPlusLast)) > 0.01 && ++iter < 10); - - yPlus[faceI] = max(0.0, yp); - } - - return tyPlus; -} - - -tmp<scalarField> mutUWallFunctionFvPatchScalarField::calcMut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - const fvPatchScalarField& muw = turbModel.mu().boundaryField()[patchi]; - - tmp<scalarField> tyPlus = calcYPlus(magUp); - scalarField& yPlus = tyPlus(); - - tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0)); - scalarField& mutw = tmutw(); - - forAll(yPlus, faceI) - { - if (yPlus[faceI] > yPlusLam_) - { - mutw[faceI] = - muw[faceI]*(yPlus[faceI]*kappa_/log(E_*yPlus[faceI]) - 1.0); - } - } - - return tmutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutUWallFunctionFvPatchScalarField::mutUWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(p, iF) -{} - - -mutUWallFunctionFvPatchScalarField::mutUWallFunctionFvPatchScalarField -( - const mutUWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -mutUWallFunctionFvPatchScalarField::mutUWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -mutUWallFunctionFvPatchScalarField::mutUWallFunctionFvPatchScalarField -( - const mutUWallFunctionFvPatchScalarField& sawfpsf -) -: - mutWallFunctionFvPatchScalarField(sawfpsf) -{} - - -mutUWallFunctionFvPatchScalarField::mutUWallFunctionFvPatchScalarField -( - const mutUWallFunctionFvPatchScalarField& sawfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(sawfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> mutUWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - return calcYPlus(magUp); -} - - -void mutUWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutUWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.H deleted file mode 100644 index 1c6ed4f7d64..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutUWallFunction/mutUWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,176 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutUWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions, based on velocity. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutUWallFunction; - } - \endverbatim - -SeeAlso - Foam::compressible::mutWallFunctionFvPatchScalarField - -SourceFiles - mutUWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutUWallFunctionFvPatchScalarField_H -#define compressibleMutUWallFunctionFvPatchScalarField_H - -#include "mutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutUWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutUWallFunctionFvPatchScalarField -: - public mutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate yPLus - virtual tmp<scalarField> calcYPlus(const scalarField& magUp) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - -public: - - //- Runtime type information - TypeName("mutUWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutUWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutUWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutUWallFunctionFvPatchScalarField - // onto a new patch - mutUWallFunctionFvPatchScalarField - ( - const mutUWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutUWallFunctionFvPatchScalarField - ( - const mutUWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutUWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutUWallFunctionFvPatchScalarField - ( - const mutUWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutUWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.C deleted file mode 100644 index f4a6476be6b..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,187 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -defineTypeNameAndDebug(mutWallFunctionFvPatchScalarField, 0); - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void mutWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("mutWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void mutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField -( - const mutWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchScalarField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{} - - -mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchScalarField(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField -( - const mutWallFunctionFvPatchScalarField& wfpsf -) -: - fixedValueFvPatchScalarField(wfpsf), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_), - yPlusLam_(wfpsf.yPlusLam_) -{} - - -mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField -( - const mutWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(wfpsf, iF), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_), - yPlusLam_(wfpsf.yPlusLam_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalar mutWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -void mutWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - operator==(calcMut()); - - fixedValueFvPatchScalarField::updateCoeffs(); -} - - -void mutWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.H deleted file mode 100644 index 29bc406aa1e..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutWallFunction/mutWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,181 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions, based on turbulence kinetic energy. - - replicates OpenFOAM v1.5 (and earlier) behaviour - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - mutWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutWallFunctionFvPatchScalarField_H -#define compressibleMutWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutWallFunctionFvPatchScalarField -: - public fixedValueFvPatchScalarField -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const = 0; - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - -public: - - //- Runtime type information - TypeName("mutWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutWallFunctionFvPatchScalarField - // onto a new patch - mutWallFunctionFvPatchScalarField - ( - const mutWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutWallFunctionFvPatchScalarField - ( - const mutWallFunctionFvPatchScalarField& - ); - - //- Construct as copy setting internal field reference - mutWallFunctionFvPatchScalarField - ( - const mutWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - - // Member functions - - //- Calculate the Y+ at the edge of the laminar sublayer - static scalar yPlusLam(const scalar kappa, const scalar E); - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const = 0; - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.C deleted file mode 100644 index e634b89acc1..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,241 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutkRoughWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar mutkRoughWallFunctionFvPatchScalarField::fnRough -( - const scalar KsPlus, - const scalar Cs -) const -{ - // Return fn based on non-dimensional roughness height - - if (KsPlus < 90.0) - { - return pow - ( - (KsPlus - 2.25)/87.75 + Cs*KsPlus, - sin(0.4258*(log(KsPlus) - 0.811)) - ); - } - else - { - return (1.0 + Cs*KsPlus); - } -} - - -tmp<scalarField> mutkRoughWallFunctionFvPatchScalarField::calcMut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalarField& y = turbModel.y()[patchi]; - const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - - const scalar Cmu25 = pow025(Cmu_); - - tmp<scalarField> tmutw(new scalarField(*this)); - scalarField& mutw = tmutw(); - - forAll(mutw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uStar = Cmu25*sqrt(k[faceCellI]); - scalar yPlus = uStar*y[faceI]/(muw[faceI]/rhow[faceI]); - scalar KsPlus = uStar*Ks_[faceI]/(muw[faceI]/rhow[faceI]); - - scalar Edash = E_; - if (KsPlus > 2.25) - { - Edash /= fnRough(KsPlus, Cs_[faceI]); - } - - scalar limitingMutw = max(mutw[faceI], muw[faceI]); - - // To avoid oscillations limit the change in the wall viscosity - // which is particularly important if it temporarily becomes zero - mutw[faceI] = - max - ( - min - ( - muw[faceI] - *(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1), - 2*limitingMutw - ), 0.5*limitingMutw - ); - - if (debug) - { - Info<< "yPlus = " << yPlus - << ", KsPlus = " << KsPlus - << ", Edash = " << Edash - << ", mutw = " << mutw[faceI] - << endl; - } - } - - return tmutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutkRoughWallFunctionFvPatchScalarField::mutkRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutkWallFunctionFvPatchScalarField(p, iF), - Ks_(p.size(), 0.0), - Cs_(p.size(), 0.0) -{} - - -mutkRoughWallFunctionFvPatchScalarField::mutkRoughWallFunctionFvPatchScalarField -( - const mutkRoughWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - Ks_(ptf.Ks_, mapper), - Cs_(ptf.Cs_, mapper) -{} - - -mutkRoughWallFunctionFvPatchScalarField::mutkRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutkWallFunctionFvPatchScalarField(p, iF, dict), - Ks_("Ks", dict, p.size()), - Cs_("Cs", dict, p.size()) -{} - - -mutkRoughWallFunctionFvPatchScalarField::mutkRoughWallFunctionFvPatchScalarField -( - const mutkRoughWallFunctionFvPatchScalarField& rwfpsf -) -: - mutkWallFunctionFvPatchScalarField(rwfpsf), - Ks_(rwfpsf.Ks_), - Cs_(rwfpsf.Cs_) -{} - - -mutkRoughWallFunctionFvPatchScalarField::mutkRoughWallFunctionFvPatchScalarField -( - const mutkRoughWallFunctionFvPatchScalarField& rwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutkWallFunctionFvPatchScalarField(rwfpsf, iF), - Ks_(rwfpsf.Ks_), - Cs_(rwfpsf.Cs_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void mutkRoughWallFunctionFvPatchScalarField::autoMap -( - const fvPatchFieldMapper& m -) -{ - mutkWallFunctionFvPatchScalarField::autoMap(m); - Ks_.autoMap(m); - Cs_.autoMap(m); -} - - -void mutkRoughWallFunctionFvPatchScalarField::rmap -( - const fvPatchScalarField& ptf, - const labelList& addr -) -{ - mutkWallFunctionFvPatchScalarField::rmap(ptf, addr); - - const mutkRoughWallFunctionFvPatchScalarField& nrwfpsf = - refCast<const mutkRoughWallFunctionFvPatchScalarField>(ptf); - - Cs_.rmap(nrwfpsf.Cs_, addr); - Ks_.rmap(nrwfpsf.Ks_, addr); -} - - -void mutkRoughWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - Cs_.writeEntry("Cs", os); - Ks_.writeEntry("Ks", os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutkRoughWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.H deleted file mode 100644 index 6ff72c42d3b..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkRoughWallFunction/mutkRoughWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,206 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutkRoughWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions for rough walls, based on turbulence kinetic energy. - The condition manipulates the E parameter to account for roughness - effects. - - Parameter ranges - - roughness height = sand-grain roughness (0 for smooth walls) - - roughness constant = 0.5-1.0 - - \heading Patch usage - - \table - Property | Description | Required | Default value - Ks | sand-grain roughness height | yes | - Cs | roughness constant | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutkRoughWallFunction; - Ks uniform 0; - Cs uniform 0.5; - } - \endverbatim - -SeeAlso - Foam::compressible::mutkRoughWallFunctionFvPatchScalarField - -SourceFiles - mutkRoughWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutkRoughWallFunctionFvPatchScalarField_H -#define compressibleMutkRoughWallFunctionFvPatchScalarField_H - -#include "mutkWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutkRoughWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutkRoughWallFunctionFvPatchScalarField -: - public mutkWallFunctionFvPatchScalarField -{ -protected: - - // Protected data - - //- Roughness height - scalarField Ks_; - - //- Roughness constant - scalarField Cs_; - - - // Private Member Functions - - //- Compute the roughness function - virtual scalar fnRough(const scalar KsPlus, const scalar Cs) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - -public: - - //- Runtime type information - TypeName("mutkRoughWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutkRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutkRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutkRoughWallFunctionFvPatchScalarField - // onto a new patch - mutkRoughWallFunctionFvPatchScalarField - ( - const mutkRoughWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutkRoughWallFunctionFvPatchScalarField - ( - const mutkRoughWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutkRoughWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutkRoughWallFunctionFvPatchScalarField - ( - const mutkRoughWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutkRoughWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap(const fvPatchFieldMapper&); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchScalarField&, - const labelList& - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.C deleted file mode 100644 index 72b010d55d0..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,163 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "mutkWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> mutkWallFunctionFvPatchScalarField::calcMut() const -{ - const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - - const scalar Cmu25 = pow025(Cmu_); - - tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0)); - scalarField& mutw = tmutw(); - - forAll(mutw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar yPlus = - Cmu25*y[faceI]*sqrt(k[faceCellI])/(muw[faceI]/rhow[faceI]); - - if (yPlus > yPlusLam_) - { - mutw[faceI] = muw[faceI]*(yPlus*kappa_/log(E_*yPlus) - 1); - } - } - - return tmutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mutkWallFunctionFvPatchScalarField::mutkWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(p, iF) -{} - - -mutkWallFunctionFvPatchScalarField::mutkWallFunctionFvPatchScalarField -( - const mutkWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - mutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -mutkWallFunctionFvPatchScalarField::mutkWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - mutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -mutkWallFunctionFvPatchScalarField::mutkWallFunctionFvPatchScalarField -( - const mutkWallFunctionFvPatchScalarField& wfpsf -) -: - mutWallFunctionFvPatchScalarField(wfpsf) -{} - - -mutkWallFunctionFvPatchScalarField::mutkWallFunctionFvPatchScalarField -( - const mutkWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - mutWallFunctionFvPatchScalarField(wfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> mutkWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - const scalarField kwc(k.boundaryField()[patchi].patchInternalField()); - const scalarField& muw = turbModel.mu().boundaryField()[patchi]; - const scalarField& rhow = turbModel.rho().boundaryField()[patchi]; - - return pow025(Cmu_)*y*sqrt(kwc)/(muw/rhow); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - mutkWallFunctionFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.H deleted file mode 100644 index f81625627cf..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/mutWallFunctions/mutkWallFunction/mutkWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,168 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::mutkWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulent viscosity condition when - using wall functions, based on turbulence kinetic energy. - - replicates OpenFOAM v1.5 (and earlier) behaviour - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type mutkWallFunction; - } - \endverbatim - -SeeAlso - Foam::compressible::mutWallFunctionFvPatchScalarField - -SourceFiles - mutkWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleMutkWallFunctionFvPatchScalarField_H -#define compressibleMutkWallFunctionFvPatchScalarField_H - -#include "mutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class mutkWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class mutkWallFunctionFvPatchScalarField -: - public mutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcMut() const; - - -public: - - //- Runtime type information - TypeName("mutkWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - mutkWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - mutkWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // mutkWallFunctionFvPatchScalarField - // onto a new patch - mutkWallFunctionFvPatchScalarField - ( - const mutkWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - mutkWallFunctionFvPatchScalarField - ( - const mutkWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new mutkWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - mutkWallFunctionFvPatchScalarField - ( - const mutkWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new mutkWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C deleted file mode 100644 index 89d4782aa3b..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,603 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "omegaWallFunctionFvPatchScalarField.H" -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "mutWallFunctionFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -scalar omegaWallFunctionFvPatchScalarField::tolerance_ = 1e-5; - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void omegaWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("omegaWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void omegaWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; - os.writeKeyword("beta1") << beta1_ << token::END_STATEMENT << nl; -} - - -void omegaWallFunctionFvPatchScalarField::setMaster() -{ - if (master_ != -1) - { - return; - } - - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - label master = -1; - forAll(bf, patchI) - { - if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchI])) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - if (master == -1) - { - master = patchI; - } - - opf.master() = master; - } - } -} - - -void omegaWallFunctionFvPatchScalarField::createAveragingWeights() -{ - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - const fvMesh& mesh = omega.mesh(); - - if (initialised_ && !mesh.changing()) - { - return; - } - - volScalarField weights - ( - IOobject - ( - "weights", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false // do not register - ), - mesh, - dimensionedScalar("zero", dimless, 0.0) - ); - - DynamicList<label> omegaPatches(bf.size()); - forAll(bf, patchI) - { - if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchI])) - { - omegaPatches.append(patchI); - - const labelUList& faceCells = bf[patchI].patch().faceCells(); - forAll(faceCells, i) - { - label cellI = faceCells[i]; - weights[cellI]++; - } - } - } - - cornerWeights_.setSize(bf.size()); - forAll(omegaPatches, i) - { - label patchI = omegaPatches[i]; - const fvPatchScalarField& wf = weights.boundaryField()[patchI]; - cornerWeights_[patchI] = 1.0/wf.patchInternalField(); - } - - G_.setSize(dimensionedInternalField().size(), 0.0); - omega_.setSize(dimensionedInternalField().size(), 0.0); - - initialised_ = true; -} - - -omegaWallFunctionFvPatchScalarField& -omegaWallFunctionFvPatchScalarField::omegaPatch(const label patchI) -{ - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - const omegaWallFunctionFvPatchScalarField& opf = - refCast<const omegaWallFunctionFvPatchScalarField>(bf[patchI]); - - return const_cast<omegaWallFunctionFvPatchScalarField&>(opf); -} - - -void omegaWallFunctionFvPatchScalarField::calculateTurbulenceFields -( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& omega0 -) -{ - // accumulate all of the G and omega contributions - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - const List<scalar>& w = cornerWeights_[patchI]; - - opf.calculate(turbulence, w, opf.patch(), G0, omega0); - } - } - - // apply zero-gradient condition for omega - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - opf == scalarField(omega0, opf.patch().faceCells()); - } - } -} - - -void omegaWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& omega -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const scalarField& rhow = turbulence.rho().boundaryField()[patchI]; - - const tmp<volScalarField> tmu = turbulence.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const tmp<volScalarField> tmut = turbulence.mut(); - const volScalarField& mut = tmut(); - const scalarField& mutw = mut.boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set omega and G - forAll(mutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar w = cornerWeights[faceI]; - - scalar omegaVis = 6.0*muw[faceI]/(rhow[faceI]*beta1_*sqr(y[faceI])); - - scalar omegaLog = sqrt(k[cellI])/(Cmu25*kappa_*y[faceI]); - - omega[cellI] += w*sqrt(sqr(omegaVis) + sqr(omegaLog)); - - G[cellI] += - w - *(mutw[faceI] + muw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - beta1_(0.075), - yPlusLam_(mutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - beta1_(ptf.beta1_), - yPlusLam_(ptf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - beta1_(dict.lookupOrDefault<scalar>("beta1", 0.075)), - yPlusLam_(mutWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); - - // apply zero-gradient condition on start-up - this->operator==(patchInternalField()); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& owfpsf -) -: - fixedValueFvPatchField<scalar>(owfpsf), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), - beta1_(owfpsf.beta1_), - yPlusLam_(owfpsf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& owfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(owfpsf, iF), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), - beta1_(owfpsf.beta1_), - yPlusLam_(owfpsf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalarField& omegaWallFunctionFvPatchScalarField::G(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - G_ = 0.0; - } - - return G_; - } - - return omegaPatch(master_).G(); -} - - -scalarField& omegaWallFunctionFvPatchScalarField::omega(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - omega_ = 0.0; - } - - return omega_; - } - - return omegaPatch(master_).omega(init); -} - - -void omegaWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), omega(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& omega0 = this->omega(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& omega = const_cast<FieldType&>(dimensionedInternalField()); - - forAll(*this, faceI) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = G0[cellI]; - omega[cellI] = omega0[cellI]; - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void omegaWallFunctionFvPatchScalarField::updateCoeffs -( - const scalarField& weights -) -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), omega(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& omega0 = this->omega(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& omega = const_cast<FieldType&>(dimensionedInternalField()); - - scalarField& omegaf = *this; - - // only set the values if the weights are > tolerance_ - forAll(weights, faceI) - { - scalar w = weights[faceI]; - - if (w > tolerance_) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = (1.0 - w)*G[cellI] + w*G0[cellI]; - omega[cellI] = (1.0 - w)*omega[cellI] + w*omega0[cellI]; - omegaf[faceI] = omega[cellI]; - } - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void omegaWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix -) -{ - if (manipulatedMatrix()) - { - return; - } - - matrix.setValues(patch().faceCells(), patchInternalField()); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void omegaWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix, - const Field<scalar>& weights -) -{ - if (manipulatedMatrix()) - { - return; - } - - // filter weights so that we only apply the constraint where the - // weight > SMALL - DynamicList<label> constraintCells(weights.size()); - DynamicList<scalar> constraintomega(weights.size()); - const labelUList& faceCells = patch().faceCells(); - - const DimensionedField<scalar, volMesh>& omega = - dimensionedInternalField(); - - label nConstrainedCells = 0; - - - forAll(weights, faceI) - { - // only set the values if the weights are > tolerance - if (weights[faceI] > tolerance_) - { - nConstrainedCells++; - - label cellI = faceCells[faceI]; - - constraintCells.append(cellI); - constraintomega.append(omega[cellI]); - } - } - - if (debug) - { - Pout<< "Patch: " << patch().name() - << ": number of constrained cells = " << nConstrainedCells - << " out of " << patch().size() - << endl; - } - - matrix.setValues - ( - constraintCells, - scalarField(constraintomega.xfer()) - ); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void omegaWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchField<scalar>::write(os); - writeLocalEntries(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - omegaWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H deleted file mode 100644 index a17c65ef4a2..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,298 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::compressible::omegaWallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a wall function constraint on turbulnce - specific dissipation, omega. The values are computed using: - - \f[ - \omega = sqrt(\omega_{vis}^2 + \omega_{log}^2) - \f] - - where - - \vartable - \omega_{vis} | omega in viscous region - \omega_{log} | omega in logarithmic region - \endvartable - - Model described by Eq.(15) of: - \verbatim - Menter, F., Esch, T. - "Elements of Industrial Heat Transfer Prediction" - 16th Brazilian Congress of Mechanical Engineering (COBEM), - Nov. 2001 - \endverbatim - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - beta1 | model coefficient | no | 0.075 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type compressible::omegaWallFunction; - } - \endverbatim - -SourceFiles - omegaWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleOmegaWallFunctionFvPatchScalarField_H -#define compressibleOmegaWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -class turbulenceModel; - -/*---------------------------------------------------------------------------*\ - Class omegaWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class omegaWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Tolerance used in weighted calculations - static scalar tolerance_; - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- beta1 coefficient - scalar beta1_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - //- Local copy of turbulence G field - scalarField G_; - - //- Local copy of turbulence omega field - scalarField omega_; - - //- Initialised flag - bool initialised_; - - //- Master patch ID - label master_; - - //- List of averaging corner weights - List<List<scalar> > cornerWeights_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Set the master patch - master is responsible for updating all - // wall function patches - virtual void setMaster(); - - //- Create the averaging weights for cells which are bounded by - // multiple wall function faces - virtual void createAveragingWeights(); - - //- Helper function to return non-const access to an omega patch - virtual omegaWallFunctionFvPatchScalarField& omegaPatch - ( - const label patchI - ); - - //- Main driver to calculate the turbulence fields - virtual void calculateTurbulenceFields - ( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& omega0 - ); - - //- Calculate the omega and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& omega - ); - - //- Return non-const access to the master patch ID - virtual label& master() - { - return master_; - } - - -public: - - //- Runtime type information - TypeName("compressible::omegaWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - omegaWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - omegaWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // omegaWallFunctionFvPatchScalarField - // onto a new patch - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new omegaWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new omegaWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Access - - //- Return non-const access to the master's G field - scalarField& G(bool init = false); - - //- Return non-const access to the master's omega field - scalarField& omega(bool init = false); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(const scalarField& weights); - - //- Manipulate matrix - virtual void manipulateMatrix(fvMatrix<scalar>& matrix); - - //- Manipulate matrix with given weights - virtual void manipulateMatrix - ( - fvMatrix<scalar>& matrix, - const scalarField& weights - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C deleted file mode 100644 index 6759772f177..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,254 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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 "v2WallFunctionFvPatchScalarField.H" -#include "RASModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void v2WallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("v2WallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void v2WallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -scalar v2WallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField -( - const v2WallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} - - -v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField -( - const v2WallFunctionFvPatchScalarField& v2wfpsf -) -: - fixedValueFvPatchField<scalar>(v2wfpsf), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} - - -v2WallFunctionFvPatchScalarField::v2WallFunctionFvPatchScalarField -( - const v2WallFunctionFvPatchScalarField& v2wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(v2wfpsf, iF), - Cmu_(v2wfpsf.Cmu_), - kappa_(v2wfpsf.kappa_), - E_(v2wfpsf.E_), - yPlusLam_(v2wfpsf.yPlusLam_) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void v2WallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbulence.y()[patchI]; - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tmu = turbulence.mu(); - const scalarField& muw = tmu().boundaryField()[patchI]; - - const scalarField& rhow = turbulence.rho().boundaryField()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - scalarField& v2 = *this; - - // Set v2 wall values - forAll(v2, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uTau = Cmu25*sqrt(k[faceCellI]); - - scalar yPlus = uTau*y[faceI]/(muw[faceI]/rhow[faceI]); - - if (yPlus > yPlusLam_) - { - scalar Cv2 = 0.193; - scalar Bv2 = -0.94; - v2[faceI] = Cv2/kappa_*log(yPlus) + Bv2; - } - else - { - scalar Cv2 = 0.193; - v2[faceI] = Cv2*pow4(yPlus); - } - - v2[faceI] *= sqr(uTau); - } - - fixedValueFvPatchField<scalar>::updateCoeffs(); - - // TODO: perform averaging for cells sharing more than one boundary face -} - - -void v2WallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField<scalar>::evaluate(commsType); -} - - -void v2WallFunctionFvPatchScalarField::write(Ostream& os) const -{ - writeLocalEntries(os); - fixedValueFvPatchField<scalar>::write(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - v2WallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H b/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H deleted file mode 100644 index dc64df9345e..00000000000 --- a/src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/v2WallFunctions/v2WallFunction/v2WallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,211 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2014 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::compressible::RASModels::v2WallFunctionFvPatchScalarField - -Group - grpCmpWallFunctions - -Description - This boundary condition provides a turbulence stress normal to streamlines - wall function condition for low- and high-Reynolds number, turbulent flow - cases. - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type v2WallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - v2WallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef v2WallFunctionFvPatchScalarField_H -#define v2WallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class v2WallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class v2WallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - -public: - - //- Runtime type information - TypeName("compressible::v2WallFunction"); - - - // Constructors - - //- Construct from patch and internal field - v2WallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - v2WallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given v2WallFunctionFvPatchScalarField - // onto a new patch - v2WallFunctionFvPatchScalarField - ( - const v2WallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - v2WallFunctionFvPatchScalarField - ( - const v2WallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new v2WallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - v2WallFunctionFvPatchScalarField - ( - const v2WallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new v2WallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.C b/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.C deleted file mode 100644 index a4089610ce3..00000000000 --- a/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.C +++ /dev/null @@ -1,344 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "kEpsilon.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(kEpsilon, 0); -addToRunTimeSelectionTable(RASModel, kEpsilon, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kEpsilon::kEpsilon -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - C3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C3", - coeffDict_, - -0.33 - ) - ), - sigmak_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmak", - coeffDict_, - 1.0 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = Cmu_*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> kEpsilon::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kEpsilon::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kEpsilon::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool kEpsilon::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - C3_.readIfPresent(coeffDict()); - sigmak_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void kEpsilon::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField G(GName(), mut_*(tgradU() && dev(twoSymm(tgradU())))); - tgradU.clear(); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*G*epsilon_/k_ - - fvm::SuSp(((2.0/3.0)*C1_ + C3_)*rho_*divU, epsilon_) - - fvm::Sp(C2_*rho_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::SuSp((2.0/3.0)*rho_*divU, k_) - - fvm::Sp(rho_*epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.H b/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.H deleted file mode 100644 index 70b5e85a9b6..00000000000 --- a/src/turbulenceModels/compressible/RAS/kEpsilon/kEpsilon.H +++ /dev/null @@ -1,200 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::compressible::RASModels::kEpsilon - -Group - grpCmpRASTurbulence - -Description - Standard k-epsilon turbulence model for compressible flows - including rapid distortion theory (RDT) based compression term. - - Reference: - \verbatim - "k-epsilon equations for compressible reciprocating engine flows" - El Tahry, S. H., - AIAA Journal of Energy 7, 1983, pp 345-353. - \endverbatim - - The default model coefficients correspond to the following: - \verbatim - kEpsilonCoeffs - { - Cmu 0.09; - C1 1.44; - C2 1.92; - C3 -0.33; // only for compressible - sigmak 1.0; // only for compressible - sigmaEps 1.3; - Prt 1.0; // only for compressible - } - \endverbatim - -SourceFiles - kEpsilon.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressiblekEpsilon_H -#define compressiblekEpsilon_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class kEpsilon Declaration -\*---------------------------------------------------------------------------*/ - -class kEpsilon -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar C3_; - dimensionedScalar sigmak_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - - // Fields - - volScalarField k_; - volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; - - -public: - - //- Runtime type information - TypeName("kEpsilon"); - - // Constructors - - //- Construct from components - kEpsilon - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~kEpsilon() - {} - - - // Member Functions - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", mut_/sigmak_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C deleted file mode 100644 index 0f74e653925..00000000000 --- a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.C +++ /dev/null @@ -1,511 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "kOmegaSST.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(kOmegaSST, 0); -addToRunTimeSelectionTable(RASModel, kOmegaSST, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> kOmegaSST::F1(const volScalarField& CDkOmega) const -{ - tmp<volScalarField> CDkOmegaPlus = max - ( - CDkOmega, - dimensionedScalar("1.0e-10", dimless/sqr(dimTime), 1.0e-10) - ); - - tmp<volScalarField> arg1 = min - ( - min - ( - max - ( - (scalar(1)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*(mu()/rho_)/(sqr(y_)*omega_) - ), - (4*alphaOmega2_)*k_/(CDkOmegaPlus*sqr(y_)) - ), - scalar(10) - ); - - return tanh(pow4(arg1)); -} - -tmp<volScalarField> kOmegaSST::F2() const -{ - tmp<volScalarField> arg2 = min - ( - max - ( - (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*(mu()/rho_)/(sqr(y_)*omega_) - ), - scalar(100) - ); - - return tanh(sqr(arg2)); -} - - -tmp<volScalarField> kOmegaSST::F3() const -{ - tmp<volScalarField> arg3 = min - ( - 150*(mu()/rho_)/(omega_*sqr(y_)), - scalar(10) - ); - - return 1 - tanh(pow4(arg3)); -} - - -tmp<volScalarField> kOmegaSST::F23() const -{ - tmp<volScalarField> f23(F2()); - - if (F3_) - { - f23() *= F3(); - } - - return f23; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kOmegaSST::kOmegaSST -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - alphaK1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK1", - coeffDict_, - 0.85 - ) - ), - alphaK2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK2", - coeffDict_, - 1.0 - ) - ), - alphaOmega1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega1", - coeffDict_, - 0.5 - ) - ), - alphaOmega2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega2", - coeffDict_, - 0.856 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - gamma1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma1", - coeffDict_, - 5.0/9.0 - ) - ), - gamma2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma2", - coeffDict_, - 0.44 - ) - ), - beta1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta1", - coeffDict_, - 0.075 - ) - ), - beta2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta2", - coeffDict_, - 0.0828 - ) - ), - betaStar_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "betaStar", - coeffDict_, - 0.09 - ) - ), - a1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "a1", - coeffDict_, - 0.31 - ) - ), - b1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "b1", - coeffDict_, - 1.0 - ) - ), - c1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "c1", - coeffDict_, - 10.0 - ) - ), - F3_ - ( - Switch::lookupOrAddToDict - ( - "F3", - coeffDict_, - false - ) - ), - - y_(wallDist::New(mesh_).y()), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - omega_ - ( - IOobject - ( - "omega", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateOmega("omega", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - bound(k_, kMin_); - bound(omega_, omegaMin_); - - mut_ = - ( - a1_*rho_*k_ - / max - ( - a1_*omega_, - b1_*F23()*sqrt(2.0)*mag(symm(fvc::grad(U_))) - ) - ); - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> kOmegaSST::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kOmegaSST::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kOmegaSST::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool kOmegaSST::read() -{ - if (RASModel::read()) - { - alphaK1_.readIfPresent(coeffDict()); - alphaK2_.readIfPresent(coeffDict()); - alphaOmega1_.readIfPresent(coeffDict()); - alphaOmega2_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - gamma1_.readIfPresent(coeffDict()); - gamma2_.readIfPresent(coeffDict()); - beta1_.readIfPresent(coeffDict()); - beta2_.readIfPresent(coeffDict()); - betaStar_.readIfPresent(coeffDict()); - a1_.readIfPresent(coeffDict()); - b1_.readIfPresent(coeffDict()); - c1_.readIfPresent(coeffDict()); - F3_.readIfPresent("F3", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void kOmegaSST::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = - a1_*rho_*k_ - /max(a1_*omega_, F23()*sqrt(2.0)*mag(symm(fvc::grad(U_)))); - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - tmp<volTensorField> tgradU = fvc::grad(U_); - volScalarField S2(2*magSqr(symm(tgradU()))); - volScalarField GbyMu((tgradU() && dev(twoSymm(tgradU())))); - volScalarField G(GName(), mut_*GbyMu); - tgradU.clear(); - - // Update omega and G at the wall - omega_.boundaryField().updateCoeffs(); - - volScalarField CDkOmega - ( - (2*alphaOmega2_)*(fvc::grad(k_) & fvc::grad(omega_))/omega_ - ); - - volScalarField F1(this->F1(CDkOmega)); - volScalarField rhoGammaF1(rho_*gamma(F1)); - - // Turbulent frequency equation - tmp<fvScalarMatrix> omegaEqn - ( - fvm::ddt(rho_, omega_) - + fvm::div(phi_, omega_) - - fvm::laplacian(DomegaEff(F1), omega_) - == - rhoGammaF1 - *min - ( - GbyMu, - (c1_/a1_)*betaStar_*omega_*max(a1_*omega_, b1_*F23()*sqrt(S2)) - ) - - fvm::SuSp((2.0/3.0)*rhoGammaF1*divU, omega_) - - fvm::Sp(rho_*beta(F1)*omega_, omega_) - - fvm::SuSp - ( - rho_*(F1 - scalar(1))*CDkOmega/omega_, - omega_ - ) - ); - - omegaEqn().relax(); - - omegaEqn().boundaryManipulate(omega_.boundaryField()); - - solve(omegaEqn); - bound(omega_, omegaMin_); - - // Turbulent kinetic energy equation - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(F1), k_) - == - min(G, (c1_*betaStar_)*rho_*k_*omega_) - - fvm::SuSp(2.0/3.0*rho_*divU, k_) - - fvm::Sp(rho_*betaStar_*omega_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - mut_ = a1_*rho_*k_/max(a1_*omega_, b1_*F23()*sqrt(S2)); - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.H b/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.H deleted file mode 100644 index f17484e97b3..00000000000 --- a/src/turbulenceModels/compressible/RAS/kOmegaSST/kOmegaSST.H +++ /dev/null @@ -1,316 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::compressible::RASModels::kOmegaSST - -Group - grpCmpRASTurbulence - -Description - Implementation of the k-omega-SST turbulence model for compressible flows. - - Turbulence model described in - \verbatim - Menter, F., Esch, T., - "Elements of Industrial Heat Transfer Prediction", - 16th Brazilian Congress of Mechanical Engineering (COBEM), - Nov. 2001. - \endverbatim - - with updated coefficients from - \verbatim - Menter, F. R., Kuntz, M., and Langtry, R., - "Ten Years of Industrial Experience with the SST Turbulence Model", - Turbulence, Heat and Mass Transfer 4, 2003, - pp. 625 - 632. - \endverbatim - - but with the consistent production terms from the 2001 paper as form in the - 2003 paper is a typo, see - \verbatim - http://turbmodels.larc.nasa.gov/sst.html - \endverbatim - - and the addition of the optional F3 term for rough walls from - \verbatim - Hellsten, A. - "Some Improvements in Menter’s k-omega-SST turbulence model" - 29th AIAA Fluid Dynamics Conference, - AIAA-98-2554, - June 1998. - \endverbatim - - Note that this implementation is written in terms of alpha diffusion - coefficients rather than the more traditional sigma (alpha = 1/sigma) so - that the blending can be applied to all coefficuients in a consistent - manner. The paper suggests that sigma is blended but this would not be - consistent with the blending of the k-epsilon and k-omega models. - - Also note that the error in the last term of equation (2) relating to - sigma has been corrected. - - The default model coefficients correspond to the following: - \verbatim - kOmegaSSTCoeffs - { - alphaK1 0.85; - alphaK2 1.0; - alphaOmega1 0.5; - alphaOmega2 0.856; - beta1 0.075; - beta2 0.0828; - betaStar 0.09; - gamma1 5/9; - gamma2 0.44; - a1 0.31; - b1 1.0; - c1 10.0; - F3 no; - Prt 1.0; - } - \endverbatim - -SourceFiles - kOmegaSST.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressiblekOmegaSST_H -#define compressiblekOmegaSST_H - -#include "RASModel.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class kOmegaSST Declaration -\*---------------------------------------------------------------------------*/ - -class kOmegaSST -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar alphaK1_; - dimensionedScalar alphaK2_; - - dimensionedScalar alphaOmega1_; - dimensionedScalar alphaOmega2_; - - dimensionedScalar Prt_; - - dimensionedScalar gamma1_; - dimensionedScalar gamma2_; - - dimensionedScalar beta1_; - dimensionedScalar beta2_; - - dimensionedScalar betaStar_; - - dimensionedScalar a1_; - dimensionedScalar b1_; - dimensionedScalar c1_; - - Switch F3_; - - - // Fields - - //- Wall distance - // Note: different to wall distance in parent RASModel - // which is for near-wall cells only - const volScalarField& y_; - - volScalarField k_; - volScalarField omega_; - volScalarField mut_; - volScalarField alphat_; - - - // Private Member Functions - - tmp<volScalarField> F1(const volScalarField& CDkOmega) const; - tmp<volScalarField> F2() const; - tmp<volScalarField> F3() const; - tmp<volScalarField> F23() const; - - tmp<volScalarField> blend - ( - const volScalarField& F1, - const dimensionedScalar& psi1, - const dimensionedScalar& psi2 - ) const - { - return F1*(psi1 - psi2) + psi2; - } - - tmp<volScalarField> alphaK(const volScalarField& F1) const - { - return blend(F1, alphaK1_, alphaK2_); - } - - tmp<volScalarField> alphaOmega(const volScalarField& F1) const - { - return blend(F1, alphaOmega1_, alphaOmega2_); - } - - tmp<volScalarField> beta(const volScalarField& F1) const - { - return blend(F1, beta1_, beta2_); - } - - tmp<volScalarField> gamma(const volScalarField& F1) const - { - return blend(F1, gamma1_, gamma2_); - } - - -public: - - //- Runtime type information - TypeName("kOmegaSST"); - - - // Constructors - - //- Construct from components - kOmegaSST - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~kOmegaSST() - {} - - - // Member Functions - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", alphaK(F1)*mut_ + mu()) - ); - } - - //- Return the effective diffusivity for omega - tmp<volScalarField> DomegaEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DomegaEff", alphaOmega(F1)*mut_ + mu()) - ); - } - - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - virtual tmp<volScalarField> omega() const - { - return omega_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - mesh_.time().timeName(), - mesh_ - ), - betaStar_*k_*omega_, - omega_.boundaryField().types() - ) - ); - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/laminar/laminar.C b/src/turbulenceModels/compressible/RAS/laminar/laminar.C deleted file mode 100644 index aa3200ee856..00000000000 --- a/src/turbulenceModels/compressible/RAS/laminar/laminar.C +++ /dev/null @@ -1,218 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "laminar.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(laminar, 0); -addToRunTimeSelectionTable(RASModel, laminar, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -laminar::laminar -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> laminar::mut() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("mut", mu().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::alphat() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("alphat", alpha().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::k() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("k", sqr(U_.dimensions()), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::epsilon() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar - ( - "epsilon", sqr(U_.dimensions())/dimTime, 0.0 - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedSymmTensor - ( - "R", sqr(U_.dimensions()), symmTensor::zero - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -mu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool laminar::read() -{ - return RASModel::read(); -} - - -void laminar::correct() -{} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/laminar/laminar.H b/src/turbulenceModels/compressible/RAS/laminar/laminar.H deleted file mode 100644 index 0b099d01aa7..00000000000 --- a/src/turbulenceModels/compressible/RAS/laminar/laminar.H +++ /dev/null @@ -1,140 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::RASModels::laminar - -Group - grpCmpRASTurbulence - -Description - Dummy turbulence model for laminar compressible flow. - -SourceFiles - laminar.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleRasLaminar_H -#define compressibleRasLaminar_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class laminar Declaration -\*---------------------------------------------------------------------------*/ - -class laminar -: - public RASModel -{ - -public: - - //- Runtime type information - TypeName("laminar"); - - // Constructors - - //- Construct from components - laminar - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~laminar() - {} - - - // Member Functions - - //- Return the turbulence viscosity, i.e. 0 for laminar flow - virtual tmp<volScalarField> mut() const; - - //- Return the effective viscosity, i.e. the laminar viscosity - virtual tmp<volScalarField> muEff() const - { - return tmp<volScalarField>(new volScalarField("muEff", mu())); - } - - //- Return the turbulence thermal diffusivity, i.e. 0 for laminar flow - virtual tmp<volScalarField> alphat() const; - - //- Return the effective turbulent thermal diffusivity, - // i.e. the laminar thermal diffusivity - virtual tmp<volScalarField> alphaEff() const - { - return tmp<volScalarField>(new volScalarField("alphaEff", alpha())); - } - - //- Return the turbulence kinetic energy, i.e. 0 for laminar flow - virtual tmp<volScalarField> k() const; - - //- Return the turbulence kinetic energy dissipation rate, - // i.e. 0 for laminar flow - virtual tmp<volScalarField> epsilon() const; - - //- Return the Reynolds stress tensor, i.e. 0 for laminar flow - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor, i.e. the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Correct the laminar viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.C b/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.C deleted file mode 100644 index c9b5c36742c..00000000000 --- a/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.C +++ /dev/null @@ -1,384 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "realizableKE.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(realizableKE, 0); -addToRunTimeSelectionTable(RASModel, realizableKE, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> realizableKE::rCmu -( - const volTensorField& gradU, - const volScalarField& S2, - const volScalarField& magS -) -{ - tmp<volSymmTensorField> tS = dev(symm(gradU)); - const volSymmTensorField& S = tS(); - - volScalarField W - ( - (2*sqrt(2.0))*((S&S)&&S) - /( - magS*S2 - + dimensionedScalar("small", dimensionSet(0, 0, -3, 0, 0), SMALL) - ) - ); - - tS.clear(); - - volScalarField phis - ( - (1.0/3.0)*acos(min(max(sqrt(6.0)*W, -scalar(1)), scalar(1))) - ); - volScalarField As(sqrt(6.0)*cos(phis)); - volScalarField Us(sqrt(S2/2.0 + magSqr(skew(gradU)))); - - return 1.0/(A0_ + As*Us*k_/epsilon_); -} - - -tmp<volScalarField> realizableKE::rCmu -( - const volTensorField& gradU -) -{ - volScalarField S2(2*magSqr(dev(symm(gradU)))); - volScalarField magS(sqrt(S2)); - return rCmu(gradU, S2, magS); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -realizableKE::realizableKE -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - A0_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "A0", - coeffDict_, - 4.0 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.9 - ) - ), - sigmak_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmak", - coeffDict_, - 1.0 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.2 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateMut("mut", mesh_) - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateAlphat("alphat", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - mut_ = rCmu(fvc::grad(U_))*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> realizableKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> realizableKE::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> realizableKE::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool realizableKE::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - A0_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - sigmak_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - Prt_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void realizableKE::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rCmu(fvc::grad(U_))*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - volTensorField gradU(fvc::grad(U_)); - volScalarField S2(2*magSqr(dev(symm(gradU)))); - volScalarField magS(sqrt(S2)); - - volScalarField eta(magS*k_/epsilon_); - volScalarField C1(max(eta/(scalar(5) + eta), scalar(0.43))); - - volScalarField G(GName(), mut_*(gradU && dev(twoSymm(gradU)))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1*rho_*magS*epsilon_ - - fvm::Sp - ( - C2_*rho_*epsilon_/(k_ + sqrt((mu()/rho_)*epsilon_)), - epsilon_ - ) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - fvm::SuSp(2.0/3.0*rho_*divU, k_) - - fvm::Sp(rho_*epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - // Re-calculate viscosity - mut_ = rCmu(gradU, S2, magS)*rho_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.H b/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.H deleted file mode 100644 index c417fa5c434..00000000000 --- a/src/turbulenceModels/compressible/RAS/realizableKE/realizableKE.H +++ /dev/null @@ -1,214 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::RASModels::realizableKE - -Group - grpCmpRASTurbulence - -Description - Realizable k-epsilon turbulence model for compressible flows. - - Model described in the paper: - \verbatim - "A New k-epsilon Eddy Viscosity Model for High Reynolds Number - Turbulent Flows" - - Tsan-Hsing Shih, William W. Liou, Aamir Shabbir, Zhigang Tang and - Jiang Zhu - - Computers and Fluids Vol. 24, No. 3, pp. 227-238, 1995 - \endverbatim - - The default model coefficients correspond to the following: - \verbatim - realizableKECoeffs - { - Cmu 0.09; - A0 4.0; - C2 1.9; - sigmak 1.0; - sigmaEps 1.2; - Prt 1.0; // only for compressible - } - \endverbatim - -SourceFiles - realizableKE.C - -\*---------------------------------------------------------------------------*/ - -#ifndef realizableKE_H -#define realizableKE_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class realizableKE Declaration -\*---------------------------------------------------------------------------*/ - -class realizableKE -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar A0_; - dimensionedScalar C2_; - dimensionedScalar sigmak_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - - - // Fields - - volScalarField k_; - volScalarField epsilon_; - volScalarField mut_; - volScalarField alphat_; - - - // Protected Member Functions - - tmp<volScalarField> rCmu - ( - const volTensorField& gradU, - const volScalarField& S2, - const volScalarField& magS - ); - - tmp<volScalarField> rCmu(const volTensorField& gradU); - - -public: - - //- Runtime type information - TypeName("realizableKE"); - - // Constructors - - //- Construct from components - realizableKE - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~realizableKE() - {} - - - // Member Functions - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", mut_/sigmak_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/v2f/v2f.C b/src/turbulenceModels/compressible/RAS/v2f/v2f.C deleted file mode 100644 index ec0c37363dd..00000000000 --- a/src/turbulenceModels/compressible/RAS/v2f/v2f.C +++ /dev/null @@ -1,493 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -\*---------------------------------------------------------------------------*/ - -#include "v2f.H" -#include "fixedValueFvPatchField.H" -#include "zeroGradientFvPatchField.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(v2f, 0); -addToRunTimeSelectionTable(RASModel, v2f, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -wordList v2f::RBoundaryTypes() const -{ - const volScalarField::GeometricBoundaryField& bf(k_.boundaryField()); - - wordList bTypes - ( - bf.size(), - zeroGradientFvPatchField<symmTensor>::typeName - ); - - forAll(bf, patchI) - { - if (bf[patchI].fixesValue()) - { - bTypes[patchI] = fixedValueFvPatchField<symmTensor>::typeName; - } - } - - return bTypes; -} - - -tmp<volScalarField> v2f::davidsonCorrectNut -( - const tmp<volScalarField>& value -) const -{ - return min(CmuKEps_*sqr(k_)/epsilon_, value); -} - - -tmp<volScalarField> v2f::Ts() const -{ - return max(k_/epsilon_, 6.0*sqrt(mu()/rho_/epsilon_)); -} - - -tmp<volScalarField> v2f::Ls() const -{ - return - CL_*max(pow(k_, 1.5)/epsilon_, Ceta_*pow025(pow3(mu()/rho_)/epsilon_)); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -v2f::v2f -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, rho, U, phi, thermophysicalModel, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.22 - ) - ), - CmuKEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "CmuKEps", - coeffDict_, - 0.09 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.4 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 0.3 - ) - ), - CL_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "CL", - coeffDict_, - 0.23 - ) - ), - Ceta_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceta", - coeffDict_, - 70.0 - ) - ), - Ceps2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps2", - coeffDict_, - 1.9 - ) - ), - Ceps3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps3", - coeffDict_, - -0.33 - ) - ), - sigmaK_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaK", - coeffDict_, - 1.0 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - Prt_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Prt", - coeffDict_, - 1.0 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - v2_ - ( - IOobject - ( - "v2", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - f_ - ( - IOobject - ( - "f", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - mut_ - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - alphat_ - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - v2Min_(dimensionedScalar("v2Min", v2_.dimensions(), SMALL)), - fMin_(dimensionedScalar("fMin", f_.dimensions(), 0.0)) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - bound(v2_, v2Min_); - bound(f_, fMin_); - - mut_ = rho_*davidsonCorrectNut(Cmu_*v2_*Ts()); - mut_.correctBoundaryConditions(); - - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> v2f::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - (mut_/rho_)*dev(twoSymm(fvc::grad(U_))), - RBoundaryTypes() - ) - ); -} - - -tmp<volSymmTensorField> v2f::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -muEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> v2f::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -bool v2f::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - CmuKEps_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - CL_.readIfPresent(coeffDict()); - Ceta_.readIfPresent(coeffDict()); - Ceps2_.readIfPresent(coeffDict()); - sigmaK_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void v2f::correct() -{ - if (!turbulence_) - { - // Re-calculate viscosity - mut_ = rho_*Cmu_*sqr(k_)/epsilon_; - mut_.correctBoundaryConditions(); - - // Re-calculate thermal diffusivity - alphat_ = mut_/Prt_; - alphat_.correctBoundaryConditions(); - - return; - } - - RASModel::correct(); - - volScalarField divU(fvc::div(phi_/fvc::interpolate(rho_))); - - if (mesh_.moving()) - { - divU += fvc::div(mesh_.phi()); - } - - // use N=6 so that f=0 at walls - const dimensionedScalar N("N", dimless, 6.0); - - const volTensorField gradU(fvc::grad(U_)); - const volScalarField S2(2*magSqr(dev(symm(gradU)))); - - const volScalarField G(GName(), mut_*S2); - const volScalarField T(Ts()); - const volScalarField L2("v2f.L2", sqr(Ls())); - const volScalarField alpha - ( - "v2f::alpha", - 1.0/T*((C1_ - N)*v2_ - 2.0/3.0*k_*(C1_ - 1.0)) - ); - const volScalarField Ceps1 - ( - "Ceps1", - 1.4*(1.0 + 0.05*min(sqrt(k_/v2_), scalar(100.0))) - ); - - // Update epsilon (and possibly G) at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(rho_, epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - Ceps1*G/T - - fvm::SuSp(((2.0/3.0)*Ceps1 + Ceps3_)*rho_*divU, epsilon_) - - fvm::Sp(Ceps2_*rho_/T, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - // Turbulent kinetic energy equation - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(rho_, k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::SuSp((2.0/3.0)*rho_*divU, k_) - - fvm::Sp(rho_*epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - // Relaxation function equation - tmp<fvScalarMatrix> fEqn - ( - - fvm::laplacian(rho_, f_) - == - - fvm::Sp(rho_/L2, f_) - - 1.0/L2/k_*(rho_*alpha - C2_*G) - ); - - fEqn().relax(); - solve(fEqn); - bound(f_, fMin_); - - // Turbulence stress normal to streamlines equation - tmp<fvScalarMatrix> v2Eqn - ( - fvm::ddt(rho_, v2_) - + fvm::div(phi_, v2_) - - fvm::laplacian(DkEff(), v2_) - == - min(rho_*k_*f_, -rho_*alpha + C2_*G) - - fvm::Sp(rho_*N*epsilon_/k_, v2_) - ); - - v2Eqn().relax(); - solve(v2Eqn); - bound(v2_, v2Min_); - - // Re-calculate viscosity - mut_ = rho_*davidsonCorrectNut(Cmu_*v2_*T); - mut_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/RAS/v2f/v2f.H b/src/turbulenceModels/compressible/RAS/v2f/v2f.H deleted file mode 100644 index ce53c248b8c..00000000000 --- a/src/turbulenceModels/compressible/RAS/v2f/v2f.H +++ /dev/null @@ -1,288 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Class - Foam::compressible::RASModels::v2f - -Group - grpCmpRASTurbulence - -Description - Lien and Kalitzin's v2-f turbulence model for incompressible flows, with - a limit imposed on the turbulent viscosity given by Davidson et al. - - The model solves for turbulence k and epsilon, with additional equations - for the turbulence stress normal to streamlines, v2, and elliptic damping - function, f. The variant implemented employs N=6, such that f=0 on walls. - - Wall boundary conditions are: - - k = kLowReWallFunction - epsilon = epsilonLowReWallFunction - v2 = v2WallFunction - f = fWallFunction - - These are applicable to both low- and high-Reynolds number flows. - - Inlet values can be approximated by: - - v2 = 2/3 k - f = zero-gradient - - - References: - - Lien F-S, Kalitzin G, 2001. Computations of transonic flow with the v2-f - turbulence model. Int. J. Heat Fluid Flow 22, pp 53-61 - - Davidson L, Nielsen P, Sveningsson A, 2003. Modifications of the v2-f - model for computing the flow in a 3D wall jet. Turbulence, Heat and Mass - Transfer 4, pp 577-584 - - The default model coefficients are given as: - \verbatim - v2fCoeffs - { - Cmu 0.22; - CmuKEps 0.09; - C1 1.4; - C2 0.3; - CL 0.23; - Ceta 70; - Ceps2 1.9; - sigmaEps 1.3; - sigmaK 1; - } - \endverbatim - -Note - If the kLowReWallFunction is employed, a velocity variant of the turbulent - viscosity wall function should be used, e.g. nutUWallFunction. Turbulence - k variants (nutk...) for this case will not behave correctly. - -SeeAlso - Foam::kEpsilon - Foam::kLowReWallFunctionFvPatchScalarField - Foam::epsilonLowReWallFunctionFvPatchScalarField - Foam::v2WallFunctionFvPatchScalarField - Foam::fWallFunctionFvPatchScalarField - -SourceFiles - v2f.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressiblev2f_H -#define compressiblev2f_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class v2f Declaration -\*---------------------------------------------------------------------------*/ - -class v2f -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar CmuKEps_; - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar CL_; - dimensionedScalar Ceta_; - dimensionedScalar Ceps2_; - dimensionedScalar Ceps3_; - dimensionedScalar sigmaK_; - dimensionedScalar sigmaEps_; - dimensionedScalar Prt_; - - // Fields - - //- Turbulence kinetic energy - volScalarField k_; - - //- Turbulence dissipation - volScalarField epsilon_; - - //- Turbulence stress normal to streamlines - volScalarField v2_; - - //- Damping function - volScalarField f_; - - //- Turbulence viscosity - volScalarField mut_; - - //- Turbulence thermal diffusivity - volScalarField alphat_; - - - // Bounding values - - dimensionedScalar v2Min_; - dimensionedScalar fMin_; - - - // Protected Member Functions - - //- Return boundary type names for the R field - wordList RBoundaryTypes() const; - - //- Apply Davidson correction to nut - tmp<volScalarField> davidsonCorrectNut - ( - const tmp<volScalarField>& value - ) const; - - //- Return time scale, Ts - tmp<volScalarField> Ts() const; - - //- Return length scale, Ls - tmp<volScalarField> Ls() const; - - -public: - - //- Runtime type information - TypeName("v2f"); - - // Constructors - - //- Construct from components - v2f - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~v2f() - {} - - - // Member Functions - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", mut_/sigmaK_ + mu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu()) - ); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const - { - return mut_; - } - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const - { - return alphat_; - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return turbulence stress normal to streamlines - virtual tmp<volScalarField> v2() const - { - return v2_; - } - - //- Return the damping function - virtual tmp<volScalarField> f() const - { - return f_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/turbulenceModel/Make/files b/src/turbulenceModels/compressible/turbulenceModel/Make/files deleted file mode 100644 index 412045016a7..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/Make/files +++ /dev/null @@ -1,15 +0,0 @@ -turbulenceModel.C -laminar/laminar.C - -derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C -derivedFvPatchFields/temperatureCoupledBase/temperatureCoupledBase.C -derivedFvPatchFields/turbulentTemperatureCoupledBaffleMixed/turbulentTemperatureCoupledBaffleMixedFvPatchScalarField.C -derivedFvPatchFields/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C -derivedFvPatchFields/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C -derivedFvPatchFields/turbulentTemperatureRadCoupledMixed/turbulentTemperatureRadCoupledMixedFvPatchScalarField.C -derivedFvPatchFields/externalWallHeatFluxTemperature/externalWallHeatFluxTemperatureFvPatchScalarField.C -derivedFvPatchFields/wallHeatTransfer/wallHeatTransferFvPatchScalarField.C - -derivedFvPatchFields/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C - -LIB = $(FOAM_LIBBIN)/libcompressibleTurbulenceModel diff --git a/src/turbulenceModels/compressible/turbulenceModel/Make/options b/src/turbulenceModels/compressible/turbulenceModel/Make/options deleted file mode 100644 index 9b024f163da..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/Make/options +++ /dev/null @@ -1,17 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude - -LIB_LIBS = \ - -lsolidThermo \ - -lfluidThermophysicalModels \ - -lspecie \ - -lfiniteVolume \ - -lmeshTools \ - -lsolidSpecie \ - -lradiationModels diff --git a/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.C b/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.C deleted file mode 100644 index a7188c5eebd..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.C +++ /dev/null @@ -1,246 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "laminar.H" -#include "Time.H" -#include "volFields.H" -#include "fvcGrad.H" -#include "fvcDiv.H" -#include "fvmLaplacian.H" -#include "addToRunTimeSelectionTable.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(laminar, 0); -addToRunTimeSelectionTable(turbulenceModel, laminar, turbulenceModel); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -laminar::laminar -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -: - turbulenceModel(rho, U, phi, thermophysicalModel, turbulenceModelName) -{} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<laminar> laminar::New -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -{ - return autoPtr<laminar> - ( - new laminar(rho, U, phi, thermophysicalModel, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -const dictionary& laminar::coeffDict() const -{ - return dictionary::null; -} - - -tmp<volScalarField> laminar::mut() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "mut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("mut", mu().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::alphat() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "alphat", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("alphat", alpha().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::k() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("k", sqr(U_.dimensions()), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::epsilon() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar - ( - "epsilon", sqr(U_.dimensions())/dimTime, 0.0 - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedSymmTensor - ( - "R", sqr(U_.dimensions()), symmTensor::zero - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::devRhoReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -mu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevRhoReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(muEff(), U) - - fvc::div(muEff()*dev2(T(fvc::grad(U)))) - ); -} - - -void laminar::correct() -{ - turbulenceModel::correct(); -} - - -bool laminar::read() -{ - return true; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.H b/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.H deleted file mode 100644 index b1de35154ec..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/laminar/laminar.H +++ /dev/null @@ -1,177 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::compressible::laminar - -Description - Turbulence model for laminar compressible flow. - -SourceFiles - laminar.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleLaminar_H -#define compressibleLaminar_H - -#include "turbulenceModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class laminar Declaration -\*---------------------------------------------------------------------------*/ - -class laminar -: - public turbulenceModel -{ - -public: - - //- Runtime type information - TypeName("laminar"); - - // Constructors - - //- Construct from components - laminar - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - // Selectors - - //- Return a reference to the selected turbulence model - static autoPtr<laminar> New - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - //- Destructor - virtual ~laminar() - {} - - - // Member Functions - - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const; - - //- Return the turbulence viscosity, i.e. 0 for laminar flow - virtual tmp<volScalarField> mut() const; - - //- Return the effective viscosity, i.e. the laminar viscosity - virtual tmp<volScalarField> muEff() const - { - return tmp<volScalarField>(new volScalarField("muEff", mu())); - } - - //- Return the turbulence thermal diffusivity, i.e. 0 for laminar flow - virtual tmp<volScalarField> alphat() const; - - //- Return the effective turbulent temperature diffusivity, - // i.e. the laminar thermal diffusivity - virtual tmp<volScalarField> kappaEff() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - "kappaEff", - thermo().kappa() - ) - ); - } - - //- Return the effective turbulent temperature diffusivity for a patch, - // i.e. the laminar thermal diffusivity - virtual tmp<scalarField> kappaEff(const label patchI) const - { - return thermo().kappa(patchI); - } - - //- Return the effective turbulent thermal diffusivity, - // i.e. the laminar thermal diffusivity - virtual tmp<volScalarField> alphaEff() const - { - return tmp<volScalarField>(new volScalarField("alphaEff", alpha())); - } - - //- Return the effective turbulent thermal diffusivity for a patch, - // i.e. the laminar thermal diffusivity - virtual tmp<scalarField> alphaEff(const label patchI) const - { - return alpha().boundaryField()[patchI]; - } - - //- Return the turbulence kinetic energy, i.e. 0 for laminar flow - virtual tmp<volScalarField> k() const; - - //- Return the turbulence kinetic energy dissipation rate, - // i.e. 0 for laminar flow - virtual tmp<volScalarField> epsilon() const; - - //- Return the Reynolds stress tensor, i.e. 0 for laminar flow - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor, i.e. the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const; - - //- Correct the laminar viscosity - virtual void correct(); - - //- Read turbulenceProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.C b/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.C deleted file mode 100644 index 455ff9a72d1..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.C +++ /dev/null @@ -1,155 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "turbulenceModel.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "fvcGrad.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace compressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(turbulenceModel, 0); -defineRunTimeSelectionTable(turbulenceModel, turbulenceModel); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulenceModel::turbulenceModel -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -: - regIOobject - ( - IOobject - ( - turbulenceModelName, - U.time().constant(), - U.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ) - ), - runTime_(U.time()), - mesh_(U.mesh()), - - rho_(rho), - U_(U), - phi_(phi), - thermophysicalModel_(thermophysicalModel), - - y_(mesh_) -{} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<turbulenceModel> turbulenceModel::New -( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermophysicalModel, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "turbulenceProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("simulationType") - ); - - Info<< "Selecting turbulence model type " << modelType << endl; - - turbulenceModelConstructorTable::iterator cstrIter = - turbulenceModelConstructorTablePtr_->find(modelType); - - if (cstrIter == turbulenceModelConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "turbulenceModel::New(const volScalarField&, " - "const volVectorField&, const surfaceScalarField&, " - "fluidThermo&, const word&)" - ) << "Unknown turbulenceModel type " - << modelType << nl << nl - << "Valid turbulenceModel types:" << endl - << turbulenceModelConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<turbulenceModel> - ( - cstrIter()(rho, U, phi, thermophysicalModel, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> turbulenceModel::rhoEpsilonEff() const -{ - tmp<volTensorField> tgradU = fvc::grad(U_); - return mu()*(tgradU() && dev(twoSymm(tgradU()))) + rho_*epsilon(); -} - - -void turbulenceModel::correct() -{ - if (mesh_.changing()) - { - y_.correct(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.H b/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.H deleted file mode 100644 index b7e9195c551..00000000000 --- a/src/turbulenceModels/compressible/turbulenceModel/turbulenceModel.H +++ /dev/null @@ -1,282 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Namespace - Foam::compressible::turbulenceModels - -Description - Namespace for compressible turbulence turbulence models. - - -Class - Foam::compressible::turbulenceModel - -Description - Abstract base class for compressible turbulence models - (RAS, LES and laminar). - - -SourceFiles - turbulenceModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef compressibleturbulenceModel_H -#define compressibleturbulenceModel_H - -#include "primitiveFieldsFwd.H" -#include "volFieldsFwd.H" -#include "surfaceFieldsFwd.H" -#include "fvMatricesFwd.H" -#include "fluidThermo.H" -#include "nearWallDist.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declarations -class fvMesh; - -namespace compressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulenceModel Declaration -\*---------------------------------------------------------------------------*/ - -class turbulenceModel -: - public regIOobject -{ - -protected: - - // Protected data - - const Time& runTime_; - const fvMesh& mesh_; - - const volScalarField& rho_; - const volVectorField& U_; - const surfaceScalarField& phi_; - - const fluidThermo& thermophysicalModel_; - - //- Near wall distance boundary field - nearWallDist y_; - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - turbulenceModel(const turbulenceModel&); - - //- Disallow default bitwise assignment - void operator=(const turbulenceModel&); - - -public: - - //- Runtime type information - TypeName("turbulenceModel"); - - - // Declare run-time constructor selection table - - declareRunTimeNewSelectionTable - ( - autoPtr, - turbulenceModel, - turbulenceModel, - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName - ), - (rho, U, phi, thermoPhysicalModel, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - turbulenceModel - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = typeName - ); - - - // Selectors - - //- Return a reference to the selected turbulence model - static autoPtr<turbulenceModel> New - ( - const volScalarField& rho, - const volVectorField& U, - const surfaceScalarField& phi, - const fluidThermo& thermoPhysicalModel, - const word& turbulenceModelName = typeName - ); - - - //- Destructor - virtual ~turbulenceModel() - {} - - - // Member Functions - - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const = 0; - - //- Helper function to return the nam eof the turbulence G field - inline word GName() const - { - return word(type() + ":G"); - } - - //- Access function to density field - const volScalarField& rho() const - { - return rho_; - } - - //- Access function to velocity field - const volVectorField& U() const - { - return U_; - } - - //- Access function to flux field - const surfaceScalarField& phi() const - { - return phi_; - } - - //- Access function to thermophysical model - const fluidThermo& thermo() const - { - return thermophysicalModel_; - } - - //- Return the near wall distances - const nearWallDist& y() const - { - return y_; - } - - //- Return the laminar viscosity - const volScalarField& mu() const - { - return thermophysicalModel_.mu(); - } - - //- Return the laminar thermal conductivity - const volScalarField& alpha() const - { - return thermophysicalModel_.alpha(); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> mut() const = 0; - - //- Return the effective viscosity - virtual tmp<volScalarField> muEff() const = 0; - - //- Return the turbulence thermal diffusivity - virtual tmp<volScalarField> alphat() const = 0; - - //- Return the turbulence thermal diffusivity for a patch - virtual tmp<scalarField> alphat(const label patchI) const - { - return alphat()().boundaryField()[patchI]; - } - - //- Return the effective turbulence temperature diffusivity - virtual tmp<volScalarField> kappaEff() const = 0; - - //- Return the effective turbulence temperature diffusivity for a patch - virtual tmp<scalarField> kappaEff(const label patchI) const = 0; - - //- Return the effective turbulence thermal diffusivity - virtual tmp<volScalarField> alphaEff() const = 0; - - //- Return the effective turbulence thermal diffusivity for a patch - virtual tmp<scalarField> alphaEff(const label patchI) const = 0; - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const = 0; - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const = 0; - - //- Return the laminar+turbulence kinetic energy dissipation rate - // Used as the viscous contribution to the energy equations - virtual tmp<volScalarField> rhoEpsilonEff() const; - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const = 0; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devRhoReff() const = 0; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff(volVectorField& U) const = 0; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct() = 0; - - //- Read LESProperties or RASProperties dictionary - virtual bool read() = 0; - - //- Default dummy write function - virtual bool writeData(Ostream&) const - { - return true; - } - -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace compressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/derivedFvPatchFields/Make/files b/src/turbulenceModels/derivedFvPatchFields/Make/files deleted file mode 100644 index f0a5fdfa8a4..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/Make/files +++ /dev/null @@ -1,4 +0,0 @@ -porousBafflePressure/porousBafflePressureFvPatchFields.C -fixedShearStress/fixedShearStressFvPatchVectorField.C - -LIB = $(FOAM_LIBBIN)/libturbulenceDerivedFvPatchFields diff --git a/src/turbulenceModels/derivedFvPatchFields/Make/options b/src/turbulenceModels/derivedFvPatchFields/Make/options deleted file mode 100644 index 66712d18ee2..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/Make/options +++ /dev/null @@ -1,16 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ - -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel - -LIB_LIBS = \ - -lfiniteVolume \ - -lfluidThermophysicalModels \ - -lspecie \ - -lmeshTools \ - -lcompressibleTurbulenceModel \ - -lincompressibleTurbulenceModel diff --git a/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C b/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C deleted file mode 100644 index 587ad9678d2..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.C +++ /dev/null @@ -1,186 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "fixedShearStressFvPatchVectorField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "compressible/turbulenceModel/turbulenceModel.H" - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::fixedShearStressFvPatchVectorField::fixedShearStressFvPatchVectorField -( - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF -) -: - fixedValueFvPatchVectorField(p, iF), - phiName_("phi"), - rhoName_("rho"), - tau0_(vector::zero) -{} - - -Foam::fixedShearStressFvPatchVectorField::fixedShearStressFvPatchVectorField -( - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchVectorField(p, iF), - phiName_(dict.lookupOrDefault<word>("phi", "phi")), - rhoName_(dict.lookupOrDefault<word>("rho", "rho")), - tau0_(dict.lookupOrDefault<vector>("tau", vector::zero)) -{ - fvPatchField<vector>::operator=(patchInternalField()); -} - - -Foam::fixedShearStressFvPatchVectorField::fixedShearStressFvPatchVectorField -( - const fixedShearStressFvPatchVectorField& ptf, - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchVectorField(ptf, p, iF, mapper), - phiName_(ptf.phiName_), - rhoName_(ptf.rhoName_), - tau0_(ptf.tau0_) -{} - - -Foam::fixedShearStressFvPatchVectorField::fixedShearStressFvPatchVectorField -( - const fixedShearStressFvPatchVectorField& ptf -) -: - fixedValueFvPatchVectorField(ptf), - phiName_(ptf.phiName_), - rhoName_(ptf.rhoName_), - tau0_(ptf.tau0_) -{} - - -Foam::fixedShearStressFvPatchVectorField::fixedShearStressFvPatchVectorField -( - const fixedShearStressFvPatchVectorField& ptf, - const DimensionedField<vector, volMesh>& iF -) -: - fixedValueFvPatchVectorField(ptf, iF), - phiName_(ptf.phiName_), - rhoName_(ptf.rhoName_), - tau0_(ptf.tau0_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::fixedShearStressFvPatchVectorField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const surfaceScalarField& phi = - db().lookupObject<surfaceScalarField>(phiName_); - - scalarField nuEff; - if (phi.dimensions() == dimVelocity*dimArea) - { - const incompressible::turbulenceModel& turbModel = - db().lookupObject<incompressible::turbulenceModel> - ( - "turbulenceModel" - ); - - nuEff = turbModel.nuEff()()[patchI]; - } - else if (phi.dimensions() == dimDensity*dimVelocity*dimArea) - { - const compressible::turbulenceModel& turbModel = - db().lookupObject<compressible::turbulenceModel> - ( - "turbulenceModel" - ); - - const fvPatchField<scalar>& rhop = - patch().lookupPatchField<volScalarField, scalar>(rhoName_); - - nuEff = turbModel.muEff()()[patchI]/rhop; - } - else - { - FatalErrorIn("fixedShearStressFvPatchVectorField::updateCoeffs()") - << "dimensions of phi are not correct" - << "\n on patch " << this->patch().name() - << " of field " << this->dimensionedInternalField().name() - << " in file " << this->dimensionedInternalField().objectPath() - << exit(FatalError); - } - - const vectorField Uc(patchInternalField()); - - vector tauHat = tau0_/(mag(tau0_) + ROOTVSMALL); - - const scalarField& ry = patch().deltaCoeffs(); - - operator==(tauHat*(tauHat & (tau0_*(1.0/(ry*nuEff)) + Uc))); - - fixedValueFvPatchVectorField::updateCoeffs(); -} - - -void Foam::fixedShearStressFvPatchVectorField::write(Ostream& os) const -{ - fixedValueFvPatchVectorField::write(os); - writeEntryIfDifferent<word>(os, "phi", "phi", phiName_); - writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_); - os.writeKeyword("tau") << tau0_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - makePatchTypeField - ( - fvPatchVectorField, - fixedShearStressFvPatchVectorField - ); -} - -// ************************************************************************* // diff --git a/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.H b/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.H deleted file mode 100644 index a399ff07eb2..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/fixedShearStress/fixedShearStressFvPatchVectorField.H +++ /dev/null @@ -1,154 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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::fixedShearStressFvPatchVectorField - -Group - grpWallBoundaryConditions - -Description - Set a constant shear stress as tau0 = -nuEff dU/dn. - -SourceFiles - fixedShearStressFvPatchVectorField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef fixedShearStressFvPatchVectorField_H -#define fixedShearStressFvPatchVectorField_H - -#include "fvPatchFields.H" -#include "fixedValueFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class fixedShearStressFvPatchVectorField Declaration -\*---------------------------------------------------------------------------*/ - -class fixedShearStressFvPatchVectorField -: - public fixedValueFvPatchVectorField -{ - // Private data - - //- Name of flux field (default = phi) - const word phiName_; - - //- Name of density field (default = rho) - const word rhoName_; - - //- Constant shear stress - const vector tau0_; - - -public: - - //- Runtime type information - TypeName("fixedShearStress"); - - - // Constructors - - //- Construct from patch and internal field - fixedShearStressFvPatchVectorField - ( - const fvPatch&, - const DimensionedField<vector, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - fixedShearStressFvPatchVectorField - ( - const fvPatch&, - const DimensionedField<vector, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - fixedShearStressFvPatchVectorField - ( - const fixedShearStressFvPatchVectorField&, - const fvPatch&, - const DimensionedField<vector, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - fixedShearStressFvPatchVectorField - ( - const fixedShearStressFvPatchVectorField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchVectorField> clone() const - { - return tmp<fvPatchVectorField> - ( - new fixedShearStressFvPatchVectorField(*this) - ); - } - - //- Construct as copy setting internal field reference - fixedShearStressFvPatchVectorField - ( - const fixedShearStressFvPatchVectorField&, - const DimensionedField<vector, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchVectorField> clone - ( - const DimensionedField<vector, volMesh>& iF - ) const - { - return tmp<fvPatchVectorField> - ( - new fixedShearStressFvPatchVectorField(*this, iF) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C b/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C deleted file mode 100644 index afd43395ba4..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.C +++ /dev/null @@ -1,121 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "porousBafflePressureFvPatchField.H" - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class Type> -Foam::porousBafflePressureFvPatchField<Type>::porousBafflePressureFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF -) -: - fixedJumpFvPatchField<Type>(p, iF), - D_(0), - I_(0), - length_(0) -{} - - -template<class Type> -Foam::porousBafflePressureFvPatchField<Type>::porousBafflePressureFvPatchField -( - const porousBafflePressureFvPatchField<Type>& ptf, - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedJumpFvPatchField<Type>(ptf, p, iF, mapper), - D_(ptf.D_), - I_(ptf.I_), - length_(ptf.length_) -{} - - -template<class Type> -Foam::porousBafflePressureFvPatchField<Type>::porousBafflePressureFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const dictionary& dict -) -: - fixedJumpFvPatchField<Type>(p, iF), - D_(readScalar(dict.lookup("D"))), - I_(readScalar(dict.lookup("I"))), - length_(readScalar(dict.lookup("length"))) -{ - fvPatchField<Type>::operator= - ( - Field<Type>("value", dict, p.size()) - ); -} - - -template<class Type> -Foam::porousBafflePressureFvPatchField<Type>::porousBafflePressureFvPatchField -( - const porousBafflePressureFvPatchField<Type>& ptf -) -: - cyclicLduInterfaceField(), - fixedJumpFvPatchField<Type>(ptf), - D_(ptf.D_), - I_(ptf.I_), - length_(ptf.length_) -{} - - -template<class Type> -Foam::porousBafflePressureFvPatchField<Type>::porousBafflePressureFvPatchField -( - const porousBafflePressureFvPatchField<Type>& ptf, - const DimensionedField<Type, volMesh>& iF -) -: - fixedJumpFvPatchField<Type>(ptf, iF), - D_(ptf.D_), - I_(ptf.I_), - length_(ptf.length_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - - -template<class Type> -void Foam::porousBafflePressureFvPatchField<Type>::write(Ostream& os) const -{ - fixedJumpFvPatchField<Type>::write(os); - os.writeKeyword("D") << D_ << token::END_STATEMENT << nl; - os.writeKeyword("I") << I_ << token::END_STATEMENT << nl; - os.writeKeyword("length") << length_ << token::END_STATEMENT << nl; -} - - -// ************************************************************************* // diff --git a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H b/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H deleted file mode 100644 index 520fe0985ec..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchField.H +++ /dev/null @@ -1,216 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::porousBafflePressureFvPatchField - -Group - grpCoupledBoundaryConditions - -Description - This boundary condition provides a jump condition, using the \c cyclic - condition as a base. - - The porous baffle introduces a pressure jump defined by: - - \f[ - \Delta p = -(D \mu U + 0.5 I \rho |U|^2 )L - \f] - - where - - \vartable - p | pressure [Pa] - \rho | density [kg/m3] - \mu | laminar viscosity [Pa s] - I | inertial coefficient - D | Darcy coefficient - L | porous media length in the flow direction - \endvartable - - - \heading Patch usage - - \table - Property | Description | Required | Default value - patchType | underlying patch type should be \c cyclic| yes | - D | Darcy coefficient | yes | - I | inertial coefficient | yes | - L | porous media length in the flow direction | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type porousBafflePressure; - patchType cyclic; - jump uniform 0; - I 1000000; - D 0.001; - L 0.1; - value uniform 0; - } - \endverbatim - -Note - The underlying \c patchType should be set to \c cyclic - -SourceFiles - porousBafflePressureFvPatchField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef porousBafflePressureFvPatchField_H -#define porousBafflePressureFvPatchField_H - -#include "fixedJumpFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -/*---------------------------------------------------------------------------*\ - Class porousBafflePressureFvPatchField Declaration -\*---------------------------------------------------------------------------*/ - -template<class Type> -class porousBafflePressureFvPatchField -: - public fixedJumpFvPatchField<Type> -{ - // Private data - - //- Darcy pressure loss coefficient - scalar D_; - - //- Inertia pressure lost coefficient - scalar I_; - - //- Porous media length - scalar length_; - - -public: - - //- Runtime type information - TypeName("porousBafflePressure"); - - - // Constructors - - //- Construct from patch and internal field - porousBafflePressureFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - porousBafflePressureFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given porousBafflePressureFvPatchField - // onto a new patch - porousBafflePressureFvPatchField - ( - const porousBafflePressureFvPatchField<Type>&, - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - porousBafflePressureFvPatchField - ( - const porousBafflePressureFvPatchField<Type>& - ); - - //- Construct and return a clone - virtual tmp<fvPatchField<Type> > clone() const - { - return tmp<fvPatchField<Type> > - ( - new porousBafflePressureFvPatchField<Type>(*this) - ); - } - - //- Construct as copy setting internal field reference - porousBafflePressureFvPatchField - ( - const porousBafflePressureFvPatchField<Type>&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchField<Type> > clone - ( - const DimensionedField<Type, volMesh>& iF - ) const - { - return tmp<fvPatchField<Type> > - ( - new porousBafflePressureFvPatchField<Type>(*this, iF) - ); - } - - - // Member functions - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - - //- Write - virtual void write(Ostream&) const; -}; - - -//- Specialisation of the jump-condition for the pressure -template<> -void porousBafflePressureFvPatchField<scalar>::updateCoeffs(); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "porousBafflePressureFvPatchField.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.C b/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.C deleted file mode 100644 index 6f218bd8cb5..00000000000 --- a/src/turbulenceModels/derivedFvPatchFields/porousBafflePressure/porousBafflePressureFvPatchFields.C +++ /dev/null @@ -1,121 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "porousBafflePressureFvPatchFields.H" -#include "addToRunTimeSelectionTable.H" -#include "volFields.H" -#include "surfaceFields.H" - -#include "compressible/turbulenceModel/turbulenceModel.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -makeTemplatePatchTypeField -( - fvPatchScalarField, - porousBafflePressureFvPatchScalarField -); - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -//- Specialisation of the jump-condition for the pressure -template<> -void Foam::porousBafflePressureFvPatchField<Foam::scalar>::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const surfaceScalarField& phi = - db().lookupObject<surfaceScalarField>("phi"); - - const fvsPatchField<scalar>& phip = - patch().patchField<surfaceScalarField, scalar>(phi); - - scalarField Un(phip/patch().magSf()); - - scalarField magUn(mag(Un)); - - if (phi.dimensions() == dimensionSet(0, 3, -1, 0, 0)) - { - const incompressible::turbulenceModel& turbModel = - db().lookupObject<incompressible::turbulenceModel> - ( - "turbulenceModel" - ); - - const scalarField nu = turbModel.nu()().boundaryField()[patchI]; - - jump_ = -sign(Un)*(D_*nu + I_*0.5*magUn)*magUn*length_; - } - else - { - const compressible::turbulenceModel& turbModel = - db().lookupObject<compressible::turbulenceModel> - ( - "turbulenceModel" - ); - - const scalarField mu = turbModel.mu().boundaryField()[patchI]; - - const scalarField rhow = - patch().lookupPatchField<volScalarField, scalar>("rho"); - - Un /= rhow; - - jump_ = -sign(Un)*(D_*mu + I_*0.5*rhow*magUn)*magUn*length_; - } - - if (debug) - { - scalar avePressureJump = gAverage(jump_); - scalar aveVelocity = gAverage(mag(Un)); - - Info<< patch().boundaryMesh().mesh().name() << ':' - << patch().name() << ':' - << " Average pressure drop :" << avePressureJump - << " Average velocity :" << aveVelocity - << endl; - } - - fixedJumpFvPatchField<scalar>::updateCoeffs(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/Allwmake b/src/turbulenceModels/incompressible/Allwmake deleted file mode 100755 index ec2033465e9..00000000000 --- a/src/turbulenceModels/incompressible/Allwmake +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -cd ${0%/*} || exit 1 # Run from this directory - -# Parse arguments for library compilation -targetType=libso -. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments -set -x - -wmake $targetType turbulenceModel -wmake $targetType RAS -wmake $targetType LES - -# ----------------------------------------------------------------- end-of-file diff --git a/src/turbulenceModels/incompressible/LES/DESModel/DESModel.C b/src/turbulenceModels/incompressible/LES/DESModel/DESModel.C deleted file mode 100644 index 2f3e33931d8..00000000000 --- a/src/turbulenceModels/incompressible/LES/DESModel/DESModel.C +++ /dev/null @@ -1,56 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012-2015 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 "DESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * * // - -DESModel::DESModel -( - const word& type, - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -: - LESModel(type, U, phi, transport, turbulenceModelName) - -{} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/DESModel/DESModelDoc.H b/src/turbulenceModels/incompressible/LES/DESModel/DESModelDoc.H deleted file mode 100644 index 5311d09d671..00000000000 --- a/src/turbulenceModels/incompressible/LES/DESModel/DESModelDoc.H +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpIcoDESTurbulence Incompressible DES turbulence -@{ - \ingroup grpIcoTurbulence - This group contains incompressible DES models. -@} - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.C b/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.C deleted file mode 100644 index af3c7eb0a2d..00000000000 --- a/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.C +++ /dev/null @@ -1,162 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "DeardorffDiffStress.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(DeardorffDiffStress, 0); -addToRunTimeSelectionTable(LESModel, DeardorffDiffStress, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void DeardorffDiffStress::updateSubGridScaleFields(const volScalarField& K) -{ - nuSgs_ = ck_*sqrt(K)*delta(); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -DeardorffDiffStress::DeardorffDiffStress -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenSGSStress(U, phi, transport), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.094 - ) - ), - cm_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cm", - coeffDict_, - 4.13 - ) - ) -{ - updateSubGridScaleFields(0.5*tr(B_)); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void DeardorffDiffStress::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenSGSStress::correct(gradU); - - const volSymmTensorField D(symm(gradU)); - - const volSymmTensorField P(-twoSymm(B_ & gradU)); - - volScalarField K(0.5*tr(B_)); - volScalarField Epsilon(2*nuEff()*magSqr(D)); - - tmp<fvSymmTensorMatrix> BEqn - ( - fvm::ddt(B_) - + fvm::div(phi(), B_) - - fvm::laplacian(DBEff(), B_) - + fvm::Sp(cm_*sqrt(K)/delta(), B_) - == - P - + 0.8*K*D - - (2*ce_ - 0.667*cm_)*I*Epsilon - ); - - BEqn().relax(); - BEqn().solve(); - - // Bounding the component kinetic energies - - forAll(B_, celli) - { - B_[celli].component(symmTensor::XX) = - max(B_[celli].component(symmTensor::XX), kMin_.value()); - B_[celli].component(symmTensor::YY) = - max(B_[celli].component(symmTensor::YY), kMin_.value()); - B_[celli].component(symmTensor::ZZ) = - max(B_[celli].component(symmTensor::ZZ), kMin_.value()); - } - - K = 0.5*tr(B_); - bound(K, kMin_); - - updateSubGridScaleFields(K); -} - - -bool DeardorffDiffStress::read() -{ - if (GenSGSStress::read()) - { - ck_.readIfPresent(coeffDict()); - cm_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.H b/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.H deleted file mode 100644 index 7125d3be09a..00000000000 --- a/src/turbulenceModels/incompressible/LES/DeardorffDiffStress/DeardorffDiffStress.H +++ /dev/null @@ -1,148 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::DeardorffDiffStress - -Group - grpIcoLESTurbulence - -Description - Differential SGS Stress Equation Model for incompressible flows - - The DSEM uses a model version of the full balance equation for the SGS - stress tensor to simulate the behaviour of B. - Thus, - \f[ - \frac{d}{dt}(B) + \nabla\cdot(U B) - \nabla\cdot(\nu_{sgs}\nabla B) - = - P - c_1 \frac{\epsilon}{k}B - 0.667(1 - c_1)\epsilon I - - c_2 (P - 0.333 trP I) - \f] - - where - \f{eqnarray*}{ - k &=& 0.5 tr(B) \\ - \epsilon &=& c_e k^{3/2}/\Delta \\ - \epsilon/k &=& c_e k^{1/2}/\Delta \\ - P &=& -(B'L + L'B) \\ - \nu_{sgs} &=& c_k k^{1/2} \Delta \\ - \nu_{eff} &=& \nu_{sgs} + \nu - \f} - -SourceFiles - DeardorffDiffStress.C - -\*---------------------------------------------------------------------------*/ - -#ifndef DeardorffDiffStress_H -#define DeardorffDiffStress_H - -#include "GenSGSStress.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class DeardorffDiffStress Declaration -\*---------------------------------------------------------------------------*/ - -class DeardorffDiffStress -: - public GenSGSStress -{ - // Private data - - dimensionedScalar ck_; - dimensionedScalar cm_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volScalarField& K); - - // Disallow default bitwise copy construct and assignment - DeardorffDiffStress(const DeardorffDiffStress&); - DeardorffDiffStress& operator=(const DeardorffDiffStress&); - - -public: - - //- Runtime type information - TypeName("DeardorffDiffStress"); - - // Constructors - - //- Construct from components - DeardorffDiffStress - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~DeardorffDiffStress() - {} - - - // Member Functions - - //- Return the effective diffusivity for B - tmp<volScalarField> DBEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DBEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.C b/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.C deleted file mode 100644 index 1dcad692c4f..00000000000 --- a/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.C +++ /dev/null @@ -1,149 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameWithName(GenEddyVisc, "GenEddyVisc"); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -GenEddyVisc::GenEddyVisc -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - - ce_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ce", - coeffDict_, - 1.048 - ) - ), - - nuSgs_ - ( - IOobject - ( - "nuSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{ -// printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> GenEddyVisc::B() const -{ - return ((2.0/3.0)*I)*k() - nuSgs_*twoSymm(fvc::grad(U())); -} - - -tmp<volSymmTensorField> GenEddyVisc::devReff() const -{ - return -nuEff()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> GenEddyVisc::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> GenEddyVisc::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -void GenEddyVisc::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); -} - - -bool GenEddyVisc::read() -{ - if (LESModel::read()) - { - ce_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.H b/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.H deleted file mode 100644 index ab57b4cd833..00000000000 --- a/src/turbulenceModels/incompressible/LES/GenEddyVisc/GenEddyVisc.H +++ /dev/null @@ -1,170 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::GenEddyVisc - -Group - grpIcoLESTurbulence - -Description - General base class for all incompressible models that can be implemented - as an eddy viscosity, i.e. algebraic and one-equation models. - - Contains fields for k (SGS turbulent kinetic energy), gamma - (modelled viscosity) and epsilon (SGS dissipation). - -SourceFiles - GenEddyVisc.C - -\*---------------------------------------------------------------------------*/ - -#ifndef GenEddyVisc_H -#define GenEddyVisc_H - -#include "LESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class GenEddyVisc Declaration -\*---------------------------------------------------------------------------*/ - -class GenEddyVisc -: - virtual public LESModel -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - GenEddyVisc(const GenEddyVisc&); - GenEddyVisc& operator=(const GenEddyVisc&); - - -protected: - - // Model coefficients - - dimensionedScalar ce_; - - // Fields - - volScalarField nuSgs_; - - -public: - - //- Partial Runtime type information - static const word typeName; - - // Constructors - - //- Construct from components - GenEddyVisc - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~GenEddyVisc() - {} - - - // Member Functions - - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ce_*k()*sqrt(k())/delta() - ) - ); - } - - //- Return the SGS viscosity. - virtual tmp<volScalarField> nuSgs() const - { - return nuSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.C b/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.C deleted file mode 100644 index d44bb7e383d..00000000000 --- a/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.C +++ /dev/null @@ -1,230 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "GenSGSStress.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameWithName(GenSGSStress, "GenSGSStress"); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -GenSGSStress::GenSGSStress -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - - ce_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ce", - coeffDict_, - 1.048 - ) - ), - - couplingFactor_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "couplingFactor", - coeffDict_, - 0.0 - ) - ), - - B_ - ( - IOobject - ( - "B", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - nuSgs_ - ( - IOobject - ( - "nuSgs", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - nu(), - B_.boundaryField().types() - ) -{ - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn - ( - "GenSGSStress::GenSGSStress" - "(const volVectorField& U, const surfaceScalarField& phi," - "transportModel& transport)" - ) << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> GenSGSStress::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - B_ - nu()*dev(twoSymm(fvc::grad(U()))) - ) - ); -} - - -tmp<fvVectorMatrix> GenSGSStress::divDevReff -( - volVectorField& U -) const -{ - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(B_ + couplingFactor_*nuSgs_*fvc::grad(U)) - + fvc::laplacian - ( - (1.0 - couplingFactor_)*nuSgs_, U, "laplacian(nuEff,U)" - ) - - fvm::laplacian(nuEff(), U) - ); - } - else - { - return - ( - fvc::div(B_) - + fvc::laplacian(nuSgs_, U, "laplacian(nuEff,U)") - - fvm::laplacian(nuEff(), U) - ); - } -} - - -tmp<fvVectorMatrix> GenSGSStress::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(rho*B_ + couplingFactor_*rho*nuSgs_*fvc::grad(U)) - + fvc::laplacian - ( - (1.0 - couplingFactor_)*rho*nuSgs_, U, "laplacian(muEff,U)" - ) - - fvm::laplacian(muEff, U) - ); - } - else - { - return - ( - fvc::div(rho*B_) - + fvc::laplacian(rho*nuSgs_, U, "laplacian(muEff,U)") - - fvm::laplacian(muEff, U) - ); - } -} - - -bool GenSGSStress::read() -{ - if (LESModel::read()) - { - ce_.readIfPresent(coeffDict()); - - couplingFactor_.readIfPresent(coeffDict()); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn("GenSGSStress::read()") - << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" - << exit(FatalError); - } - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.H b/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.H deleted file mode 100644 index da2b356a81e..00000000000 --- a/src/turbulenceModels/incompressible/LES/GenSGSStress/GenSGSStress.H +++ /dev/null @@ -1,192 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::GenSGSStress - -Group - grpIcoLESTurbulence - -Description - General base class for all incompressible models that directly - solve for the SGS stress tensor B. - - Contains tensor fields B (the SGS stress tensor) as well as scalar - fields for k (SGS turbulent energy) gamma (SGS viscosity) and epsilon - (SGS dissipation). - -SourceFiles - GenSGSStress.C - -\*---------------------------------------------------------------------------*/ - -#ifndef GenSGSStress_H -#define GenSGSStress_H - -#include "LESModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class GenSGSStress Declaration -\*---------------------------------------------------------------------------*/ - -class GenSGSStress -: - virtual public LESModel -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - GenSGSStress(const GenSGSStress&); - GenSGSStress& operator=(const GenSGSStress&); - - -protected: - - dimensionedScalar ce_; - - dimensionedScalar couplingFactor_; - - volSymmTensorField B_; - volScalarField nuSgs_; - - -public: - - //- Partial Runtime type information - static const word typeName; - - // Constructors - - //- Construct from components - GenSGSStress - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~GenSGSStress() - {} - - - // Member Functions - - //- Return the SGS turbulent kinetic energy. - virtual tmp<volScalarField> k() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - 0.5*tr(B_) - ) - ); - } - - //- Return the SGS turbulent dissipation. - virtual tmp<volScalarField> epsilon() const - { - const volScalarField K(k()); - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ce_*K*sqrt(K)/delta() - ) - ); - } - - //- Return the SGS viscosity. - virtual tmp<volScalarField> nuSgs() const - { - return nuSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const - { - return B_; - } - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C b/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C deleted file mode 100644 index 5486b559208..00000000000 --- a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.C +++ /dev/null @@ -1,207 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LESModel.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LESModel, 0); -defineRunTimeSelectionTable(LESModel, dictionary); -addToRunTimeSelectionTable(turbulenceModel, LESModel, turbulenceModel); - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void LESModel::printCoeffs() -{ - if (printCoeffs_) - { - Info<< type() << "Coeffs" << coeffDict_ << endl; - } -} - - -// * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * * // - -LESModel::LESModel -( - const word& type, - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -: - turbulenceModel(U, phi, transport, turbulenceModelName), - - IOdictionary - ( - IOobject - ( - "LESProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ), - - printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subOrEmptyDict(type + "Coeffs")), - - kMin_("kMin", sqr(dimVelocity), SMALL), - delta_(LESdelta::New("delta", U.mesh(), *this)) -{ - kMin_.readIfPresent(*this); - - // Force the construction of the mesh deltaCoeffs which may be needed - // for the construction of the derived models and BCs - mesh_.deltaCoeffs(); -} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<LESModel> LESModel::New -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "LESProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("LESModel") - ); - - Info<< "Selecting LES turbulence model " << modelType << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(modelType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "LESModel::New" - "(" - "const volVectorField&, " - "const surfaceScalarField& ," - "transportModel&, " - "const word&" - ")" - ) << "Unknown LESModel type " - << modelType << nl << nl - << "Valid LESModel types:" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<LESModel> - ( - cstrIter()(U, phi, transport, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void LESModel::correct(const tmp<volTensorField>&) -{ - turbulenceModel::correct(); - delta_().correct(); -} - - -void LESModel::correct() -{ - correct(fvc::grad(U_)); -} - - -bool LESModel::read() -{ - //if (regIOobject::read()) - - // Bit of trickery : we are both IOdictionary ('RASProperties') and - // an regIOobject from the turbulenceModel level. Problem is to distinguish - // between the two - we only want to reread the IOdictionary. - - bool ok = IOdictionary::readData - ( - IOdictionary::readStream - ( - IOdictionary::type() - ) - ); - IOdictionary::close(); - - if (ok) - { - if (const dictionary* dictPtr = subDictPtr(type() + "Coeffs")) - { - coeffDict_ <<= *dictPtr; - } - - delta_().read(*this); - - kMin_.readIfPresent(*this); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.H b/src/turbulenceModels/incompressible/LES/LESModel/LESModel.H deleted file mode 100644 index 8dad795f6dc..00000000000 --- a/src/turbulenceModels/incompressible/LES/LESModel/LESModel.H +++ /dev/null @@ -1,246 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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/>. - -Namespace - Foam::incompressible::LESModels - -Group - grpIcoLESTurbulence - -Description - Namespace for incompressible LES models. - -Class - Foam::incompressible::LESModel - -Description - Base class for all incompressible flow LES SGS models. - - This class defines the basic interface for an incompressible flow SGS - model, and encapsulates data of value to all possible models. - In particular this includes references to all the dependent fields - (U, phi), the physical viscosity nu, and the LESProperties - dictionary, which contains the model selection and model coefficients. - -SourceFiles - LESModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef incompressibleLESModel_H -#define incompressibleLESModel_H - -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.H" -#include "fvm.H" -#include "fvc.H" -#include "fvMatrices.H" -#include "incompressible/transportModel/transportModel.H" -#include "bound.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class LESModel Declaration -\*---------------------------------------------------------------------------*/ - -class LESModel -: - public turbulenceModel, - public IOdictionary -{ - -protected: - - // Protected data - - Switch printCoeffs_; - dictionary coeffDict_; - - dimensionedScalar kMin_; - - autoPtr<Foam::LESdelta> delta_; - - - // Protected Member Functions - - //- Print model coefficients - virtual void printCoeffs(); - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - LESModel(const LESModel&); - - //- Disallow default bitwise assignment - LESModel& operator=(const LESModel&); - - -public: - - //- Runtime type information - TypeName("LESModel"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - LESModel, - dictionary, - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName - ), - (U, phi, transport, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - LESModel - ( - const word& type, - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - // Selectors - - //- Return a reference to the selected LES model - static autoPtr<LESModel> New - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - //- Destructor - virtual ~LESModel() - {} - - - // Member Functions - - // Access - - //- Const access to the coefficients dictionary, - // which provides info. about choice of models, - // and all related data (particularly model coefficients). - virtual const dictionary& coeffDict() const - { - return coeffDict_; - } - - //- Return the lower allowable limit for k (default: SMALL) - const dimensionedScalar& kMin() const - { - return kMin_; - } - - //- Allow kMin to be changed - dimensionedScalar& kMin() - { - return kMin_; - } - - //- Access function to filter width - virtual const volScalarField& delta() const - { - return delta_(); - } - - - //- Return the SGS viscosity. - virtual tmp<volScalarField> nuSgs() const = 0; - - //- Return the effective viscosity - virtual tmp<volScalarField> nuEff() const - { - return tmp<volScalarField> - ( - new volScalarField("nuEff", nuSgs() + nu()) - ); - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const = 0; - - - // RAS compatibility functions for the turbulenceModel base class - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nuSgs(); - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return B(); - } - - - //- Correct Eddy-Viscosity and related properties. - // This calls correct(const tmp<volTensorField>& gradU) by supplying - // gradU calculated locally. - virtual void correct(); - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/LESModel/LESModelDoc.H b/src/turbulenceModels/incompressible/LES/LESModel/LESModelDoc.H deleted file mode 100644 index 9b400e23eeb..00000000000 --- a/src/turbulenceModels/incompressible/LES/LESModel/LESModelDoc.H +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpIcoLESTurbulence Incompressible LES turbulence -@{ - \ingroup grpIcoTurbulence - This group contains incompressible LES models. -@} - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.C b/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.C deleted file mode 100644 index 5fda184beea..00000000000 --- a/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.C +++ /dev/null @@ -1,176 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LRRDiffStress.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LRRDiffStress, 0); -addToRunTimeSelectionTable(LESModel, LRRDiffStress, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void LRRDiffStress::updateSubGridScaleFields(const volScalarField& K) -{ - nuSgs_ = ck_*sqrt(K)*delta(); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LRRDiffStress::LRRDiffStress -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenSGSStress(U, phi, transport), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.09 - ) - ), - c1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "c1", - coeffDict_, - 1.8 - ) - ), - c2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "c2", - coeffDict_, - 0.6 - ) - ) -{ - volScalarField K(0.5*tr(B_)); - bound(K, kMin_); - - updateSubGridScaleFields(K); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void LRRDiffStress::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenSGSStress::correct(gradU); - - const volSymmTensorField D(symm(gradU)); - - const volSymmTensorField P(-twoSymm(B_ & gradU)); - - volScalarField K(0.5*tr(B_)); - const volScalarField Epsilon(2*nuEff()*magSqr(D)); - - tmp<fvSymmTensorMatrix> BEqn - ( - fvm::ddt(B_) - + fvm::div(phi(), B_) - - fvm::laplacian(DBEff(), B_) - + fvm::Sp(c1_*Epsilon/K, B_) - == - P - - (0.667*(1.0 - c1_)*I)*Epsilon - - c2_*(P - 0.333*I*tr(P)) - - (0.667 - 2*c1_)*I*pow(K, 1.5)/delta() - ); - - BEqn().relax(); - BEqn().solve(); - - // Bounding the component kinetic energies - - forAll(B_, celli) - { - B_[celli].component(symmTensor::XX) = - max(B_[celli].component(symmTensor::XX), kMin_.value()); - B_[celli].component(symmTensor::YY) = - max(B_[celli].component(symmTensor::YY), kMin_.value()); - B_[celli].component(symmTensor::ZZ) = - max(B_[celli].component(symmTensor::ZZ), kMin_.value()); - } - - K = 0.5*tr(B_); - bound(K, kMin_); - - updateSubGridScaleFields(K); -} - - -bool LRRDiffStress::read() -{ - if (GenSGSStress::read()) - { - ck_.readIfPresent(coeffDict()); - c1_.readIfPresent(coeffDict()); - c2_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.H b/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.H deleted file mode 100644 index a5168b4bfc1..00000000000 --- a/src/turbulenceModels/incompressible/LES/LRRDiffStress/LRRDiffStress.H +++ /dev/null @@ -1,145 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::LRRDiffStress - -Group - grpIcoLESTurbulence - -Description - Differential SGS Stress Equation Model for incompressible flows. - - The DSEM uses a model version of the full balance equation for the SGS - stress tensor to simulate the behaviour of B, hence, - \verbatim - d/dt(B) + div(U*B) - div(nuSgs*grad(B)) - = - P - c1*e/k*B - 0.667*(1 - c1)*e*I - c2*(P - 0.333*trP*I) - where - k = 0.5*trB, - epsilon = ce*k^3/2/delta - epsilon/k = ce*k^1/2/delta - P = -(B'L + L'B) - nuEff = ck*sqrt(k)*delta + nu - \endverbatim - - This version from Launder, Rece & Rodi 1975 - -SourceFiles - LRRDiffStress.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LRRDiffStress_H -#define LRRDiffStress_H - -#include "GenSGSStress.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class LRRDiffStress Declaration -\*---------------------------------------------------------------------------*/ - -class LRRDiffStress -: - public GenSGSStress -{ - // Private data - - dimensionedScalar ck_; - dimensionedScalar c1_; - dimensionedScalar c2_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volScalarField& K); - - // Disallow default bitwise copy construct and assignment - LRRDiffStress(const LRRDiffStress&); - LRRDiffStress& operator=(const LRRDiffStress&); - - -public: - - //- Runtime type information - TypeName("LRRDiffStress"); - - // Constructors - - //- Construct from components - LRRDiffStress - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LRRDiffStress() - {} - - - // Member Functions - - //- Return the effective diffusivity for B - tmp<volScalarField> DBEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DBEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/Make/files b/src/turbulenceModels/incompressible/LES/Make/files deleted file mode 100644 index 6d4e3cb4d7d..00000000000 --- a/src/turbulenceModels/incompressible/LES/Make/files +++ /dev/null @@ -1,34 +0,0 @@ -incompressibleLESdelta/incompressibleLESdelta.C -vanDriestDelta/vanDriestDelta.C - -LESModel/LESModel.C - -DESModel/DESModel.C - -GenEddyVisc/GenEddyVisc.C -GenSGSStress/GenSGSStress.C - -laminar/laminar.C -SpalartAllmaras/SpalartAllmaras.C -SpalartAllmarasDDES/SpalartAllmarasDDES.C -SpalartAllmarasIDDES/SpalartAllmarasIDDES.C -SpalartAllmarasIDDES/IDDESDelta/IDDESDelta.C - -oneEqEddy/oneEqEddy.C -homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C -dynOneEqEddy/dynOneEqEddy.C -Smagorinsky/Smagorinsky.C -homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C -LRRDiffStress/LRRDiffStress.C -DeardorffDiffStress/DeardorffDiffStress.C -spectEddyVisc/spectEddyVisc.C -dynLagrangian/dynLagrangian.C - -scaleSimilarity/scaleSimilarity.C -mixedSmagorinsky/mixedSmagorinsky.C - -/*Smagorinsky2/Smagorinsky2.C*/ - -kOmegaSSTSAS/kOmegaSSTSAS.C - -LIB = $(FOAM_LIBBIN)/libincompressibleLESModels diff --git a/src/turbulenceModels/incompressible/LES/Make/options b/src/turbulenceModels/incompressible/LES/Make/options deleted file mode 100644 index 2699300b565..00000000000 --- a/src/turbulenceModels/incompressible/LES/Make/options +++ /dev/null @@ -1,14 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/LES/LESfilters/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude - -LIB_LIBS = \ - -lincompressibleTurbulenceModel \ - -lLESdeltas \ - -lLESfilters\ - -lfiniteVolume \ - -lmeshTools diff --git a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C b/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C deleted file mode 100644 index 9ac283cb587..00000000000 --- a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.C +++ /dev/null @@ -1,112 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "Smagorinsky.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Smagorinsky, 0); -addToRunTimeSelectionTable(LESModel, Smagorinsky, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void Smagorinsky::updateSubGridScaleFields(const volTensorField& gradU) -{ - nuSgs_ = ck_*delta()*sqrt(k(gradU)); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Smagorinsky::Smagorinsky -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.094 - ) - ) -{ - updateSubGridScaleFields(fvc::grad(U)); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Smagorinsky::correct(const tmp<volTensorField>& gradU) -{ - GenEddyVisc::correct(gradU); - updateSubGridScaleFields(gradU()); -} - - -bool Smagorinsky::read() -{ - if (GenEddyVisc::read()) - { - ck_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.H b/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.H deleted file mode 100644 index d2eea980f26..00000000000 --- a/src/turbulenceModels/incompressible/LES/Smagorinsky/Smagorinsky.H +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::Smagorinsky - -Group - grpIcoLESTurbulence - -Description - The Isochoric Smagorinsky Model for incompressible flows. - - Algebraic eddy viscosity SGS model founded on the assumption that - local equilibrium prevails. - Thus, - \verbatim - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - D = symm(grad(U)); - k = (2*ck/ce)*delta^2*||D||^2 - nuSgs = ck*sqrt(k)*delta - nuEff = nuSgs + nu - \endverbatim - -SourceFiles - Smagorinsky.C - -\*---------------------------------------------------------------------------*/ - -#ifndef Smagorinsky_H -#define Smagorinsky_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class Smagorinsky Declaration -\*---------------------------------------------------------------------------*/ - -class Smagorinsky -: - public GenEddyVisc -{ - // Private data - - dimensionedScalar ck_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volTensorField& gradU); - - // Disallow default bitwise copy construct and assignment - Smagorinsky(const Smagorinsky&); - Smagorinsky& operator=(const Smagorinsky&); - - -public: - - //- Runtime type information - TypeName("Smagorinsky"); - - // Constructors - - //- Construct from components - Smagorinsky - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~Smagorinsky() - {} - - - // Member Functions - - //- Return SGS kinetic energy - // calculated from the given velocity gradient - tmp<volScalarField> k(const tmp<volTensorField>& gradU) const - { - return (2.0*ck_/ce_)*sqr(delta())*magSqr(dev(symm(gradU))); - } - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k(fvc::grad(U())); - } - - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.C b/src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.C deleted file mode 100644 index 7564c6c1e7d..00000000000 --- a/src/turbulenceModels/incompressible/LES/Smagorinsky2/Smagorinsky2.C +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "Smagorinsky2.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(Smagorinsky2, 0); -addToRunTimeSelectionTable(LESModel, Smagorinsky2, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Smagorinsky2::Smagorinsky2 -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - Smagorinsky(U, phi, transport), - - cD2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cD2", - coeffDict_, - 0.02 - ) - ) -{ - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -// Evaluate B (from the definition of an eddy viscosity model) and -// return it. - -tmp<volSymmTensorField> Smagorinsky2::B() const -{ - volSymmTensorField D(dev(symm(fvc::grad(U())))); - - return (((2.0/3.0)*I)*k() - 2.0*nuSgs_*D - (2.0*cD2_)*delta()*(D&D)); -} - - -tmp<fvVectorMatrix> Smagorinsky2::divDevReff -( - volVectorField& U -) const -{ - volTensorField gradU(fvc::grad(U)); - - volSymmTensorField aniNuEff - ( - "aniNuEff", - I*nuEff() + cD2_*delta()*symm(gradU) - ); - - return - ( - - fvm::laplacian(aniNuEff, U) - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> Smagorinsky2::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volTensorField gradU(fvc::grad(U)); - - volSymmTensorField aniMuEff - ( - "muEff", - I*(rho*nuEff()) + (cD2_*rho*delta())*symm(gradU) - ); - - return - ( - - fvm::laplacian(aniMuEff, U) - - fvc::div(rho*nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -bool Smagorinsky2::read() -{ - if (Smagorinsky::read()) - { - cD2.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.C b/src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.C deleted file mode 100644 index 9b5414d206f..00000000000 --- a/src/turbulenceModels/incompressible/LES/SpalartAllmaras/SpalartAllmaras.C +++ /dev/null @@ -1,463 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmaras.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmaras, 0); -addToRunTimeSelectionTable(LESModel, SpalartAllmaras, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void SpalartAllmaras::updateSubGridScaleFields() -{ - nuSgs_.internalField() = fv1()*nuTilda_.internalField(); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<volScalarField> SpalartAllmaras::fv1() const -{ - const volScalarField chi3("chi3", pow3(nuTilda_/nu())); - return chi3/(chi3 + pow3(Cv1_)); -} - - -tmp<volScalarField> SpalartAllmaras::fv2() const -{ - if (ashfordCorrection_) - { - return 1/pow3(scalar(1) + nuTilda_/(Cv2_*nu())); - } - else - { - const volScalarField chi("chi", nuTilda_/nu()); - return 1.0 - chi/(1.0 + chi*fv1()); - } -} - - -tmp<volScalarField> SpalartAllmaras::fv3() const -{ - if (ashfordCorrection_) - { - const volScalarField chi("chi", nuTilda_/nu()); - const volScalarField chiByCv2(chi/Cv2_); - - return - (scalar(1) + chi*fv1()) - *(1/Cv2_) - *(3*(scalar(1) + chiByCv2) + sqr(chiByCv2)) - /pow3(scalar(1) + chiByCv2); - } - else - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "fv3", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("fv3", dimless, 1), - zeroGradientFvPatchScalarField::typeName - ) - ); - } -} - - -tmp<volScalarField> SpalartAllmaras::S(const volTensorField& gradU) const -{ - return sqrt(2.0)*mag(skew(gradU)); -} - - -tmp<volScalarField> SpalartAllmaras::STilda -( - const volScalarField& S, - const volScalarField& dTilda -) const -{ - return fv3()*S + fv2()*nuTilda_/sqr(kappa_*dTilda); -} - - -tmp<volScalarField> SpalartAllmaras::r -( - const volScalarField& visc, - const volScalarField& S, - const volScalarField& dTilda -) const -{ - return min - ( - visc - /( - max - ( - S, - dimensionedScalar("SMALL", S.dimensions(), SMALL) - ) - *sqr(kappa_*dTilda) - + dimensionedScalar - ( - "ROOTVSMALL", - dimensionSet(0, 2 , -1, 0, 0), - ROOTVSMALL - ) - ), - scalar(10) - ); -} - - -tmp<volScalarField> SpalartAllmaras::fw -( - const volScalarField& S, - const volScalarField& dTilda -) const -{ - const volScalarField r(this->r(nuTilda_, S, dTilda)); - const volScalarField g(r + Cw2_*(pow6(r) - r)); - - return g*pow((1 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); -} - - -tmp<volScalarField> SpalartAllmaras::dTilda(const volScalarField&) const -{ - tmp<volScalarField> tdTilda(CDES_*delta()); - min(tdTilda().dimensionedInternalField(), tdTilda(), y_); - return tdTilda; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -SpalartAllmaras::SpalartAllmaras -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - DESModel(modelName, U, phi, transport, turbulenceModelName), - - sigmaNut_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaNut", - coeffDict_, - 0.66666 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - coeffDict_, - 0.41 - ) - ), - Cb1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb1", - coeffDict_, - 0.1355 - ) - ), - Cb2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb2", - coeffDict_, - 0.622 - ) - ), - Cv1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv1", - coeffDict_, - 7.1 - ) - ), - Cv2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv2", - coeffDict_, - 5.0 - ) - ), - CDES_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "CDES", - coeffDict_, - 0.65 - ) - ), - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.07 - ) - ), - Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), - Cw2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw2", - coeffDict_, - 0.3 - ) - ), - Cw3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw3", - coeffDict_, - 2.0 - ) - ), - - ashfordCorrection_(coeffDict_.lookupOrDefault("ashfordCorrection", true)), - - y_(wallDist::New(mesh_).y()), - - nuTilda_ - ( - IOobject - ( - "nuTilda", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - nuSgs_ - ( - IOobject - ( - "nuSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{ - updateSubGridScaleFields(); - - if (ashfordCorrection_) - { - Info<< " Employing Ashford correction" << endl; - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void SpalartAllmaras::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); - - const volScalarField S(this->S(gradU)); - const volScalarField dTilda(this->dTilda(S)); - const volScalarField STilda(this->STilda(S, dTilda)); - - tmp<fvScalarMatrix> nuTildaEqn - ( - fvm::ddt(nuTilda_) - + fvm::div(phi(), nuTilda_) - - fvm::laplacian - ( - (nuTilda_ + nu())/sigmaNut_, - nuTilda_, - "laplacian(DnuTildaEff,nuTilda)" - ) - - Cb2_/sigmaNut_*magSqr(fvc::grad(nuTilda_)) - == - Cb1_*STilda*nuTilda_ - - fvm::Sp(Cw1_*fw(STilda, dTilda)*nuTilda_/sqr(dTilda), nuTilda_) - ); - - nuTildaEqn().relax(); - nuTildaEqn().solve(); - - bound(nuTilda_, dimensionedScalar("zero", nuTilda_.dimensions(), 0.0)); - nuTilda_.correctBoundaryConditions(); - - updateSubGridScaleFields(); -} - - -tmp<volScalarField> SpalartAllmaras::k() const -{ - return sqr(nuSgs()/ck_/dTilda(S(fvc::grad(U())))); -} - - -tmp<volScalarField> SpalartAllmaras::epsilon() const -{ - return 2*nuEff()*magSqr(symm(fvc::grad(U()))); -} - - -tmp<volSymmTensorField> SpalartAllmaras::B() const -{ - return ((2.0/3.0)*I)*k() - nuSgs()*twoSymm(fvc::grad(U())); -} - - -tmp<volSymmTensorField> SpalartAllmaras::devReff() const -{ - return -nuEff()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool SpalartAllmaras::read() -{ - if (LESModel::read()) - { - sigmaNut_.readIfPresent(coeffDict()); - kappa_.readIfPresent(*this); - - Cb1_.readIfPresent(coeffDict()); - Cb2_.readIfPresent(coeffDict()); - Cv1_.readIfPresent(coeffDict()); - Cv2_.readIfPresent(coeffDict()); - CDES_.readIfPresent(coeffDict()); - ck_.readIfPresent(coeffDict()); - Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; - Cw2_.readIfPresent(coeffDict()); - Cw3_.readIfPresent(coeffDict()); - - ashfordCorrection_.readIfPresent("ashfordCorrection", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -tmp<volScalarField> SpalartAllmaras::LESRegion() const -{ - tmp<volScalarField> tLESRegion - ( - new volScalarField - ( - IOobject - ( - "DES::LESRegion", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - neg(dTilda(S(fvc::grad(U_))) - y_) - ) - ); - - return tLESRegion; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.C b/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.C deleted file mode 100644 index 0112352d076..00000000000 --- a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.C +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "dynLagrangian.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(dynLagrangian, 0); -addToRunTimeSelectionTable(LESModel, dynLagrangian, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void dynLagrangian::updateSubGridScaleFields -( - const tmp<volTensorField>& gradU -) -{ - nuSgs_ = (flm_/fmm_)*sqr(delta())*mag(dev(symm(gradU))); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -dynLagrangian::dynLagrangian -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - flm_ - ( - IOobject - ( - "flm", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - fmm_ - ( - IOobject - ( - "fmm", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - theta_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "theta", - coeffDict_, - 1.5 - ) - ), - simpleFilter_(U.mesh()), - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()), - flm0_("flm0", flm_.dimensions(), 0.0), - fmm0_("fmm0", fmm_.dimensions(), VSMALL) -{ - updateSubGridScaleFields(fvc::grad(U)); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void dynLagrangian::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); - - volSymmTensorField S(dev(symm(gradU()))); - - volScalarField magS(mag(S)); - - volVectorField Uf(filter_(U())); - - volSymmTensorField Sf(dev(symm(fvc::grad(Uf)))); - - volScalarField magSf(mag(Sf)); - - volSymmTensorField L(dev(filter_(sqr(U())) - (sqr(filter_(U()))))); - - volSymmTensorField M(2.0*sqr(delta())*(filter_(magS*S) - 4.0*magSf*Sf)); - - volScalarField invT - ( - (1.0/(theta_.value()*delta()))*pow(flm_*fmm_, 1.0/8.0) - ); - - volScalarField LM(L && M); - - fvScalarMatrix flmEqn - ( - fvm::ddt(flm_) - + fvm::div(phi(), flm_) - == - invT*LM - - fvm::Sp(invT, flm_) - ); - - flmEqn.relax(); - flmEqn.solve(); - - bound(flm_, flm0_); - - volScalarField MM(M && M); - - fvScalarMatrix fmmEqn - ( - fvm::ddt(fmm_) - + fvm::div(phi(), fmm_) - == - invT*MM - - fvm::Sp(invT, fmm_) - ); - - fmmEqn.relax(); - fmmEqn.solve(); - - bound(fmm_, fmm0_); - - updateSubGridScaleFields(gradU); -} - - -bool dynLagrangian::read() -{ - if (GenEddyVisc::read()) - { - filter_.read(coeffDict()); - theta_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H b/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H deleted file mode 100644 index 3500c6880aa..00000000000 --- a/src/turbulenceModels/incompressible/LES/dynLagrangian/dynLagrangian.H +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::dynLagrangian - -Group - grpIcoLESTurbulence - -Description - Dynamic eddy-viscosity model with Lagrangian averaging for incompressible - flow - - \verbatim - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - D = symm(grad(U)) - nuSgs = (flm/fmm)*delta^2*sqrt(2)*|D| - nuEff = nuSgs + nu - - Two relaxation equations are used to evaluate flm and fmm: - - d/dt(flm) + div(U*flm) - = - (1/T)*(L && M - flm) - - d/dt(fmm) + div(U*fmm) - = - (1/T)*(M && M - fmm) - - where - - L = F(U.U) - F(U).F(U) - M = 2.0 delta^2 (F(|D|.D) - 4 F(|D|).F(D)) - T = 1.5*delta*(flm.fmm)^(-1.0/8.0) - - \endverbatim - - Reference: - \verbatim - "A Lagrangian dynamic subgrid-scale model of turbulence" - Charles Meneveau, - Thomas Lund, - William Cabot, - J. Fluid Mech (1996), vol 319, pp. 353-385 - \endverbatim - -SourceFiles - dynLagrangian.C - -\*---------------------------------------------------------------------------*/ - -#ifndef dynLagrangian_H -#define dynLagrangian_H - -#include "GenEddyVisc.H" -#include "simpleFilter.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class dynLagrangian Declaration -\*---------------------------------------------------------------------------*/ - -class dynLagrangian -: - public GenEddyVisc -{ - // Private data - - volScalarField flm_; - volScalarField fmm_; - - dimensionedScalar theta_; - - simpleFilter simpleFilter_; - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - dimensionedScalar flm0_; - dimensionedScalar fmm0_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields - ( - const tmp<volTensorField>& gradU - ); - - // Disallow default bitwise copy construct and assignment - dynLagrangian(const dynLagrangian&); - dynLagrangian& operator=(const dynLagrangian&); - - -public: - - //- Runtime type information - TypeName("dynLagrangian"); - - // Constructors - - //- Construct from components - dynLagrangian - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~dynLagrangian() - {} - - - // Member Functions - - //- Return SGS kinetic energy - tmp<volScalarField> k(const tmp<volTensorField>& gradU) const - { - return - pow(2.0*flm_/fmm_, 2.0/3.0) - * pow(ce_, -2.0/3.0) - * sqr(delta())*magSqr(dev(symm(gradU))); - } - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k(fvc::grad(U())); - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.C b/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.C deleted file mode 100644 index 269a204c554..00000000000 --- a/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.C +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "dynOneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(dynOneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, dynOneEqEddy, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void dynOneEqEddy::updateSubGridScaleFields -( - const volSymmTensorField& D, - const volScalarField& KK -) -{ - nuSgs_ = ck(D, KK)*sqrt(k_)*delta(); - nuSgs_.correctBoundaryConditions(); -} - - -volScalarField dynOneEqEddy::ck -( - const volSymmTensorField& D, - const volScalarField& KK -) const -{ - const volSymmTensorField LL - ( - simpleFilter_(dev(filter_(sqr(U())) - (sqr(filter_(U()))))) - ); - - const volSymmTensorField MM - ( - simpleFilter_(-2.0*delta()*sqrt(KK)*filter_(D)) - ); - - const volScalarField ck - ( - simpleFilter_(0.5*(LL && MM)) - /( - simpleFilter_(magSqr(MM)) - + dimensionedScalar("small", sqr(MM.dimensions()), VSMALL) - ) - ); - - tmp<volScalarField> tfld = 0.5*(mag(ck) + ck); - return tfld(); -} - - -volScalarField dynOneEqEddy::ce -( - const volSymmTensorField& D, - const volScalarField& KK -) const -{ - const volScalarField ce - ( - simpleFilter_(nuEff()*(filter_(magSqr(D)) - magSqr(filter_(D)))) - /simpleFilter_(pow(KK, 1.5)/(2.0*delta())) - ); - - tmp<volScalarField> tfld = 0.5*(mag(ce) + ce); - return tfld(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -dynOneEqEddy::dynOneEqEddy -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - simpleFilter_(U.mesh()), - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()) -{ - bound(k_, kMin_); - - const volScalarField KK(0.5*(filter_(magSqr(U)) - magSqr(filter_(U)))); - updateSubGridScaleFields(symm(fvc::grad(U)), KK); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void dynOneEqEddy::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); - - const volSymmTensorField D(symm(gradU)); - - volScalarField KK(0.5*(filter_(magSqr(U())) - magSqr(filter_(U())))); - KK.max(dimensionedScalar("small", KK.dimensions(), SMALL)); - - const volScalarField P(2.0*nuSgs_*magSqr(D)); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - P - - fvm::Sp(ce(D, KK)*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(D, KK); -} - - -bool dynOneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - filter_.read(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.H b/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.H deleted file mode 100644 index 1a084a6ce18..00000000000 --- a/src/turbulenceModels/incompressible/LES/dynOneEqEddy/dynOneEqEddy.H +++ /dev/null @@ -1,184 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::dynOneEqEddy - -Group - grpIcoLESTurbulence - -Description - Localised Dynamic One Equation Eddy Viscosity Model for incompressible - flows - - Eddy viscosity SGS model using a modeled balance equation to simulate - the behaviour of k, hence - \verbatim - d/dt(k) + div(U*k) - div(nuSgs*grad(k)) - = - -B*L - ce*rho*k^3/2/delta - and - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - where - nuSgs = cD*delta^2*||D|| - nuEff = nuSgs + nu - \endverbatim - - A dynamic procedure is here applied to evaluate ck and ce - \verbatim - ck=<L.M>/<M.M> - and - ce=<e*m>/<m*m> - where - K = 0.5*(F(U.U) - F(U).F(U)) - L = (F(U*U) - F(U)*F(U) - 0.33*K*I) - M = delta*(F(sqrt(k)*D) - 2*sqrt(K + filter(k))*F(D)) - m = pow(K + F(k), 3.0/2.0)/(2*delta) - F(pow(k, 3.0/2.0))/delta - e = 2*delta*ck*(F(sqrt(k)*(D && D)) - 2*sqrt(K + F(k))*(F(D) && F(D)))/ - \endverbatim - -SourceFiles - dynOneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef dynOneEqEddy_H -#define dynOneEqEddy_H - -#include "GenEddyVisc.H" -#include "simpleFilter.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class dynOneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class dynOneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - simpleFilter simpleFilter_; - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields - ( - const volSymmTensorField& D, - const volScalarField& KK - ); - - //- Calculate ck, ce by filtering the velocity field U. - volScalarField ck - ( - const volSymmTensorField&, - const volScalarField& - ) const; - - volScalarField ce - ( - const volSymmTensorField&, - const volScalarField& - ) const; - - // Disallow default bitwise copy construct and assignment - dynOneEqEddy(const dynOneEqEddy&); - dynOneEqEddy& operator=(const dynOneEqEddy&); - - -public: - - //- Runtime type information - TypeName("dynOneEqEddy"); - - // Constructors - - //- Construct from components - dynOneEqEddy - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~dynOneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C b/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C deleted file mode 100644 index 61fc5b55043..00000000000 --- a/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.C +++ /dev/null @@ -1,209 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "homogeneousDynOneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(homogeneousDynOneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, homogeneousDynOneEqEddy, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void homogeneousDynOneEqEddy::updateSubGridScaleFields -( - const volSymmTensorField& D -) -{ - nuSgs_ = ck(D)*sqrt(k_)*delta(); - nuSgs_.correctBoundaryConditions(); -} - - -dimensionedScalar homogeneousDynOneEqEddy::ck -( - const volSymmTensorField& D -) const -{ - tmp<volScalarField> KK = 0.5*(filter_(magSqr(U())) - magSqr(filter_(U()))); - - const volSymmTensorField MM - ( - delta()*(filter_(sqrt(k_)*D) - 2*sqrt(KK + filter_(k_))*filter_(D)) - ); - - dimensionedScalar MMMM = average(magSqr(MM)); - - if (MMMM.value() > VSMALL) - { - tmp<volSymmTensorField> LL = dev(filter_(sqr(U())) - sqr(filter_(U()))); - - return average(LL && MM)/MMMM; - } - else - { - return 0.0; - } -} - - -dimensionedScalar homogeneousDynOneEqEddy::ce -( - const volSymmTensorField& D -) const -{ - const volScalarField KK - ( - 0.5*(filter_(magSqr(U())) - magSqr(filter_(U()))) - ); - - const volScalarField mm - ( - pow(KK + filter_(k_), 1.5)/(2*delta()) - filter_(pow(k_, 1.5))/delta() - ); - - dimensionedScalar mmmm = average(magSqr(mm)); - - if (mmmm.value() > VSMALL) - { - tmp<volScalarField> ee = - ( - 2*delta()*ck(D) - * ( - filter_(sqrt(k_)*magSqr(D)) - - 2*sqrt(KK + filter_(k_))*magSqr(filter_(D)) - ) - ); - - return average(ee*mm)/mmmm; - } - else - { - return 0.0; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -homogeneousDynOneEqEddy::homogeneousDynOneEqEddy -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()) -{ - bound(k_, kMin_); - - updateSubGridScaleFields(symm(fvc::grad(U))); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void homogeneousDynOneEqEddy::correct(const tmp<volTensorField>& tgradU) -{ - const volTensorField& gradU = tgradU(); - - GenEddyVisc::correct(gradU); - - const volSymmTensorField D(symm(gradU)); - - const volScalarField P(2.0*nuSgs_*magSqr(D)); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - P - - fvm::Sp(ce(D)*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(D); -} - - -bool homogeneousDynOneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - filter_.read(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H b/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H deleted file mode 100644 index ea196dbe10b..00000000000 --- a/src/turbulenceModels/incompressible/LES/homogeneousDynOneEqEddy/homogeneousDynOneEqEddy.H +++ /dev/null @@ -1,162 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::homogeneousDynOneEqEddy - -Group - grpIcoLESTurbulence - -Description - One Equation Eddy Viscosity Model for incompressible flows. - - Eddy viscosity SGS model using a modeled balance equation to simulate - the behaviour of k. - - Thus - \verbatim - d/dt(k) + div(U*k) - div(nuSgs*grad(k)) - = - -B*L - ce*k^3/2/delta - - and - - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - D = symm(grad(U)); - nuSgs = ck*sqrt(k)*delta - nuEff = nuSgs + nu - \endverbatim - -SourceFiles - homogeneousDynOneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef homogeneousDynOneEqEddy_H -#define homogeneousDynOneEqEddy_H - -#include "GenEddyVisc.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class homogeneousDynOneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class homogeneousDynOneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volSymmTensorField& D); - - //- Calculate ck, ce by filtering the velocity field U. - dimensionedScalar ck(const volSymmTensorField& D) const; - dimensionedScalar ce(const volSymmTensorField& D) const; - - // Disallow default bitwise copy construct and assignment - homogeneousDynOneEqEddy(const homogeneousDynOneEqEddy&); - homogeneousDynOneEqEddy& operator=(const homogeneousDynOneEqEddy&); - - -public: - - //- Runtime type information - TypeName("homogeneousDynOneEqEddy"); - - // Constructors - - //- Construct from components - homogeneousDynOneEqEddy - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~homogeneousDynOneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C b/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C deleted file mode 100644 index 98945861932..00000000000 --- a/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C +++ /dev/null @@ -1,181 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "homogeneousDynSmagorinsky.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(homogeneousDynSmagorinsky, 0); -addToRunTimeSelectionTable(LESModel, homogeneousDynSmagorinsky, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void homogeneousDynSmagorinsky::updateSubGridScaleFields -( - const volSymmTensorField& D -) -{ - nuSgs_ = cD(D)*sqr(delta())*sqrt(magSqr(D)); - nuSgs_.correctBoundaryConditions(); -} - - -dimensionedScalar homogeneousDynSmagorinsky::cD -( - const volSymmTensorField& D -) const -{ - const volSymmTensorField MM - ( - sqr(delta())*(filter_(mag(D)*(D)) - 4*mag(filter_(D))*filter_(D)) - ); - - dimensionedScalar MMMM = average(magSqr(MM)); - - if (MMMM.value() > VSMALL) - { - tmp<volSymmTensorField> LL = - dev(filter_(sqr(U())) - (sqr(filter_(U())))); - - return 0.5*average(LL && MM)/MMMM; - } - else - { - return 0.0; - } -} - - -dimensionedScalar homogeneousDynSmagorinsky::cI -( - const volSymmTensorField& D -) const -{ - const volScalarField mm - ( - sqr(delta())*(4*sqr(mag(filter_(D))) - filter_(sqr(mag(D)))) - ); - - dimensionedScalar mmmm = average(magSqr(mm)); - - if (mmmm.value() > VSMALL) - { - tmp<volScalarField> KK = - 0.5*(filter_(magSqr(U())) - magSqr(filter_(U()))); - - return average(KK*mm)/mmmm; - } - else - { - return 0.0; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -homogeneousDynSmagorinsky::homogeneousDynSmagorinsky -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()) -{ - bound(k_, kMin_); - - updateSubGridScaleFields(dev(symm(fvc::grad(U)))); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void homogeneousDynSmagorinsky::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); - - const volSymmTensorField D(dev(symm(gradU))); - - k_ = cI(D)*sqr(delta())*magSqr(D); - bound(k_, kMin_); - - updateSubGridScaleFields(D); -} - - -bool homogeneousDynSmagorinsky::read() -{ - if (GenEddyVisc::read()) - { - filter_.read(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.H b/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.H deleted file mode 100644 index e2ef1b362b6..00000000000 --- a/src/turbulenceModels/incompressible/LES/homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.H +++ /dev/null @@ -1,166 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::homogeneousDynSmagorinsky - -Group - grpIcoLESTurbulence - -Description - The Isochoric homogeneous dynamic Smagorinsky Model for - incompressible flows. - - Algebraic eddy viscosity SGS model founded on the assumption that - local equilibrium prevails. - Thus, - \verbatim - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - k = cI*delta^2*||D||^2 - nuSgs = cD*delta^2*||D|| - nuEff = nuSgs + nu - - In the dynamic version of the choric Smagorinsky model - the coefficients cI and cD are calculated during the simulation, - - cI=<K*m>/<m*m> - - and - - cD=1/2*<L.M>/<M.M>, - - where - - K = 0.5*(F(U.U) - F(U).F(U)) - m = delta^2*(4*||F(D)||^2 - F(||D||^2)) - L = dev(F(U*U) - F(U)*F(U)) - M = delta^2*(F(||D||*dev(D)) - 4*||F(D)||*F(dev(D))) - - The averaging <...> is over the whole domain, i.e. homogeneous turbulence - is assumed - \endverbatim - -SourceFiles - homogeneousDynSmagorinsky.C - -\*---------------------------------------------------------------------------*/ - -#ifndef homogeneousDynSmagorinsky_H -#define homogeneousDynSmagorinsky_H - -#include "Smagorinsky.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class homogeneousDynSmagorinsky Declaration -\*---------------------------------------------------------------------------*/ - -class homogeneousDynSmagorinsky -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volSymmTensorField& D); - - //- Calculate coefficients cD, cI from filtering velocity field - dimensionedScalar cD(const volSymmTensorField& D) const; - dimensionedScalar cI(const volSymmTensorField& D) const; - - // Disallow default bitwise copy construct and assignment - homogeneousDynSmagorinsky(const homogeneousDynSmagorinsky&); - homogeneousDynSmagorinsky& operator=(const homogeneousDynSmagorinsky&); - - -public: - - //- Runtime type information - TypeName("homogeneousDynSmagorinsky"); - - // Constructors - - //- Construct from components - homogeneousDynSmagorinsky - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~homogeneousDynSmagorinsky() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.C b/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.C deleted file mode 100644 index daa17b64064..00000000000 --- a/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.C +++ /dev/null @@ -1,66 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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 "incompressibleLESdelta.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineRunTimeSelectionTable(LESdelta, dictionary); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LESdelta::LESdelta(const word& name, const fvMesh& mesh) -: - foamLESdelta(name, mesh) -{} - - -// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // - -Foam::autoPtr<foamLESdelta> LESdelta::New -( - const word& name, - const fvMesh& mesh, - const dictionary& dict -) -{ - return foamLESdelta::New(name, mesh, dict, *dictionaryConstructorTablePtr_); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.H b/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.H deleted file mode 100644 index ca1d5240f3d..00000000000 --- a/src/turbulenceModels/incompressible/LES/incompressibleLESdelta/incompressibleLESdelta.H +++ /dev/null @@ -1,109 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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::incompressible::LESdelta - -Description - Abstract base class for incompressible LES deltas - -SourceFiles - incompressibleLESdelta.C - -\*---------------------------------------------------------------------------*/ - -#ifndef incompressibleLESdelta_H -#define incompressibleLESdelta_H - -#include "LESdelta.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// To avoid macro problems typedef scoped class -typedef Foam::LESdelta foamLESdelta; - -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class LESdelta Declaration -\*---------------------------------------------------------------------------*/ - -class LESdelta -: - public foamLESdelta -{ - -public: - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - foamLESdelta, - dictionary, - ( - const word& name, - const fvMesh& mesh, - const dictionary& LESdeltaDict - ), - (name, mesh, LESdeltaDict) - ); - - // Constructors - - //- Construct from name and mesh - LESdelta(const word& name, const fvMesh& mesh); - - - // Selectors - - //- Return a reference to the selected LES delta - static autoPtr<foamLESdelta> New - ( - const word& name, - const fvMesh& mesh, - const dictionary& dict - ); - - - //- Destructor - virtual ~LESdelta() - {} -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C deleted file mode 100644 index ad7daf84ae2..00000000000 --- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.C +++ /dev/null @@ -1,492 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "kOmegaSSTSAS.H" -#include "addToRunTimeSelectionTable.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(kOmegaSSTSAS, 0); -addToRunTimeSelectionTable(LESModel, kOmegaSSTSAS, dictionary); - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void kOmegaSSTSAS::updateSubGridScaleFields(const volScalarField& S2) -{ - nuSgs_ == a1_*k_/max(a1_*omega_, F2()*sqrt(S2)); - nuSgs_.correctBoundaryConditions(); -} - - -tmp<volScalarField> kOmegaSSTSAS::F1(const volScalarField& CDkOmega) const -{ - tmp<volScalarField> CDkOmegaPlus = max - ( - CDkOmega, - dimensionedScalar("1.0e-10", dimless/sqr(dimTime), 1.0e-10) - ); - - tmp<volScalarField> arg1 = min - ( - min - ( - max - ( - (scalar(1)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*nu()/(sqr(y_)*omega_) - ), - (4*alphaOmega2_)*k_/(CDkOmegaPlus*sqr(y_)) - ), - scalar(10) - ); - - return tanh(pow4(arg1)); -} - - -tmp<volScalarField> kOmegaSSTSAS::F2() const -{ - tmp<volScalarField> arg2 = min - ( - max - ( - (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*nu()/(sqr(y_)*omega_) - ), - scalar(100) - ); - - return tanh(sqr(arg2)); -} - - -tmp<volScalarField> kOmegaSSTSAS::Lvk2 -( - const volScalarField& S2 -) const -{ - return max - ( - kappa_*sqrt(S2) - /( - mag(fvc::laplacian(U())) - + dimensionedScalar - ( - "ROOTVSMALL", - dimensionSet(0, -1 , -1, 0, 0, 0, 0), - ROOTVSMALL - ) - ), - Cs_*delta() - ); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kOmegaSSTSAS::kOmegaSSTSAS -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - - alphaK1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK1", - coeffDict_, - 0.85034 - ) - ), - alphaK2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK2", - coeffDict_, - 1.0 - ) - ), - alphaOmega1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega1", - coeffDict_, - 0.5 - ) - ), - alphaOmega2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega2", - coeffDict_, - 0.85616 - ) - ), - gamma1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma1", - coeffDict_, - 0.5532 - ) - ), - gamma2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma2", - coeffDict_, - 0.4403 - ) - ), - beta1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta1", - coeffDict_, - 0.075 - ) - ), - beta2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta2", - coeffDict_, - 0.0828 - ) - ), - betaStar_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "betaStar", - coeffDict_, - 0.09 - ) - ), - a1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "a1", - coeffDict_, - 0.31 - ) - ), - c1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "c1", - coeffDict_, - 10.0 - ) - ), - Cs_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cs", - coeffDict_, - 0.262 - ) - ), - alphaPhi_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaPhi", - coeffDict_, - 0.666667 - ) - ), - zetaTilda2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "zetaTilda2", - coeffDict_, - 1.755 - ) - ), - FSAS_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "FSAS", - coeffDict_, - 1.25 - ) - ), - - omegaMin_("omegaMin", dimless/dimTime, SMALL), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - *this, - 0.41 - ) - ), - - y_(wallDist::New(mesh_).y()), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - omega_ - ( - IOobject - ( - "omega", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - nuSgs_ - ( - IOobject - ( - "nuSgs", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ) -{ - omegaMin_.readIfPresent(*this); - - bound(k_, kMin_); - bound(omega_, omegaMin_); - - updateSubGridScaleFields(2.0*magSqr(symm(fvc::grad(U)))); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void kOmegaSSTSAS::correct(const tmp<volTensorField>& gradU) -{ - LESModel::correct(gradU); - - volScalarField S2(2.0*magSqr(symm(gradU()))); - gradU.clear(); - - volVectorField gradK(fvc::grad(k_)); - volVectorField gradOmega(fvc::grad(omega_)); - volScalarField L(sqrt(k_)/(pow025(Cmu_)*omega_)); - volScalarField CDkOmega((2.0*alphaOmega2_)*(gradK & gradOmega)/omega_); - volScalarField F1(this->F1(CDkOmega)); - volScalarField G(GName(), nuSgs_*S2); - - // Turbulent kinetic energy equation - { - fvScalarMatrix kEqn - ( - fvm::ddt(k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(F1), k_) - == - min(G, c1_*betaStar_*k_*omega_) - - fvm::Sp(betaStar_*omega_, k_) - ); - - kEqn.relax(); - kEqn.solve(); - } - bound(k_, kMin_); - - tmp<volScalarField> grad_omega_k = max - ( - magSqr(gradOmega)/sqr(omega_), - magSqr(gradK)/sqr(k_) - ); - - // Turbulent frequency equation - { - fvScalarMatrix omegaEqn - ( - fvm::ddt(omega_) - + fvm::div(phi(), omega_) - - fvm::laplacian(DomegaEff(F1), omega_) - == - gamma(F1)*S2 - - fvm::Sp(beta(F1)*omega_, omega_) - - fvm::SuSp // cross diffusion term - ( - (F1 - scalar(1))*CDkOmega/omega_, - omega_ - ) - + FSAS_ - *max - ( - dimensionedScalar("zero",dimensionSet(0, 0, -2, 0, 0), 0.0), - zetaTilda2_*kappa_*S2*sqr(L/Lvk2(S2)) - - 2.0/alphaPhi_*k_*grad_omega_k - ) - ); - - omegaEqn.relax(); - omegaEqn.solve(); - } - bound(omega_, omegaMin_); - - updateSubGridScaleFields(S2); -} - - -tmp<volScalarField> kOmegaSSTSAS::epsilon() const -{ - return 2.0*nuEff()*magSqr(symm(fvc::grad(U()))); -} - - -tmp<volSymmTensorField> kOmegaSSTSAS::B() const -{ - return ((2.0/3.0)*I)*k() - nuSgs()*twoSymm(fvc::grad(U())); -} - - -tmp<volSymmTensorField> kOmegaSSTSAS::devReff() const -{ - return -nuEff()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> kOmegaSSTSAS::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> kOmegaSSTSAS::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool kOmegaSSTSAS::read() -{ - if (LESModel::read()) - { - alphaK1_.readIfPresent(coeffDict()); - alphaK2_.readIfPresent(coeffDict()); - alphaOmega1_.readIfPresent(coeffDict()); - alphaOmega2_.readIfPresent(coeffDict()); - gamma1_.readIfPresent(coeffDict()); - gamma2_.readIfPresent(coeffDict()); - beta1_.readIfPresent(coeffDict()); - beta2_.readIfPresent(coeffDict()); - betaStar_.readIfPresent(coeffDict()); - a1_.readIfPresent(coeffDict()); - c1_.readIfPresent(coeffDict()); - Cs_.readIfPresent(coeffDict()); - alphaPhi_.readIfPresent(coeffDict()); - zetaTilda2_.readIfPresent(coeffDict()); - FSAS_.readIfPresent(coeffDict()); - - omegaMin_.readIfPresent(*this); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H b/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H deleted file mode 100644 index b10a0e9ed1c..00000000000 --- a/src/turbulenceModels/incompressible/LES/kOmegaSSTSAS/kOmegaSSTSAS.H +++ /dev/null @@ -1,292 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::kOmegaSSTSAS - -Group - grpIcoLESTurbulence - -Description - kOmegaSSTSAS LES turbulence model for incompressible flows - based on: - - "Evaluation of the SST-SAS model: channel flow, asymmetric diffuser - and axi-symmetric hill". - European Conference on Computational Fluid Dynamics ECCOMAS CFD 2006. - Lars Davidson - - - The first term of the Qsas expression is corrected following: - - DESider A European Effort on Hybrid RANS-LES Modelling: - Results of the European-Union Funded Project, 2004 - 2007 - (Notes on Numerical Fluid Mechanics and Multidisciplinary Design). - Chapter 2, section 8 Formulation of the Scale-Adaptive Simulation (SAS) - Model during the DESIDER Project. Published in Springer-Verlag Berlin - Heidelberg 2009. - F. R. Menter and Y. Egorov. - - -SourceFiles - kOmegaSSTSAS.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kOmegaSSTSAS_H -#define kOmegaSSTSAS_H - -#include "LESModel.H" -#include "volFields.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class kOmegaSSTSAS Declaration -\*---------------------------------------------------------------------------*/ - -class kOmegaSSTSAS -: - public LESModel -{ - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volScalarField& D); - - // Disallow default bitwise copy construct and assignment - kOmegaSSTSAS(const kOmegaSSTSAS&); - kOmegaSSTSAS& operator=(const kOmegaSSTSAS&); - - -protected: - - // Protected data - - // Model constants - - dimensionedScalar alphaK1_; - dimensionedScalar alphaK2_; - - dimensionedScalar alphaOmega1_; - dimensionedScalar alphaOmega2_; - - dimensionedScalar gamma1_; - dimensionedScalar gamma2_; - - dimensionedScalar beta1_; - dimensionedScalar beta2_; - - dimensionedScalar betaStar_; - - dimensionedScalar a1_; - dimensionedScalar c1_; - dimensionedScalar Cs_; - - dimensionedScalar alphaPhi_; - dimensionedScalar zetaTilda2_; - dimensionedScalar FSAS_; - - dimensionedScalar omegaMin_; - - dimensionedScalar Cmu_; - dimensionedScalar kappa_; - - - // Fields - - //- Wall distance - // Note: different to wall distance in parent RASModel - // which is for near-wall cells only - const volScalarField& y_; - - volScalarField k_; - volScalarField omega_; - volScalarField nuSgs_; - - - // Protected Member Functions - - tmp<volScalarField> Lvk2 - ( - const volScalarField& S2 - ) const; - - tmp<volScalarField> F1(const volScalarField& CDkOmega) const; - tmp<volScalarField> F2() const; - - tmp<volScalarField> blend - ( - const volScalarField& F1, - const dimensionedScalar& psi1, - const dimensionedScalar& psi2 - ) const - { - return F1*(psi1 - psi2) + psi2; - } - - tmp<volScalarField> alphaK - ( - const volScalarField& F1 - ) const - { - return blend(F1, alphaK1_, alphaK2_); - } - - tmp<volScalarField> alphaOmega - ( - const volScalarField& F1 - ) const - { - return blend(F1, alphaOmega1_, alphaOmega2_); - } - - tmp<volScalarField> beta - ( - const volScalarField& F1 - ) const - { - return blend(F1, beta1_, beta2_); - } - - tmp<volScalarField> gamma - ( - const volScalarField& F1 - ) const - { - return blend(F1, gamma1_, gamma2_); - } - - -public: - - //- Runtime type information - TypeName("kOmegaSSTSAS"); - - - // Constructors - - //- Construct from components - kOmegaSSTSAS - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~kOmegaSSTSAS() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return omega - virtual tmp<volScalarField> omega() const - { - return omega_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", alphaK(F1)*nuSgs_ + nu()) - ); - } - - //- Return the effective diffusivity for omega - tmp<volScalarField> DomegaEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DomegaEff", alphaOmega(F1)*nuSgs_ + nu()) - ); - } - - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const; - - //- Return SGS viscosity - virtual tmp<volScalarField> nuSgs() const - { - return nuSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations (k-w) and correct the turbulence - // viscosity - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/laminar/laminar.C b/src/turbulenceModels/incompressible/LES/laminar/laminar.C deleted file mode 100644 index b0176e804d6..00000000000 --- a/src/turbulenceModels/incompressible/LES/laminar/laminar.C +++ /dev/null @@ -1,183 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "laminar.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(laminar, 0); -addToRunTimeSelectionTable(LESModel, laminar, dictionary); - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -laminar::laminar -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> laminar::k() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("k", sqr(U().dimensions()), 0.0) - ) - ); -} - -tmp<volScalarField> laminar::epsilon() const -{ - return 2*nu()*magSqr(symm(fvc::grad(U()))); -} - -tmp<volScalarField> laminar::nuSgs() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "nuSgs", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("nuSgs", nu()().dimensions(), 0.0) - ) - ); -} - -tmp<volScalarField> laminar::nuEff() const -{ - return tmp<volScalarField> - ( - new volScalarField("nuEff", nu()) - ); -} - - -tmp<volSymmTensorField> laminar::B() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "B", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedSymmTensor - ( - "B", sqr(U().dimensions()), symmTensor::zero - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::devReff() const -{ - return -nu()*dev(twoSymm(fvc::grad(U()))); -} - - -tmp<fvVectorMatrix> laminar::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nu(), U) - - fvc::div(nu()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool laminar::read() -{ - return LESModel::read(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/laminar/laminar.H b/src/turbulenceModels/incompressible/LES/laminar/laminar.H deleted file mode 100644 index 7a7f501d4f2..00000000000 --- a/src/turbulenceModels/incompressible/LES/laminar/laminar.H +++ /dev/null @@ -1,138 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::laminar - -Description - LES model for laminar incompressible flow. - It simply returns laminar properties. - -SourceFiles - laminar.C - -\*---------------------------------------------------------------------------*/ - -#ifndef lesLaminar_H -#define lesLaminar_H - -#include "LESModel.H" -#include "volFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class laminar Declaration -\*---------------------------------------------------------------------------*/ - -class laminar -: - public LESModel -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - laminar(const laminar&); - laminar& operator=(const laminar&); - - -public: - - //- Runtime type information - TypeName("laminar"); - - - // Constructors - - //- Construct from components - laminar - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~laminar() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const; - - //- Return sub-grid disipation rate - virtual tmp<volScalarField> epsilon() const; - - //- Return SGS viscosity - virtual tmp<volScalarField> nuSgs() const; - - //- Return the effective viscosity - virtual tmp<volScalarField> nuEff() const; - - //- Return the sub-grid stress tensor B. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Read LESProperties dictionary - bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.C b/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.C deleted file mode 100644 index 7e82fe9fdcc..00000000000 --- a/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.C +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "mixedSmagorinsky.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(mixedSmagorinsky, 0); -addToRunTimeSelectionTable(LESModel, mixedSmagorinsky, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -mixedSmagorinsky::mixedSmagorinsky -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - scaleSimilarity(U, phi, transport), - Smagorinsky(U, phi, transport) -{ - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> mixedSmagorinsky::k() const -{ - return - ( - scaleSimilarity::k() - + Smagorinsky::k() - ); -} - - -tmp<volScalarField> mixedSmagorinsky::epsilon() const -{ - return - ( - scaleSimilarity::epsilon() - + Smagorinsky::epsilon() - ); -} - - -tmp<volSymmTensorField> mixedSmagorinsky::B() const -{ - return - ( - scaleSimilarity::B() - + Smagorinsky::B() - ); -} - - -tmp<volSymmTensorField> mixedSmagorinsky::devReff() const -{ - return - ( - scaleSimilarity::devReff() - + Smagorinsky::devReff() - ); -} - - -tmp<fvVectorMatrix> mixedSmagorinsky::divDevReff -( - volVectorField& U -) const -{ - return - ( - scaleSimilarity::divDevReff(U) - + Smagorinsky::divDevReff(U) - ); -} - - -tmp<fvVectorMatrix> mixedSmagorinsky::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - return - ( - scaleSimilarity::divDevRhoReff(rho, U) - + Smagorinsky::divDevRhoReff(rho, U) - ); -} - - -void mixedSmagorinsky::correct(const tmp<volTensorField>& gradU) -{ - scaleSimilarity::correct(gradU); - Smagorinsky::correct(gradU); -} - - -bool mixedSmagorinsky::read() -{ - if (LESModel::read()) - { - scaleSimilarity::read(); - Smagorinsky::read(); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.H b/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.H deleted file mode 100644 index 8a30f9deac0..00000000000 --- a/src/turbulenceModels/incompressible/LES/mixedSmagorinsky/mixedSmagorinsky.H +++ /dev/null @@ -1,167 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::mixedSmagorinsky - -Group - grpIcoLESTurbulence - -Description - The mixed Isochoric Smagorinsky Model for incompressible flows. - - The mixed model is a linear combination of an eddy viscosity model - (Smagorinsky) with a scale similarity model. Hence - \verbatim - B = (L + C) + R = (F(v*v) - F(v)*F(v)) + R - \endverbatim - - The algebraic eddy viscosity SGS model is founded on the assumption - that local equilibrium prevails, hence - \verbatim - R = 2/3*k*I - 2*nuEff*dev(D) - where - k = cI*delta^2*||D||^2 - nuEff = ck*sqrt(k)*delta + nu - \endverbatim - - The Leonard and cross contributions are incorporated - by adding, - \verbatim - + div(((filter(U*U) - filter(U)*filter(U)) - - 0.333*I*tr(filter(U*U) - filter(U)*filter(U)))) - + div((filter(U*epsilon) - filter(U)*filter(epsilon))) - \endverbatim - to the rhs. of the equations. - -SourceFiles - mixedSmagorinsky.C - -\*---------------------------------------------------------------------------*/ - -#ifndef mixedSmagorinsky_H -#define mixedSmagorinsky_H - -#include "scaleSimilarity.H" -#include "Smagorinsky.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class mixedSmagorinsky Declaration -\*---------------------------------------------------------------------------*/ - -class mixedSmagorinsky -: - public scaleSimilarity, - public Smagorinsky -{ - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - mixedSmagorinsky(const mixedSmagorinsky&); - mixedSmagorinsky& operator=(const mixedSmagorinsky&); - -public: - - //- Runtime type information - TypeName("mixedSmagorinsky"); - - - // Constructors - - //- Construct from components - mixedSmagorinsky - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~mixedSmagorinsky() - {} - - - // Member Functions - - //- Return the SGS turbulent kinetic energy. - virtual tmp<volScalarField> k() const; - - //- Return the SGS turbulent disipation rate. - virtual tmp<volScalarField> epsilon() const; - - //- Return the SGS viscosity. - virtual tmp<volScalarField> nuSgs() const - { - return nuSgs_; - } - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.C b/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.C deleted file mode 100644 index 2e95004a288..00000000000 --- a/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.C +++ /dev/null @@ -1,146 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "oneEqEddy.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(oneEqEddy, 0); -addToRunTimeSelectionTable(LESModel, oneEqEddy, dictionary); - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void oneEqEddy::updateSubGridScaleFields() -{ - nuSgs_ = ck_*sqrt(k_)*delta(); - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -oneEqEddy::oneEqEddy -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - ck_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "ck", - coeffDict_, - 0.094 - ) - ) -{ - bound(k_, kMin_); - - updateSubGridScaleFields(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void oneEqEddy::correct(const tmp<volTensorField>& gradU) -{ - GenEddyVisc::correct(gradU); - - volScalarField G(GName(), 2.0*nuSgs_*magSqr(symm(gradU))); - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi(), k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::Sp(ce_*sqrt(k_)/delta(), k_) - ); - - kEqn().relax(); - kEqn().solve(); - - bound(k_, kMin_); - - updateSubGridScaleFields(); -} - - -bool oneEqEddy::read() -{ - if (GenEddyVisc::read()) - { - ck_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.H b/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.H deleted file mode 100644 index fef3986d4eb..00000000000 --- a/src/turbulenceModels/incompressible/LES/oneEqEddy/oneEqEddy.H +++ /dev/null @@ -1,154 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::oneEqEddy - -Group - grpIcoLESTurbulence - -Description - One Equation Eddy Viscosity Model for incompressible flows - - Eddy viscosity SGS model using a modeled balance equation to simulate the - behaviour of k, hence, - \verbatim - d/dt(k) + div(U*k) - div(nuEff*grad(k)) - = - -D:B - ce*k^(3/2)/delta - - and - - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - D = symm(grad(U)); - nuSgs = ck*sqrt(k)*delta - nuEff = nuSgs + nu - \endverbatim - -SourceFiles - oneEqEddy.C - -\*---------------------------------------------------------------------------*/ - -#ifndef oneEqEddy_H -#define oneEqEddy_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class oneEqEddy Declaration -\*---------------------------------------------------------------------------*/ - -class oneEqEddy -: - public GenEddyVisc -{ - // Private data - - volScalarField k_; - - dimensionedScalar ck_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(); - - // Disallow default bitwise copy construct and assignment - oneEqEddy(const oneEqEddy&); - oneEqEddy& operator=(const oneEqEddy&); - - -public: - - //- Runtime type information - TypeName("oneEqEddy"); - - // Constructors - - //- Construct from components - oneEqEddy - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~oneEqEddy() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nuSgs_ + nu()) - ); - } - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>& gradU); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.C b/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.C deleted file mode 100644 index 12c6b4f3131..00000000000 --- a/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.C +++ /dev/null @@ -1,129 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "scaleSimilarity.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(scaleSimilarity, 0); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -scaleSimilarity::scaleSimilarity -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - filterPtr_(LESfilter::New(U.mesh(), coeffDict())), - filter_(filterPtr_()) -{ - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> scaleSimilarity::k() const -{ - return(0.5*(filter_(magSqr(U())) - magSqr(filter_(U())))); -} - - -tmp<volScalarField> scaleSimilarity::epsilon() const -{ - tmp<volSymmTensorField> D = symm(fvc::grad(U())); - - return((filter_(sqr(U())) - sqr(filter_(U()))) && D); -} - - -tmp<volSymmTensorField> scaleSimilarity::B() const -{ - return(filter_(sqr(U())) - sqr(filter_(U()))); -} - - -tmp<volSymmTensorField> scaleSimilarity::devReff() const -{ - return dev(B()); -} - - -tmp<fvVectorMatrix> scaleSimilarity::divDevReff(volVectorField& U) const -{ - return fvm::Su(fvc::div(devReff()), U); -} - - -tmp<fvVectorMatrix> scaleSimilarity::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - return fvm::Su(fvc::div(rho*devReff()), U); -} - - -void scaleSimilarity::correct(const tmp<volTensorField>&) -{} - - -bool scaleSimilarity::read() -{ - if (LESModel::read()) - { - filter_.read(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.H b/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.H deleted file mode 100644 index 94e9367fe24..00000000000 --- a/src/turbulenceModels/incompressible/LES/scaleSimilarity/scaleSimilarity.H +++ /dev/null @@ -1,146 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::scaleSimilarity - -Group - grpIcoLESTurbulence - -Description - General base class for all scale similarity models - for incompressible flows. - - Since such models do not work without additional eddy viscosity terms, - this class must be combined with an eddy viscosity model of some form. - -SourceFiles - scaleSimilarity.C - -\*---------------------------------------------------------------------------*/ - -#ifndef scaleSimilarity_H -#define scaleSimilarity_H - -#include "LESModel.H" -#include "LESfilter.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class scaleSimilarity Declaration -\*---------------------------------------------------------------------------*/ - -class scaleSimilarity -: - virtual public LESModel -{ - // Private data - - autoPtr<LESfilter> filterPtr_; - LESfilter& filter_; - - - // Private Member Functions - - // Disallow default bitwise copy construct and assignment - scaleSimilarity(const scaleSimilarity&); - scaleSimilarity& operator=(const scaleSimilarity&); - - -public: - - //- Runtime type information - TypeName("scaleSimilarity"); - - // Constructors - - //- Construct from components - scaleSimilarity - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~scaleSimilarity() - {} - - - // Member Functions - - //- Return the SGS turbulent kinetic energy. - virtual tmp<volScalarField> k() const; - - //- Return the SGS turbulent dissipation. - virtual tmp<volScalarField> epsilon() const; - - //- Return the sub-grid stress tensor. - virtual tmp<volSymmTensorField> B() const; - - //- Return the effective sub-grid turbulence stress tensor - // including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the deviatoric part of the effective sub-grid - // turbulence stress tensor including the laminar stress - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>&); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.C b/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.C deleted file mode 100644 index 80ffc16c5fa..00000000000 --- a/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.C +++ /dev/null @@ -1,174 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "spectEddyVisc.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(spectEddyVisc, 0); -addToRunTimeSelectionTable(LESModel, spectEddyVisc, dictionary); - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void spectEddyVisc::updateSubGridScaleFields(const volTensorField& gradU) -{ - const volScalarField Re(sqr(delta())*mag(symm(gradU))/nu()); - for (label i=0; i<5; i++) - { - nuSgs_ = - nu() - /( - scalar(1) - - exp(-cB_*pow(nu()/(nuSgs_ + nu()), 1.0/3.0)*pow(Re, -2.0/3.0)) - ); - } - - nuSgs_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -spectEddyVisc::spectEddyVisc -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - LESModel(modelName, U, phi, transport, turbulenceModelName), - GenEddyVisc(U, phi, transport), - - cB_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cB", - coeffDict_, - 8.22 - ) - ), - cK1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cK1", - coeffDict_, - 0.83 - ) - ), - cK2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cK2", - coeffDict_, - 1.03 - ) - ), - cK3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cK3", - coeffDict_, - 4.75 - ) - ), - cK4_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "cK4", - coeffDict_, - 2.55 - ) - ) -{ - printCoeffs(); - - updateSubGridScaleFields(fvc::grad(U)); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> spectEddyVisc::k() const -{ - const volScalarField eps(2*nuEff()*magSqr(symm(fvc::grad(U())))); - - return - cK1_*pow(delta()*eps, 2.0/3.0) - *exp(-cK2_*pow(delta(), -4.0/3.0)*nu()/pow(eps, 1.0/3.0)) - - cK3_*sqrt(eps*nu()) - *erfc(cK4_*pow(delta(), -2.0/3.0)*sqrt(nu())*pow(eps, -1.0/6.0)); -} - - -void spectEddyVisc::correct(const tmp<volTensorField>& gradU) -{ - GenEddyVisc::correct(gradU); - updateSubGridScaleFields(gradU()); -} - - -bool spectEddyVisc::read() -{ - if (GenEddyVisc::read()) - { - cB_.readIfPresent(coeffDict()); - cK1_.readIfPresent(coeffDict()); - cK2_.readIfPresent(coeffDict()); - cK3_.readIfPresent(coeffDict()); - cK4_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.H b/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.H deleted file mode 100644 index 7428f5667ed..00000000000 --- a/src/turbulenceModels/incompressible/LES/spectEddyVisc/spectEddyVisc.H +++ /dev/null @@ -1,144 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::LESModels::spectEddyVisc - -Group - grpIcoLESTurbulence - -Description - The Isochoric spectral Eddy Viscosity Model for incompressible flows. - - Algebraic eddy viscosity SGS model founded on the assumption that - local equilibrium prevail and that viscous effects may be of importance. - - Thus, - \verbatim - B = 2/3*k*I - 2*nuSgs*dev(D) - Beff = 2/3*k*I - 2*nuEff*dev(D) - - where - - k = cK1*delta^(2/3)*eps^(2/3)*exp(-cK2*delta^(4/3)*nu*eps^(-1/3)) - - ck3*sqrt(eps*nu)*erfc(ck4*delta^(-2/3)*sqrt(nu)*eps^(-1/6))) - - nuEff = nu/(1 - exp(-cB*pow((nu/nuEff), 1.0/3.0)*pow(Re, -2.0/3.0))) - nuSgs = nuEff - nu - - Re = delta^2*mag(D)/nu - \endverbatim - -SourceFiles - spectEddyVisc.C - -\*---------------------------------------------------------------------------*/ - -#ifndef spectEddyVisc_H -#define spectEddyVisc_H - -#include "GenEddyVisc.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace LESModels -{ - -/*---------------------------------------------------------------------------*\ - Class spectEddyVisc Declaration -\*---------------------------------------------------------------------------*/ - -class spectEddyVisc -: - public GenEddyVisc -{ - // Private data - - dimensionedScalar cB_; - dimensionedScalar cK1_; - dimensionedScalar cK2_; - dimensionedScalar cK3_; - dimensionedScalar cK4_; - - - // Private Member Functions - - //- Update sub-grid scale fields - void updateSubGridScaleFields(const volTensorField& gradU); - - // Disallow default bitwise copy construct and assignment - spectEddyVisc(const spectEddyVisc&); - spectEddyVisc& operator=(const spectEddyVisc&); - - -public: - - //- Runtime type information - TypeName("spectEddyVisc"); - - // Constructors - - // Construct from components - spectEddyVisc - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~spectEddyVisc() - {} - - - // Member Functions - - //- Return SGS kinetic energy - virtual tmp<volScalarField> k() const; - - //- Correct Eddy-Viscosity and related properties - virtual void correct(const tmp<volTensorField>&); - - //- Read LESProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace LESModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LRR/LRR.C b/src/turbulenceModels/incompressible/RAS/LRR/LRR.C deleted file mode 100644 index 18d5f552219..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LRR/LRR.C +++ /dev/null @@ -1,475 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LRR.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LRR, 0); -addToRunTimeSelectionTable(RASModel, LRR, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LRR::LRR -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - Clrr1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clrr1", - coeffDict_, - 1.8 - ) - ), - Clrr2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clrr2", - coeffDict_, - 0.6 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - Cs_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cs", - coeffDict_, - 0.25 - ) - ), - Ceps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps", - coeffDict_, - 0.15 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - couplingFactor_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "couplingFactor", - coeffDict_, - 0.0 - ) - ), - - R_ - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateR("R", mesh_) - ), - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ) -{ - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn - ( - "LRR::LRR" - "(const volVectorField& U, const surfaceScalarField& phi," - "transportModel& transport)" - ) << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LRR::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - R_ - nu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LRR::divDevReff(volVectorField& U) const -{ - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(R_ + couplingFactor_*nut_*fvc::grad(U), "div(R)") - + fvc::laplacian - ( - (1.0 - couplingFactor_)*nut_, - U, - "laplacian(nuEff,U)" - ) - - fvm::laplacian(nuEff(), U) - ); - } - else - { - return - ( - fvc::div(R_) - + fvc::laplacian(nut_, U, "laplacian(nuEff,U)") - - fvm::laplacian(nuEff(), U) - ); - } -} - - -tmp<fvVectorMatrix> LRR::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div - ( - rho*R_ + couplingFactor_*(rho*nut_)*fvc::grad(U), - "div((rho*R))" - ) - + fvc::laplacian - ( - (1.0 - couplingFactor_)*rho*nut_, - U, - "laplacian(muEff,U)" - ) - - fvm::laplacian(muEff, U) - ); - } - else - { - return - ( - fvc::div(rho*R_) - + fvc::laplacian(rho*nut_, U, "laplacian(muEff,U)") - - fvm::laplacian(muEff, U) - ); - } -} - - -bool LRR::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - Clrr1_.readIfPresent(coeffDict()); - Clrr2_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - Cs_.readIfPresent(coeffDict()); - Ceps_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - - couplingFactor_.readIfPresent(coeffDict()); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn("LRR::read()") - << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" - << exit(FatalError); - } - - return true; - } - else - { - return false; - } -} - - -void LRR::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - volSymmTensorField P(-twoSymm(R_ & fvc::grad(U_))); - volScalarField G(GName(), 0.5*mag(tr(P))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(epsilon_) - + fvm::div(phi_, epsilon_) - //- fvm::laplacian(Ceps*(K/epsilon_)*R, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*G*epsilon_/k_ - - fvm::Sp(C2_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Reynolds stress equation - - const fvPatchList& patches = mesh_.boundary(); - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - forAll(curPatch, facei) - { - label faceCelli = curPatch.faceCells()[facei]; - P[faceCelli] *= min - ( - G[faceCelli]/(0.5*mag(tr(P[faceCelli])) + SMALL), - 1.0 - ); - } - } - } - - - tmp<fvSymmTensorMatrix> REqn - ( - fvm::ddt(R_) - + fvm::div(phi_, R_) - //- fvm::laplacian(Cs*(k_/epsilon_)*R_, R_) - - fvm::laplacian(DREff(), R_) - + fvm::Sp(Clrr1_*epsilon_/k_, R_) - == - P - - (2.0/3.0*(1 - Clrr1_)*I)*epsilon_ - - Clrr2_*dev(P) - ); - - REqn().relax(); - solve(REqn); - - R_.max - ( - dimensionedSymmTensor - ( - "zero", - R_.dimensions(), - symmTensor - ( - kMin_.value(), -GREAT, -GREAT, - kMin_.value(), -GREAT, - kMin_.value() - ) - ) - ); - - k_ = 0.5*tr(R_); - bound(k_, kMin_); - - - // Re-calculate viscosity - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - - // Correct wall shear stresses - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - symmTensorField& Rw = R_.boundaryField()[patchi]; - - const scalarField& nutw = nut_.boundaryField()[patchi]; - - const vectorField snGradU(U_.boundaryField()[patchi].snGrad()); - - const vectorField& faceAreas - = mesh_.Sf().boundaryField()[patchi]; - - const scalarField& magFaceAreas - = mesh_.magSf().boundaryField()[patchi]; - - forAll(curPatch, facei) - { - // Calculate near-wall velocity gradient - tensor gradUw - = (faceAreas[facei]/magFaceAreas[facei])*snGradU[facei]; - - // Calculate near-wall shear-stress tensor - tensor tauw = -nutw[facei]*2*symm(gradUw); - - // Reset the shear components of the stress tensor - Rw[facei].xy() = tauw.xy(); - Rw[facei].xz() = tauw.xz(); - Rw[facei].yz() = tauw.yz(); - } - } - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LRR/LRR.H b/src/turbulenceModels/incompressible/RAS/LRR/LRR.H deleted file mode 100644 index 24cf36c5891..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LRR/LRR.H +++ /dev/null @@ -1,204 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::LRR - -Group - grpIcoRASTurbulence - -Description - Launder, Reece and Rodi Reynolds-stress turbulence model for - incompressible flows. - - The default model coefficients correspond to the following: - \verbatim - LRRCoeffs - { - Cmu 0.09; - Clrr1 1.8; - Clrr2 0.6; - C1 1.44; - C2 1.92; - Cs 0.25; - Ceps 0.15; - sigmaEps 1.3; - couplingFactor 0.0; // only for incompressible - } - \endverbatim - -SourceFiles - LRR.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LRR_H -#define LRR_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class LRR Declaration -\*---------------------------------------------------------------------------*/ - -class LRR -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - - dimensionedScalar Clrr1_; - dimensionedScalar Clrr2_; - - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar Cs_; - dimensionedScalar Ceps_; - dimensionedScalar sigmaEps_; - - dimensionedScalar couplingFactor_; - - - // Fields - - volSymmTensorField R_; - volScalarField k_; - volScalarField epsilon_; - volScalarField nut_; - - -public: - - //- Runtime type information - TypeName("LRR"); - - // Constructors - - //- Construct from components - LRR - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LRR() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for R - tmp<volScalarField> DREff() const - { - return tmp<volScalarField> - ( - new volScalarField("DREff", nut_ + nu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", nut_/sigmaEps_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return R_; - } - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C b/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C deleted file mode 100644 index b8d55d9b3cb..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.C +++ /dev/null @@ -1,527 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LaunderGibsonRSTM.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LaunderGibsonRSTM, 0); -addToRunTimeSelectionTable(RASModel, LaunderGibsonRSTM, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LaunderGibsonRSTM::LaunderGibsonRSTM -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - coeffDict_, - 0.41 - ) - ), - Clg1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clg1", - coeffDict_, - 1.8 - ) - ), - Clg2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Clg2", - coeffDict_, - 0.6 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - Cs_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cs", - coeffDict_, - 0.25 - ) - ), - Ceps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Ceps", - coeffDict_, - 0.15 - ) - ), - sigmaR_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaR", - coeffDict_, - 0.81967 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - C1Ref_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1Ref", - coeffDict_, - 0.5 - ) - ), - C2Ref_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2Ref", - coeffDict_, - 0.3 - ) - ), - couplingFactor_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "couplingFactor", - coeffDict_, - 0.0 - ) - ), - - n_(wallDist::New(mesh_).n()), - y_(wallDist::New(mesh_).y()), - - R_ - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateR("R", mesh_) - ), - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn - ( - "LaunderGibsonRSTM::LaunderGibsonRSTM" - "(const volVectorField& U, const surfaceScalarField& phi," - "transportModel& transport)" - ) << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" << nl - << exit(FatalError); - } - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LaunderGibsonRSTM::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - R_ - nu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LaunderGibsonRSTM::divDevReff(volVectorField& U) const -{ - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div(R_ + couplingFactor_*nut_*fvc::grad(U), "div(R)") - + fvc::laplacian - ( - (1.0 - couplingFactor_)*nut_, - U, - "laplacian(nuEff,U)" - ) - - fvm::laplacian(nuEff(), U) - ); - } - else - { - return - ( - fvc::div(R_) - + fvc::laplacian(nut_, U, "laplacian(nuEff,U)") - - fvm::laplacian(nuEff(), U) - ); - } -} - - -tmp<fvVectorMatrix> LaunderGibsonRSTM::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - if (couplingFactor_.value() > 0.0) - { - return - ( - fvc::div - ( - rho*R_ + couplingFactor_*(rho*nut_)*fvc::grad(U), - "div((rho*R))" - ) - + fvc::laplacian - ( - (1.0 - couplingFactor_)*rho*nut_, - U, - "laplacian(muEff,U)" - ) - - fvm::laplacian(muEff, U) - ); - } - else - { - return - ( - fvc::div(rho*R_) - + fvc::laplacian(rho*nut_, U, "laplacian(muEff,U)") - - fvm::laplacian(muEff, U) - ); - } -} - - -bool LaunderGibsonRSTM::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - kappa_.readIfPresent(coeffDict()); - Clg1_.readIfPresent(coeffDict()); - Clg2_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - Cs_.readIfPresent(coeffDict()); - Ceps_.readIfPresent(coeffDict()); - sigmaR_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - C1Ref_.readIfPresent(coeffDict()); - C2Ref_.readIfPresent(coeffDict()); - - couplingFactor_.readIfPresent(coeffDict()); - - if (couplingFactor_.value() < 0.0 || couplingFactor_.value() > 1.0) - { - FatalErrorIn("LaunderGibsonRSTM::read()") - << "couplingFactor = " << couplingFactor_ - << " is not in range 0 - 1" - << exit(FatalError); - } - - return true; - } - else - { - return false; - } -} - - -void LaunderGibsonRSTM::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - volSymmTensorField P(-twoSymm(R_ & fvc::grad(U_))); - volScalarField G(GName(), 0.5*mag(tr(P))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(epsilon_) - + fvm::div(phi_, epsilon_) - //- fvm::laplacian(Ceps*(k_/epsilon_)*R_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*G*epsilon_/k_ - - fvm::Sp(C2_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Reynolds stress equation - - const fvPatchList& patches = mesh_.boundary(); - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - forAll(curPatch, facei) - { - label faceCelli = curPatch.faceCells()[facei]; - P[faceCelli] *= - min(G[faceCelli]/(0.5*mag(tr(P[faceCelli])) + SMALL), 1.0); - } - } - } - - const volSymmTensorField reflect - ( - C1Ref_*epsilon_/k_*R_ - C2Ref_*Clg2_*dev(P) - ); - - tmp<fvSymmTensorMatrix> REqn - ( - fvm::ddt(R_) - + fvm::div(phi_, R_) - //- fvm::laplacian(Cs*(k_/epsilon_)*R_, R_) - - fvm::laplacian(DREff(), R_) - + fvm::Sp(Clg1_*epsilon_/k_, R_) - == - P - + (2.0/3.0*(Clg1_ - 1)*I)*epsilon_ - - Clg2_*dev(P) - - // wall reflection terms - + symm - ( - I*((n_ & reflect) & n_) - - 1.5*(n_*(reflect & n_) - + (n_ & reflect)*n_) - )*pow(Cmu_, 0.75)*pow(k_, 1.5)/(kappa_*y_*epsilon_) - ); - - REqn().relax(); - solve(REqn); - - R_.max - ( - dimensionedSymmTensor - ( - "zero", - R_.dimensions(), - symmTensor - ( - kMin_.value(), -GREAT, -GREAT, - kMin_.value(), -GREAT, - kMin_.value() - ) - ) - ); - - k_ == 0.5*tr(R_); - bound(k_, kMin_); - - - // Re-calculate turbulent viscosity - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - - // Correct wall shear stresses - - forAll(patches, patchi) - { - const fvPatch& curPatch = patches[patchi]; - - if (isA<wallFvPatch>(curPatch)) - { - symmTensorField& Rw = R_.boundaryField()[patchi]; - - const scalarField& nutw = nut_.boundaryField()[patchi]; - - const vectorField snGradU(U_.boundaryField()[patchi].snGrad()); - - const vectorField& faceAreas - = mesh_.Sf().boundaryField()[patchi]; - - const scalarField& magFaceAreas - = mesh_.magSf().boundaryField()[patchi]; - - forAll(curPatch, facei) - { - // Calculate near-wall velocity gradient - tensor gradUw - = (faceAreas[facei]/magFaceAreas[facei])*snGradU[facei]; - - // Calculate near-wall shear-stress tensor - tensor tauw = -nutw[facei]*2*symm(gradUw); - - // Reset the shear components of the stress tensor - Rw[facei].xy() = tauw.xy(); - Rw[facei].xz() = tauw.xz(); - Rw[facei].yz() = tauw.yz(); - } - } - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H b/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H deleted file mode 100644 index 921e2f4685f..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LaunderGibsonRSTM/LaunderGibsonRSTM.H +++ /dev/null @@ -1,216 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::LaunderGibsonRSTM - -Group - grpIcoRASTurbulence - -Description - Launder-Gibson Reynolds stress turbulence model for incompressible flows. - - The default model coefficients correspond to the following: - \verbatim - LaunderGibsonRSTMCoeffs - { - Cmu 0.09; - kappa 0.41; - Clg1 1.8; - Clg2 0.6; - C1 1.44; - C2 1.92; - C1Ref 0.5; - C2Ref 0.3; - Cs 0.25; - Ceps 0.15; - sigmaEps 1.3; - sigmaR 0.81967; - couplingFactor 0.0; - } - \endverbatim - -SourceFiles - LaunderGibsonRSTM.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LaunderGibsonRSTM_H -#define LaunderGibsonRSTM_H - -#include "RASModel.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class LaunderGibsonRSTM Declaration -\*---------------------------------------------------------------------------*/ - -class LaunderGibsonRSTM -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar kappa_; - - dimensionedScalar Clg1_; - dimensionedScalar Clg2_; - - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar Cs_; - dimensionedScalar Ceps_; - dimensionedScalar sigmaR_; - dimensionedScalar sigmaEps_; - - dimensionedScalar C1Ref_; - dimensionedScalar C2Ref_; - - dimensionedScalar couplingFactor_; - - - // Fields - - const volVectorField& n_; - const volScalarField& y_; - - volSymmTensorField R_; - volScalarField k_; - volScalarField epsilon_; - volScalarField nut_; - - -public: - - //- Runtime type information - TypeName("LaunderGibsonRSTM"); - - // Constructors - - //- Construct from components - LaunderGibsonRSTM - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LaunderGibsonRSTM() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for R - tmp<volScalarField> DREff() const - { - return tmp<volScalarField> - ( - new volScalarField("DREff", nut_/sigmaR_ + nu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", nut_/sigmaEps_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const - { - return R_; - } - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C b/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C deleted file mode 100644 index 9c451b4ce7b..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.C +++ /dev/null @@ -1,309 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "LaunderSharmaKE.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(LaunderSharmaKE, 0); -addToRunTimeSelectionTable(RASModel, LaunderSharmaKE, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> LaunderSharmaKE::fMu() const -{ - return exp(-3.4/sqr(scalar(1) + sqr(k_)/(nu()*epsilonTilda_)/50.0)); -} - - -tmp<volScalarField> LaunderSharmaKE::f2() const -{ - return - scalar(1) - - 0.3*exp(-min(sqr(sqr(k_)/(nu()*epsilonTilda_)), scalar(50.0))); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -LaunderSharmaKE::LaunderSharmaKE -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - epsilonTilda_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateLowReNut("nut", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilonTilda_, epsilonMin_); - - nut_ = Cmu_*fMu()*sqr(k_)/epsilonTilda_; - nut_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> LaunderSharmaKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> LaunderSharmaKE::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> LaunderSharmaKE::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> LaunderSharmaKE::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool LaunderSharmaKE::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void LaunderSharmaKE::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - tmp<volScalarField> S2 = 2*magSqr(symm(fvc::grad(U_))); - - volScalarField G(GName(), nut_*S2); - - const volScalarField E(2.0*nu()*nut_*fvc::magSqrGradGrad(U_)); - const volScalarField D(2.0*nu()*magSqr(fvc::grad(sqrt(k_)))); - - - // Dissipation rate equation - - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(epsilonTilda_) - + fvm::div(phi_, epsilonTilda_) - - fvm::laplacian(DepsilonEff(), epsilonTilda_) - == - C1_*G*epsilonTilda_/k_ - - fvm::Sp(C2_*f2()*epsilonTilda_/k_, epsilonTilda_) - + E - ); - - epsEqn().relax(); - solve(epsEqn); - bound(epsilonTilda_, epsilonMin_); - - - // Turbulent kinetic energy equation - - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - fvm::Sp((epsilonTilda_ + D)/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - nut_ == Cmu_*fMu()*sqr(k_)/epsilonTilda_; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H b/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H deleted file mode 100644 index 0d628a7471e..00000000000 --- a/src/turbulenceModels/incompressible/RAS/LaunderSharmaKE/LaunderSharmaKE.H +++ /dev/null @@ -1,195 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::LaunderSharmaKE - -Group - grpIcoRASTurbulence - -Description - Launder and Sharma low-Reynolds k-epsilon turbulence model for - incompressible flows. - - The default model coefficients correspond to the following: - \verbatim - LaunderSharmaKECoeffs - { - Cmu 0.09; - C1 1.44; - C2 1.92; - C3 -0.33; - sigmaEps 1.3; - } - \endverbatim - -SourceFiles - LaunderSharmaKE.C - -\*---------------------------------------------------------------------------*/ - -#ifndef LaunderSharmaKE_H -#define LaunderSharmaKE_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class LaunderSharmaKE Declaration -\*---------------------------------------------------------------------------*/ - -class LaunderSharmaKE -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar sigmaEps_; - - - // Fields - - volScalarField k_; - volScalarField epsilonTilda_; - volScalarField nut_; - - - // Protected Member Functions - - tmp<volScalarField> fMu() const; - tmp<volScalarField> f2() const; - - -public: - - //- Runtime type information - TypeName("LaunderSharmaKE"); - - // Constructors - - //- Construct from components - LaunderSharmaKE - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~LaunderSharmaKE() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nut_ + nu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", nut_/sigmaEps_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Note that epsilonTilda is returned as epsilon. - // This is the appropriate variable for most purposes. - virtual tmp<volScalarField> epsilon() const - { - return epsilonTilda_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/Make/files b/src/turbulenceModels/incompressible/RAS/Make/files deleted file mode 100644 index bb0258c6f4a..00000000000 --- a/src/turbulenceModels/incompressible/RAS/Make/files +++ /dev/null @@ -1,66 +0,0 @@ -RASModel/RASModel.C - -laminar/laminar.C -kEpsilon/kEpsilon.C -RNGkEpsilon/RNGkEpsilon.C -realizableKE/realizableKE.C -kOmega/kOmega.C -kOmegaSST/kOmegaSST.C -SpalartAllmaras/SpalartAllmaras.C -LRR/LRR.C -LaunderGibsonRSTM/LaunderGibsonRSTM.C -LaunderSharmaKE/LaunderSharmaKE.C -qZeta/qZeta.C -LienCubicKE/LienCubicKE.C -LienCubicKELowRe/LienCubicKELowRe.C -NonlinearKEShih/NonlinearKEShih.C -LienLeschzinerLowRe/LienLeschzinerLowRe.C -LamBremhorstKE/LamBremhorstKE.C -kkLOmega/kkLOmega.C -v2f/v2f.C - -/* Wall functions */ -wallFunctions = derivedFvPatchFields/wallFunctions - -nutWallFunctions = $(wallFunctions)/nutWallFunctions -$(nutWallFunctions)/nutWallFunction/nutWallFunctionFvPatchScalarField.C - -$(nutWallFunctions)/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C - -$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.C -$(nutWallFunctions)/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C - -epsilonWallFunctions = $(wallFunctions)/epsilonWallFunctions -$(epsilonWallFunctions)/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C -$(epsilonWallFunctions)/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C - -fWallFunctions = $(wallFunctions)/fWallFunctions -$(fWallFunctions)/fWallFunction/fWallFunctionFvPatchScalarField.C - -omegaWallFunctions = $(wallFunctions)/omegaWallFunctions -$(omegaWallFunctions)/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C - -kqRWallFunctions = $(wallFunctions)/kqRWallFunctions -$(kqRWallFunctions)/kqRWallFunction/kqRWallFunctionFvPatchFields.C -$(kqRWallFunctions)/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C - -alphatWallFunctions = $(wallFunctions)/alphatWallFunctions -$(alphatWallFunctions)/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C - -v2WallFunctions = $(wallFunctions)/v2WallFunctions -$(v2WallFunctions)/v2WallFunction/v2WallFunctionFvPatchScalarField.C - -/* Patch fields */ -derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C -derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C -derivedFvPatchFields/atmBoundaryLayerInletK/atmBoundaryLayerInletKFvPatchScalarField.C -derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C - -backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C - -LIB = $(FOAM_LIBBIN)/libincompressibleRASModels diff --git a/src/turbulenceModels/incompressible/RAS/Make/options b/src/turbulenceModels/incompressible/RAS/Make/options deleted file mode 100644 index a5242e05ee4..00000000000 --- a/src/turbulenceModels/incompressible/RAS/Make/options +++ /dev/null @@ -1,11 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/transportModels \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude - -LIB_LIBS = \ - -lincompressibleTurbulenceModel \ - -lfiniteVolume \ - -lmeshTools diff --git a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C b/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C deleted file mode 100644 index 47f80f23e84..00000000000 --- a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.C +++ /dev/null @@ -1,206 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "RASModel.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -defineTypeNameAndDebug(RASModel, 0); -defineRunTimeSelectionTable(RASModel, dictionary); -addToRunTimeSelectionTable(turbulenceModel, RASModel, turbulenceModel); - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void RASModel::printCoeffs() -{ - if (printCoeffs_) - { - Info<< type() << "Coeffs" << coeffDict_ << endl; - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -RASModel::RASModel -( - const word& type, - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -: - turbulenceModel(U, phi, transport, turbulenceModelName), - - IOdictionary - ( - IOobject - ( - "RASProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ), - - turbulence_(lookup("turbulence")), - printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)), - coeffDict_(subOrEmptyDict(type + "Coeffs")), - - kMin_("kMin", sqr(dimVelocity), SMALL), - epsilonMin_("epsilonMin", kMin_.dimensions()/dimTime, SMALL), - omegaMin_("omegaMin", dimless/dimTime, SMALL) -{ - kMin_.readIfPresent(*this); - epsilonMin_.readIfPresent(*this); - omegaMin_.readIfPresent(*this); - - // Force the construction of the mesh deltaCoeffs which may be needed - // for the construction of the derived models and BCs - mesh_.deltaCoeffs(); -} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<RASModel> RASModel::New -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "RASProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("RASModel") - ); - - Info<< "Selecting RAS turbulence model " << modelType << endl; - - dictionaryConstructorTable::iterator cstrIter = - dictionaryConstructorTablePtr_->find(modelType); - - if (cstrIter == dictionaryConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "RASModel::New" - "(" - "const volVectorField&, " - "const surfaceScalarField&, " - "transportModel&, " - "const word&" - ")" - ) << "Unknown RASModel type " - << modelType << nl << nl - << "Valid RASModel types:" << endl - << dictionaryConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<RASModel> - ( - cstrIter()(U, phi, transport, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void RASModel::correct() -{ - turbulenceModel::correct(); -} - - -bool RASModel::read() -{ - //if (regIOobject::read()) - - // Bit of trickery : we are both IOdictionary ('RASProperties') and - // an regIOobject from the turbulenceModel level. Problem is to distinguish - // between the two - we only want to reread the IOdictionary. - - bool ok = IOdictionary::readData - ( - IOdictionary::readStream - ( - IOdictionary::type() - ) - ); - IOdictionary::close(); - - if (ok) - { - lookup("turbulence") >> turbulence_; - - if (const dictionary* dictPtr = subDictPtr(type() + "Coeffs")) - { - coeffDict_ <<= *dictPtr; - } - - kMin_.readIfPresent(*this); - epsilonMin_.readIfPresent(*this); - omegaMin_.readIfPresent(*this); - - return true; - } - else - { - return false; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.H b/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.H deleted file mode 100644 index 08c63d220bf..00000000000 --- a/src/turbulenceModels/incompressible/RAS/RASModel/RASModel.H +++ /dev/null @@ -1,243 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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/>. - -Namespace - Foam::incompressible::RASModels - -Group - grpIcoRASTurbulence - -Description - Namespace for incompressible RAS turbulence models. - -Class - Foam::incompressible::RASModel - -Description - Abstract base class for incompressible turbulence models. - -SourceFiles - RASModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef RASModel_H -#define RASModel_H - -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "fvm.H" -#include "fvc.H" -#include "fvMatrices.H" -#include "incompressible/transportModel/transportModel.H" -#include "IOdictionary.H" -#include "Switch.H" -#include "bound.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class RASModel Declaration -\*---------------------------------------------------------------------------*/ - -class RASModel -: - public turbulenceModel, - public IOdictionary -{ - -protected: - - // Protected data - - //- Turbulence on/off flag - Switch turbulence_; - - //- Flag to print the model coeffs at run-time - Switch printCoeffs_; - - //- Model coefficients dictionary - dictionary coeffDict_; - - //- Lower limit of k - dimensionedScalar kMin_; - - //- Lower limit of epsilon - dimensionedScalar epsilonMin_; - - //- Lower limit for omega - dimensionedScalar omegaMin_; - - - // Protected Member Functions - - //- Print model coefficients - virtual void printCoeffs(); - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - RASModel(const RASModel&); - - //- Disallow default bitwise assignment - void operator=(const RASModel&); - - -public: - - //- Runtime type information - TypeName("RASModel"); - - - // Declare run-time constructor selection table - - declareRunTimeSelectionTable - ( - autoPtr, - RASModel, - dictionary, - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName - ), - (U, phi, transport, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - RASModel - ( - const word& type, - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - // Selectors - - //- Return a reference to the selected RAS model - static autoPtr<RASModel> New - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName - ); - - - //- Destructor - virtual ~RASModel() - {} - - - // Member Functions - - // Access - - //- Return the lower allowable limit for k (default: SMALL) - const dimensionedScalar& kMin() const - { - return kMin_; - } - - //- Return the lower allowable limit for epsilon (default: SMALL) - const dimensionedScalar& epsilonMin() const - { - return epsilonMin_; - } - - //- Return the lower allowable limit for omega (default: SMALL) - const dimensionedScalar& omegaMin() const - { - return omegaMin_; - } - - //- Allow kMin to be changed - dimensionedScalar& kMin() - { - return kMin_; - } - - //- Allow epsilonMin to be changed - dimensionedScalar& epsilonMin() - { - return epsilonMin_; - } - - //- Allow omegaMin to be changed - dimensionedScalar& omegaMin() - { - return omegaMin_; - } - - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const - { - return coeffDict_; - } - - - //- Return the effective viscosity - virtual tmp<volScalarField> nuEff() const - { - return tmp<volScalarField> - ( - new volScalarField("nuEff", nut() + nu()) - ); - } - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/RASModel/RASModelDoc.H b/src/turbulenceModels/incompressible/RAS/RASModel/RASModelDoc.H deleted file mode 100644 index 216165664d2..00000000000 --- a/src/turbulenceModels/incompressible/RAS/RASModel/RASModelDoc.H +++ /dev/null @@ -1,32 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpIcoRASTurbulence Incompressible RAS turbulence -@{ - \ingroup grpIcoTurbulence - This group contains incompressible RAS models. -@} - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.C b/src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.C deleted file mode 100644 index 5612ead2d37..00000000000 --- a/src/turbulenceModels/incompressible/RAS/SpalartAllmaras/SpalartAllmaras.C +++ /dev/null @@ -1,469 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "SpalartAllmaras.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(SpalartAllmaras, 0); -addToRunTimeSelectionTable(RASModel, SpalartAllmaras, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> SpalartAllmaras::chi() const -{ - return nuTilda_/nu(); -} - - -tmp<volScalarField> SpalartAllmaras::fv1(const volScalarField& chi) const -{ - const volScalarField chi3(pow3(chi)); - return chi3/(chi3 + pow3(Cv1_)); -} - - -tmp<volScalarField> SpalartAllmaras::fv2 -( - const volScalarField& chi, - const volScalarField& fv1 -) const -{ - if (ashfordCorrection_) - { - return 1.0/pow3(scalar(1) + chi/Cv2_); - } - else - { - return 1.0 - chi/(1.0 + chi*fv1); - } -} - - -tmp<volScalarField> SpalartAllmaras::fv3 -( - const volScalarField& chi, - const volScalarField& fv1 -) const -{ - if (ashfordCorrection_) - { - const volScalarField chiByCv2((1/Cv2_)*chi); - - return - (scalar(1) + chi*fv1) - *(1/Cv2_) - *(3*(scalar(1) + chiByCv2) + sqr(chiByCv2)) - /pow3(scalar(1) + chiByCv2); - } - else - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "fv3", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("fv3", dimless, 1), - zeroGradientFvPatchScalarField::typeName - ) - ); - } -} - - -tmp<volScalarField> SpalartAllmaras::fw(const volScalarField& Stilda) const -{ - volScalarField r - ( - min - ( - nuTilda_ - /( - max - ( - Stilda, - dimensionedScalar("SMALL", Stilda.dimensions(), SMALL) - ) - *sqr(kappa_*y_) - ), - scalar(10.0) - ) - ); - r.boundaryField() == 0.0; - - const volScalarField g(r + Cw2_*(pow6(r) - r)); - - return g*pow((1.0 + pow6(Cw3_))/(pow6(g) + pow6(Cw3_)), 1.0/6.0); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -SpalartAllmaras::SpalartAllmaras -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - sigmaNut_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaNut", - coeffDict_, - 0.66666 - ) - ), - kappa_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "kappa", - coeffDict_, - 0.41 - ) - ), - - Cb1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb1", - coeffDict_, - 0.1355 - ) - ), - Cb2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cb2", - coeffDict_, - 0.622 - ) - ), - Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_), - Cw2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw2", - coeffDict_, - 0.3 - ) - ), - Cw3_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cw3", - coeffDict_, - 2.0 - ) - ), - Cv1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv1", - coeffDict_, - 7.1 - ) - ), - Cv2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cv2", - coeffDict_, - 5.0 - ) - ), - - ashfordCorrection_(coeffDict_.lookupOrDefault("ashfordCorrection", true)), - - nuTilda_ - ( - IOobject - ( - "nuTilda", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::MUST_READ, - IOobject::AUTO_WRITE - ), - mesh_ - ), - - y_(wallDist::New(mesh_).y()) -{ - printCoeffs(); - - if (ashfordCorrection_) - { - Info<< " Employing Ashford correction" << endl; - } -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> SpalartAllmaras::DnuTildaEff() const -{ - return tmp<volScalarField> - ( - new volScalarField("DnuTildaEff", (nuTilda_ + nu())/sigmaNut_) - ); -} - - -tmp<volScalarField> SpalartAllmaras::k() const -{ - WarningIn("tmp<volScalarField> SpalartAllmaras::k() const") - << "Turbulence kinetic energy not defined for Spalart-Allmaras model. " - << "Returning zero field" << endl; - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_ - ), - mesh_, - dimensionedScalar("0", dimensionSet(0, 2, -2, 0, 0), 0) - ) - ); -} - - -tmp<volScalarField> SpalartAllmaras::epsilon() const -{ - WarningIn("tmp<volScalarField> SpalartAllmaras::epsilon() const") - << "Turbulence kinetic energy dissipation rate not defined for " - << "Spalart-Allmaras model. Returning zero field" - << endl; - - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_ - ), - mesh_, - dimensionedScalar("0", dimensionSet(0, 2, -3, 0, 0), 0) - ) - ); -} - - -tmp<volSymmTensorField> SpalartAllmaras::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k() - nut()*twoSymm(fvc::grad(U_)) - ) - ); -} - - -tmp<volSymmTensorField> SpalartAllmaras::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevReff(volVectorField& U) const -{ - const volScalarField nuEff_(nuEff()); - - return - ( - - fvm::laplacian(nuEff_, U) - - fvc::div(nuEff_*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> SpalartAllmaras::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool SpalartAllmaras::read() -{ - if (RASModel::read()) - { - sigmaNut_.readIfPresent(coeffDict()); - kappa_.readIfPresent(coeffDict()); - - Cb1_.readIfPresent(coeffDict()); - Cb2_.readIfPresent(coeffDict()); - Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_; - Cw2_.readIfPresent(coeffDict()); - Cw3_.readIfPresent(coeffDict()); - Cv1_.readIfPresent(coeffDict()); - Cv2_.readIfPresent(coeffDict()); - - ashfordCorrection_.readIfPresent("ashfordCorrection", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void SpalartAllmaras::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - // Re-calculate viscosity - nut_ = nuTilda_*fv1(this->chi()); - nut_.correctBoundaryConditions(); - - return; - } - - const volScalarField chi(this->chi()); - const volScalarField fv1(this->fv1(chi)); - - const volScalarField Stilda - ( - fv3(chi, fv1)*::sqrt(2.0)*mag(skew(fvc::grad(U_))) - + fv2(chi, fv1)*nuTilda_/sqr(kappa_*y_) - ); - - tmp<fvScalarMatrix> nuTildaEqn - ( - fvm::ddt(nuTilda_) - + fvm::div(phi_, nuTilda_) - - fvm::laplacian(DnuTildaEff(), nuTilda_) - - Cb2_/sigmaNut_*magSqr(fvc::grad(nuTilda_)) - == - Cb1_*Stilda*nuTilda_ - - fvm::Sp(Cw1_*fw(Stilda)*nuTilda_/sqr(y_), nuTilda_) - ); - - nuTildaEqn().relax(); - solve(nuTildaEqn); - bound(nuTilda_, dimensionedScalar("0", nuTilda_.dimensions(), 0.0)); - nuTilda_.correctBoundaryConditions(); - - // Re-calculate viscosity - nut_.internalField() = fv1*nuTilda_.internalField(); - nut_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C b/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C deleted file mode 100644 index df20a315f84..00000000000 --- a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.C +++ /dev/null @@ -1,286 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "backwardsCompatibilityWallFunctions.H" - -#include "volFields.H" -#include "calculatedFvPatchField.H" -#include "nutkWallFunctionFvPatchScalarField.H" -#include "nutLowReWallFunctionFvPatchScalarField.H" -#include "epsilonWallFunctionFvPatchScalarField.H" -#include "kqRWallFunctionFvPatchField.H" -#include "omegaWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -tmp<volScalarField> autoCreateNut -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject nutHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (nutHeader.headerOk()) - { - return tmp<volScalarField>(new volScalarField(nutHeader, mesh)); - } - else - { - Info<< "--> Creating " << fieldName - << " to employ run-time selectable wall functions" << endl; - - const fvBoundaryMesh& bm = mesh.boundary(); - - wordList nutBoundaryTypes(bm.size()); - - forAll(bm, patchI) - { - if (isA<wallFvPatch>(bm[patchI])) - { - nutBoundaryTypes[patchI] = - nutkWallFunctionFvPatchScalarField::typeName; - } - else - { - nutBoundaryTypes[patchI] = - calculatedFvPatchField<scalar>::typeName; - } - } - - tmp<volScalarField> nut - ( - new volScalarField - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - dimensionedScalar("zero", dimArea/dimTime, 0.0), - nutBoundaryTypes - ) - ); - - Info<< " Writing new " << fieldName << endl; - nut().write(); - - return nut; - } -} - - -tmp<volScalarField> autoCreateLowReNut -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject nutHeader - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - if (nutHeader.headerOk()) - { - return tmp<volScalarField>(new volScalarField(nutHeader, mesh)); - } - else - { - Info<< "--> Creating " << fieldName - << " to employ run-time selectable wall functions" << endl; - - const fvBoundaryMesh& bm = mesh.boundary(); - - wordList nutBoundaryTypes(bm.size()); - - forAll(bm, patchI) - { - if (isA<wallFvPatch>(bm[patchI])) - { - nutBoundaryTypes[patchI] = - nutLowReWallFunctionFvPatchScalarField::typeName; - } - else - { - nutBoundaryTypes[patchI] = - calculatedFvPatchField<scalar>::typeName; - } - } - - tmp<volScalarField> nut - ( - new volScalarField - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - dimensionedScalar("zero", dimArea/dimTime, 0.0), - nutBoundaryTypes - ) - ); - - Info<< " Writing new " << fieldName << endl; - nut().write(); - - return nut; - } -} - - -tmp<volScalarField> autoCreateEpsilon -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - epsilonWallFunctionFvPatchScalarField - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateOmega -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - omegaWallFunctionFvPatchScalarField - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateK -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - kqRWallFunctionFvPatchField<scalar> - > - ( - fieldName, - mesh - ); -} - - -tmp<volScalarField> autoCreateQ -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - scalar, - kqRWallFunctionFvPatchField<scalar> - > - ( - fieldName, - mesh - ); -} - - -tmp<volSymmTensorField> autoCreateR -( - const word& fieldName, - const fvMesh& mesh -) -{ - return - autoCreateWallFunctionField - < - symmTensor, - kqRWallFunctionFvPatchField<symmTensor> - > - ( - fieldName, - mesh - ); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // - diff --git a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H b/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H deleted file mode 100644 index 3eac4880871..00000000000 --- a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctions.H +++ /dev/null @@ -1,122 +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::incompressible - -Description - Auto creation of fields to provide backwards compatibility with - runtime selectable wall functions - -SourceFiles - backwardsCompatibilityWallFunctions.C - backwardsCompatibilityWallFunctionsTemplates.C - -\*---------------------------------------------------------------------------*/ - -#ifndef backwardsCompatibilityWallFunctions_H -#define backwardsCompatibilityWallFunctions_H - -#include "fvMesh.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - //- nut - tmp<volScalarField> autoCreateNut - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- nut for Low-Reynolds number models - tmp<volScalarField> autoCreateLowReNut - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- epsilon - tmp<volScalarField> autoCreateEpsilon - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- omega - tmp<volScalarField> autoCreateOmega - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- k - tmp<volScalarField> autoCreateK - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- Q - tmp<volScalarField> autoCreateQ - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- R - tmp<volSymmTensorField> autoCreateR - ( - const word& fieldName, - const fvMesh& mesh - ); - - //- Helper function to create the new field - template<class Type, class PatchType> - tmp<GeometricField<Type, fvPatchField, volMesh> > - autoCreateWallFunctionField - ( - const word& fieldName, - const fvMesh& mesh - ); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "backwardsCompatibilityWallFunctionsTemplates.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C b/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C deleted file mode 100644 index e414d8053d9..00000000000 --- a/src/turbulenceModels/incompressible/RAS/backwardsCompatibility/wallFunctions/backwardsCompatibilityWallFunctionsTemplates.C +++ /dev/null @@ -1,169 +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 "backwardsCompatibilityWallFunctions.H" -#include "Time.H" -#include "OSspecific.H" - -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -template<class Type, class PatchType> -tmp<GeometricField<Type, fvPatchField, volMesh> > -autoCreateWallFunctionField -( - const word& fieldName, - const fvMesh& mesh -) -{ - IOobject nutHeader - ( - "nut", - mesh.time().timeName(), - mesh, - IOobject::MUST_READ - ); - - typedef GeometricField<Type, fvPatchField, volMesh> fieldType; - - if (nutHeader.headerOk()) - { - return tmp<fieldType> - ( - new fieldType - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ), - mesh - ) - ); - } - else - { - Info<< "--> Upgrading " << fieldName - << " to employ run-time selectable wall functions" << endl; - - // Read existing field - IOobject ioObj - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::MUST_READ, - IOobject::NO_WRITE, - false - ); - - tmp<fieldType> fieldOrig - ( - new fieldType - ( - ioObj, - mesh - ) - ); - - // rename file - Info<< " Backup original " << fieldName << " to " - << fieldName << ".old" << endl; - mvBak(ioObj.objectPath(), "old"); - - - PtrList<fvPatchField<Type> > newPatchFields(mesh.boundary().size()); - - forAll(newPatchFields, patchI) - { - if (isA<wallFvPatch>(mesh.boundary()[patchI])) - { - newPatchFields.set - ( - patchI, - new PatchType - ( - mesh.boundary()[patchI], - fieldOrig().dimensionedInternalField() - ) - ); - newPatchFields[patchI] == fieldOrig().boundaryField()[patchI]; - } - else - { - newPatchFields.set - ( - patchI, - fieldOrig().boundaryField()[patchI].clone() - ); - } - } - - tmp<fieldType> fieldNew - ( - new fieldType - ( - IOobject - ( - fieldName, - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - mesh, - fieldOrig().dimensions(), - fieldOrig().internalField(), - newPatchFields - ) - ); - - Info<< " Writing updated " << fieldName << endl; - fieldNew().write(); - - return fieldNew; - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C deleted file mode 100644 index a1bf04e9681..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.C +++ /dev/null @@ -1,142 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "atmBoundaryLayerInletEpsilonFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "surfaceFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -atmBoundaryLayerInletEpsilonFvPatchScalarField:: -atmBoundaryLayerInletEpsilonFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(p, iF), - atmBoundaryLayer() -{} - - -atmBoundaryLayerInletEpsilonFvPatchScalarField:: -atmBoundaryLayerInletEpsilonFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchScalarField(p, iF), - atmBoundaryLayer(patch().Cf(), dict) -{ - scalarField::operator=(epsilon(patch().Cf())); -} - - -atmBoundaryLayerInletEpsilonFvPatchScalarField:: -atmBoundaryLayerInletEpsilonFvPatchScalarField -( - const atmBoundaryLayerInletEpsilonFvPatchScalarField& psf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchScalarField(psf, p, iF, mapper), - atmBoundaryLayer(psf, mapper) -{} - - -atmBoundaryLayerInletEpsilonFvPatchScalarField:: -atmBoundaryLayerInletEpsilonFvPatchScalarField -( - const atmBoundaryLayerInletEpsilonFvPatchScalarField& psf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(psf, iF), - atmBoundaryLayer(psf) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void atmBoundaryLayerInletEpsilonFvPatchScalarField::autoMap -( - const fvPatchFieldMapper& m -) -{ - fixedValueFvPatchScalarField::autoMap(m); - atmBoundaryLayer::autoMap(m); -} - - -void atmBoundaryLayerInletEpsilonFvPatchScalarField::rmap -( - const fvPatchScalarField& psf, - const labelList& addr -) -{ - fixedValueFvPatchScalarField::rmap(psf, addr); - - const atmBoundaryLayerInletEpsilonFvPatchScalarField& blpsf = - refCast<const atmBoundaryLayerInletEpsilonFvPatchScalarField>(psf); - - atmBoundaryLayer::rmap(blpsf, addr); -} - - -void atmBoundaryLayerInletEpsilonFvPatchScalarField::write(Ostream& os) const -{ - fvPatchScalarField::write(os); - atmBoundaryLayer::write(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - atmBoundaryLayerInletEpsilonFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H deleted file mode 100644 index 4cbda74cf38..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/atmBoundaryLayerInletEpsilon/atmBoundaryLayerInletEpsilonFvPatchScalarField.H +++ /dev/null @@ -1,177 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::incompressible::atmBoundaryLayerInletEpsilonFvPatchScalarField - -Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition specifies an inlet value for the turbulence - dissipation, \f$\epsilon\f$, appropriate for atmospheric boundary layers. - - See Foam::incompressible::atmBoundaryLayer for details. - - Example of the boundary condition specification: - \verbatim - ground - { - type atmBoundaryLayerInletEpsilon; - z (0 0 1); - Uref 10.0; - Zref 20.0; - z0 uniform 0.1; - zGround uniform 0.0; - } - \endverbatim - -SeeAlso - Foam::incompressible::atmBoundaryLayer, - Foam::incompressible::atmBoundaryLayerInletVelocityFvPatchVectorField, - Foam::incompressible::atmBoundaryLayerInletKFvPatchScalarField - -SourceFiles - atmBoundaryLayerInletEpsilonFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef atmBoundaryLayerInletEpsilonFvPatchScalarField_H -#define atmBoundaryLayerInletEpsilonFvPatchScalarField_H - -#include "fvPatchFields.H" -#include "fixedValueFvPatchFields.H" -#include "atmBoundaryLayer.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class atmBoundaryLayerInletEpsilonFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class atmBoundaryLayerInletEpsilonFvPatchScalarField -: - public fixedValueFvPatchScalarField, - public atmBoundaryLayer -{ - -public: - - //- Runtime type information - TypeName("atmBoundaryLayerInletEpsilon"); - - - // Constructors - - //- Construct from patch and internal field - atmBoundaryLayerInletEpsilonFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - atmBoundaryLayerInletEpsilonFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // atmBoundaryLayerInletEpsilonFvPatchScalarField onto a new patch - atmBoundaryLayerInletEpsilonFvPatchScalarField - ( - const atmBoundaryLayerInletEpsilonFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new atmBoundaryLayerInletEpsilonFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - atmBoundaryLayerInletEpsilonFvPatchScalarField - ( - const atmBoundaryLayerInletEpsilonFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new atmBoundaryLayerInletEpsilonFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap - ( - const fvPatchFieldMapper& - ); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchScalarField&, - const labelList& - ); - - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/doc/incompressibleRASBoundaryConditionsDoc.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/doc/incompressibleRASBoundaryConditionsDoc.H deleted file mode 100644 index c5931020648..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/doc/incompressibleRASBoundaryConditionsDoc.H +++ /dev/null @@ -1,39 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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/>. - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -\defgroup grpIcoRASBoundaryConditions RAS incompressible boundary conditions -@{ - \ingroup grpIcoRASTurbulence - This group contains incompressible RAS turbulence model boundary conditions -@} - -\defgroup grpIcoWallFunctions RAS incompressible wall functions -@{ - \ingroup grpIcoRASBoundaryConditions - This group contains incompressible RAS turbulence model wall functions -@} - - -\*---------------------------------------------------------------------------*/ diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C deleted file mode 100644 index e0d6c9a8e94..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.C +++ /dev/null @@ -1,179 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "turbulentMixingLengthDissipationRateInletFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "surfaceFields.H" -#include "volFields.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(0.0), - kName_("k") -{ - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - inletOutletFvPatchScalarField(ptf, p, iF, mapper), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(readScalar(dict.lookup("mixingLength"))), - kName_(dict.lookupOrDefault<word>("k", "k")) -{ - this->phiName_ = dict.lookupOrDefault<word>("phi", "phi"); - fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf -) -: - inletOutletFvPatchScalarField(ptf), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -turbulentMixingLengthDissipationRateInletFvPatchScalarField:: -turbulentMixingLengthDissipationRateInletFvPatchScalarField -( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& ptf, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(ptf, iF), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulentMixingLengthDissipationRateInletFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - // Lookup Cmu corresponding to the turbulence model selected - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalar Cmu = - turbulence.coeffDict().lookupOrDefault<scalar>("Cmu", 0.09); - - const scalar Cmu75 = pow(Cmu, 0.75); - - const fvPatchScalarField& kp = - patch().lookupPatchField<volScalarField, scalar>(kName_); - - const fvsPatchScalarField& phip = - patch().lookupPatchField<surfaceScalarField, scalar>(this->phiName_); - - this->refValue() = Cmu75*kp*sqrt(kp)/mixingLength_; - this->valueFraction() = 1.0 - pos(phip); - - inletOutletFvPatchScalarField::updateCoeffs(); -} - - -void turbulentMixingLengthDissipationRateInletFvPatchScalarField::write -( - Ostream& os -) const -{ - fvPatchScalarField::write(os); - os.writeKeyword("mixingLength") - << mixingLength_ << token::END_STATEMENT << nl; - os.writeKeyword("phi") << this->phiName_ << token::END_STATEMENT << nl; - os.writeKeyword("k") << kName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - turbulentMixingLengthDissipationRateInletFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H deleted file mode 100644 index 13496315d74..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthDissipationRateInlet/turbulentMixingLengthDissipationRateInletFvPatchScalarField.H +++ /dev/null @@ -1,203 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible:: - turbulentMixingLengthDissipationRateInletFvPatchScalarField - -Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition provides a turbulence dissipation, \f$\epsilon\f$ - (epsilon) inlet condition based on a specified mixing length. The patch - values are calculated using: - - \f[ - \epsilon_p = \frac{C_{\mu}^{0.75} k^{1.5}}{L} - \f] - - where - - \vartable - \epsilon_p | patch epsilon values - C_{\mu} | Model coefficient, set to 0.09 - k | turbulence kinetic energy - L | length scale - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - mixingLength | Length scale [m] | yes | - phi | flux field name | no | phi - k | turbulence kinetic energy field name | no | k - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type turbulentMixingLengthDissipationRateInlet; - mixingLength 0.005; - value uniform 200; // placeholder - } - \endverbatim - -Note - In the event of reverse flow, a zero-gradient condition is applied - -SeeAlso - Foam::inletOutletFvPatchField - -SourceFiles - turbulentMixingLengthDissipationRateInletFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef incompressibleturbulentMixingLengthDissipationRateInlet_H -#define incompressibleturbulentMixingLengthDissipationRateInlet_H - -#include "inletOutletFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulentMixingLengthDissipationRateInletFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class turbulentMixingLengthDissipationRateInletFvPatchScalarField -: - public inletOutletFvPatchScalarField -{ - // Private data - - //- turbulent length scale - scalar mixingLength_; - - //- Name of the turbulent kinetic energy field - word kName_; - - -public: - - //- Runtime type information - TypeName("turbulentMixingLengthDissipationRateInlet"); - - - // Constructors - - //- Construct from patch and internal field - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // turbulentMixingLengthDissipationRateInletFvPatchScalarField - // onto a new patch - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - *this - ) - ); - } - - //- Construct as copy setting internal field reference - turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - const turbulentMixingLengthDissipationRateInletFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthDissipationRateInletFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C deleted file mode 100644 index 95bdac20f42..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.C +++ /dev/null @@ -1,176 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "turbulentMixingLengthFrequencyInletFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "surfaceFields.H" -#include "volFields.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(0.0), - kName_("undefined-k") -{ - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - inletOutletFvPatchScalarField(ptf, p, iF, mapper), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - inletOutletFvPatchScalarField(p, iF), - mixingLength_(readScalar(dict.lookup("mixingLength"))), - kName_(dict.lookupOrDefault<word>("k", "k")) -{ - this->phiName_ = dict.lookupOrDefault<word>("phi", "phi"); - - fvPatchScalarField::operator=(scalarField("value", dict, p.size())); - - this->refValue() = 0.0; - this->refGrad() = 0.0; - this->valueFraction() = 0.0; -} - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf -) -: - inletOutletFvPatchScalarField(ptf), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - -turbulentMixingLengthFrequencyInletFvPatchScalarField:: -turbulentMixingLengthFrequencyInletFvPatchScalarField -( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& ptf, - const DimensionedField<scalar, volMesh>& iF -) -: - inletOutletFvPatchScalarField(ptf, iF), - mixingLength_(ptf.mixingLength_), - kName_(ptf.kName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulentMixingLengthFrequencyInletFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - // Lookup Cmu corresponding to the turbulence model selected - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - - const scalar Cmu = - turbulence.coeffDict().lookupOrDefault<scalar>("Cmu", 0.09); - - const scalar Cmu25 = pow(Cmu, 0.25); - - const fvPatchScalarField& kp = - patch().lookupPatchField<volScalarField, scalar>(kName_); - - const fvsPatchScalarField& phip = - patch().lookupPatchField<surfaceScalarField, scalar>(this->phiName_); - - this->refValue() = sqrt(kp)/(Cmu25*mixingLength_); - this->valueFraction() = 1.0 - pos(phip); - - inletOutletFvPatchScalarField::updateCoeffs(); -} - - -void turbulentMixingLengthFrequencyInletFvPatchScalarField::write -( - Ostream& os -) const -{ - fvPatchScalarField::write(os); - os.writeKeyword("mixingLength") - << mixingLength_ << token::END_STATEMENT << nl; - os.writeKeyword("phi") << this->phiName_ << token::END_STATEMENT << nl; - os.writeKeyword("k") << kName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - turbulentMixingLengthFrequencyInletFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H deleted file mode 100644 index 9fdff8d950a..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/turbulentMixingLengthFrequencyInlet/turbulentMixingLengthFrequencyInletFvPatchScalarField.H +++ /dev/null @@ -1,203 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::turbulentMixingLengthFrequencyInletFvPatchScalarField - -Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition provides a turbulence specific dissipation, - \f$\omega\f$ (omega) inlet condition based on a specified mixing length. - The patch values are calculated using: - - \f[ - \omega_p = \frac{k^{0.5}}{C_{\mu}^{0.25} L} - \f] - - where - - \vartable - \omega_p | patch omega values - C_{\mu} | Model coefficient, set to 0.09 - k | turbulence kinetic energy - L | length scale - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - mixingLength | Length scale [m] | yes | - phi | flux field name | no | phi - k | turbulence kinetic energy field name | no | k - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type turbulentMixingLengthFrequencyInlet; - mixingLength 0.005; - value uniform 200; // placeholder - } - \endverbatim - -Note - In the event of reverse flow, a zero-gradient condition is applied - -SeeAlso - Foam::inletOutletFvPatchField - - -SourceFiles - turbulentMixingLengthFrequencyInletFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef incompressibleturbulentMixingLengthFrequencyInletFvPatchScalarField_H -#define incompressibleturbulentMixingLengthFrequencyInletFvPatchScalarField_H - -#include "inletOutletFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulentMixingLengthFrequencyInletFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class turbulentMixingLengthFrequencyInletFvPatchScalarField -: - public inletOutletFvPatchScalarField -{ - // Private data - - //- Turbulent length scale - scalar mixingLength_; - - //- Name of the turbulent kinetic energy field - word kName_; - - -public: - - //- Runtime type information - TypeName("turbulentMixingLengthFrequencyInlet"); - - - // Constructors - - //- Construct from patch and internal field - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // turbulentMixingLengthFrequencyInletFvPatchScalarField - // onto a new patch - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - *this - ) - ); - } - - //- Construct as copy setting internal field reference - turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - const turbulentMixingLengthFrequencyInletFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new turbulentMixingLengthFrequencyInletFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index d9898beda11..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,193 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -\*---------------------------------------------------------------------------*/ - -#include "epsilonLowReWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar epsilonLowReWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -void epsilonLowReWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu75 = pow(Cmu_, 0.75); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tnu = turbulence.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; - - const tmp<volScalarField> tnut = turbulence.nut(); - const volScalarField& nut = tnut(); - const scalarField& nutw = nut.boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set epsilon and G - forAll(nutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar yPlus = Cmu25*sqrt(k[cellI])*y[faceI]/nuw[faceI]; - - scalar w = cornerWeights[faceI]; - - if (yPlus > yPlusLam_) - { - epsilon[cellI] = w*Cmu75*pow(k[cellI], 1.5)/(kappa_*y[faceI]); - } - else - { - epsilon[cellI] = w*2.0*k[cellI]*nuw[faceI]/sqr(y[faceI]); - } - - G[cellI] = - w - *(nutw[faceI] + nuw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - epsilonWallFunctionFvPatchScalarField(p, iF), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - epsilonWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - yPlusLam_(ptf.yPlusLam_) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - epsilonWallFunctionFvPatchScalarField(p, iF, dict), - yPlusLam_(yPlusLam(kappa_, E_)) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ewfpsf -) -: - epsilonWallFunctionFvPatchScalarField(ewfpsf), - yPlusLam_(ewfpsf.yPlusLam_) -{} - - -epsilonLowReWallFunctionFvPatchScalarField:: -epsilonLowReWallFunctionFvPatchScalarField -( - const epsilonLowReWallFunctionFvPatchScalarField& ewfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - epsilonWallFunctionFvPatchScalarField(ewfpsf, iF), - yPlusLam_(ewfpsf.yPlusLam_) -{} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - epsilonLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index 778fffcfd7b..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonLowReWallFunction/epsilonLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,194 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -Class - Foam::incompressible::epsilonLowReWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulence dissipation wall function - condition for low- and high-Reynolds number turbulent flow cases. - - The condition can be applied to wall boundaries, whereby it inserts near - wall epsilon values directly into the epsilon equation to act as a - constraint. - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type epsilonLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::epsilonWallFunctionFvPatchScalarField - -SourceFiles - epsilonLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef epsilonLowReWallFunctionFvPatchScalarField_H -#define epsilonLowReWallFunctionFvPatchScalarField_H - -#include "epsilonWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class epsilonLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class epsilonLowReWallFunctionFvPatchScalarField -: - public epsilonWallFunctionFvPatchScalarField -{ - -protected: - - // Protected data - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - //- Calculate the epsilon and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon - ); - - -public: - - //- Runtime type information - TypeName("epsilonLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - epsilonLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - epsilonLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // epsilonLowReWallFunctionFvPatchScalarField - // onto a new patch - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new epsilonLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - epsilonLowReWallFunctionFvPatchScalarField - ( - const epsilonLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new epsilonLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } - - //- Destructor - virtual ~epsilonLowReWallFunctionFvPatchScalarField() - {} -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C deleted file mode 100644 index 2437271e266..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,586 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "epsilonWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -scalar epsilonWallFunctionFvPatchScalarField::tolerance_ = 1e-5; - -// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // - -void epsilonWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("epsilonWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void epsilonWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -void epsilonWallFunctionFvPatchScalarField::setMaster() -{ - if (master_ != -1) - { - return; - } - - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - label master = -1; - forAll(bf, patchI) - { - if (isA<epsilonWallFunctionFvPatchScalarField>(bf[patchI])) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - if (master == -1) - { - master = patchI; - } - - epf.master() = master; - } - } -} - - -void epsilonWallFunctionFvPatchScalarField::createAveragingWeights() -{ - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - const fvMesh& mesh = epsilon.mesh(); - - if (initialised_ && !mesh.changing()) - { - return; - } - - volScalarField weights - ( - IOobject - ( - "weights", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false // do not register - ), - mesh, - dimensionedScalar("zero", dimless, 0.0) - ); - - DynamicList<label> epsilonPatches(bf.size()); - forAll(bf, patchI) - { - if (isA<epsilonWallFunctionFvPatchScalarField>(bf[patchI])) - { - epsilonPatches.append(patchI); - - const labelUList& faceCells = bf[patchI].patch().faceCells(); - forAll(faceCells, i) - { - label cellI = faceCells[i]; - weights[cellI]++; - } - } - } - - cornerWeights_.setSize(bf.size()); - forAll(epsilonPatches, i) - { - label patchI = epsilonPatches[i]; - const fvPatchScalarField& wf = weights.boundaryField()[patchI]; - cornerWeights_[patchI] = 1.0/wf.patchInternalField(); - } - - G_.setSize(dimensionedInternalField().size(), 0.0); - epsilon_.setSize(dimensionedInternalField().size(), 0.0); - - initialised_ = true; -} - - -epsilonWallFunctionFvPatchScalarField& -epsilonWallFunctionFvPatchScalarField::epsilonPatch(const label patchI) -{ - const volScalarField& epsilon = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = epsilon.boundaryField(); - - const epsilonWallFunctionFvPatchScalarField& epf = - refCast<const epsilonWallFunctionFvPatchScalarField>(bf[patchI]); - - return const_cast<epsilonWallFunctionFvPatchScalarField&>(epf); -} - - -void epsilonWallFunctionFvPatchScalarField::calculateTurbulenceFields -( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& epsilon0 -) -{ - // accumulate all of the G and epsilon contributions - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - const List<scalar>& w = cornerWeights_[patchI]; - - epf.calculate(turbulence, w, epf.patch(), G0, epsilon0); - } - } - - // apply zero-gradient condition for epsilon - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - epsilonWallFunctionFvPatchScalarField& epf = epsilonPatch(patchI); - - epf == scalarField(epsilon0, epf.patch().faceCells()); - } - } -} - - -void epsilonWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - const scalar Cmu75 = pow(Cmu_, 0.75); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tnu = turbulence.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; - - const tmp<volScalarField> tnut = turbulence.nut(); - const volScalarField& nut = tnut(); - const scalarField& nutw = nut.boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set epsilon and G - forAll(nutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar w = cornerWeights[faceI]; - - epsilon[cellI] += w*Cmu75*pow(k[cellI], 1.5)/(kappa_*y[faceI]); - - G[cellI] += - w - *(nutw[faceI] + nuw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); - - // apply zero-gradient condition on start-up - this->operator==(patchInternalField()); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ewfpsf -) -: - fixedValueFvPatchField<scalar>(ewfpsf), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -epsilonWallFunctionFvPatchScalarField::epsilonWallFunctionFvPatchScalarField -( - const epsilonWallFunctionFvPatchScalarField& ewfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(ewfpsf, iF), - Cmu_(ewfpsf.Cmu_), - kappa_(ewfpsf.kappa_), - E_(ewfpsf.E_), - G_(), - epsilon_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalarField& epsilonWallFunctionFvPatchScalarField::G(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - G_ = 0.0; - } - - return G_; - } - - return epsilonPatch(master_).G(); -} - - -scalarField& epsilonWallFunctionFvPatchScalarField::epsilon(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - epsilon_ = 0.0; - } - - return epsilon_; - } - - return epsilonPatch(master_).epsilon(init); -} - - -void epsilonWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), epsilon(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& epsilon0 = this->epsilon(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& epsilon = const_cast<FieldType&>(dimensionedInternalField()); - - forAll(*this, faceI) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = G0[cellI]; - epsilon[cellI] = epsilon0[cellI]; - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void epsilonWallFunctionFvPatchScalarField::updateCoeffs -( - const scalarField& weights -) -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), epsilon(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& epsilon0 = this->epsilon(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& epsilon = const_cast<FieldType&>(dimensionedInternalField()); - - scalarField& epsilonf = *this; - - // only set the values if the weights are > tolerance - forAll(weights, faceI) - { - scalar w = weights[faceI]; - - if (w > tolerance_) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = (1.0 - w)*G[cellI] + w*G0[cellI]; - epsilon[cellI] = (1.0 - w)*epsilon[cellI] + w*epsilon0[cellI]; - epsilonf[faceI] = epsilon[cellI]; - } - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void epsilonWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix -) -{ - if (manipulatedMatrix()) - { - return; - } - - matrix.setValues(patch().faceCells(), patchInternalField()); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void epsilonWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix, - const Field<scalar>& weights -) -{ - if (manipulatedMatrix()) - { - return; - } - - // filter weights so that we only apply the constraint where the - // weight > SMALL - DynamicList<label> constraintCells(weights.size()); - DynamicList<scalar> constraintEpsilon(weights.size()); - const labelUList& faceCells = patch().faceCells(); - - const DimensionedField<scalar, volMesh>& epsilon = - dimensionedInternalField(); - - label nConstrainedCells = 0; - - - forAll(weights, faceI) - { - // only set the values if the weights are > tolerance - if (weights[faceI] > tolerance_) - { - nConstrainedCells++; - - label cellI = faceCells[faceI]; - - constraintCells.append(cellI); - constraintEpsilon.append(epsilon[cellI]); - } - } - - if (debug) - { - Pout<< "Patch: " << patch().name() - << ": number of constrained cells = " << nConstrainedCells - << " out of " << patch().size() - << endl; - } - - matrix.setValues - ( - constraintCells, - scalarField(constraintEpsilon.xfer()) - ); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void epsilonWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchField<scalar>::write(os); - writeLocalEntries(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - epsilonWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H deleted file mode 100644 index ef2eeeb831d..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,291 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::incompressible::epsilonWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulence dissipation wall function - condition for high Reynolds number, turbulent flow cases. - - The condition can be applied to wall boundaries, whereby it - - calculates \c epsilon and \c G - - inserts near wall epsilon values directly into the epsilon equation - to act as a constraint - - where - - \vartable - epsilon | turblence dissipation field - G | turblence generation field - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type epsilonWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedInternalValueFvPatchField - -SourceFiles - epsilonWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef epsilonWallFunctionFvPatchScalarField_H -#define epsilonWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -class turbulenceModel; - -/*---------------------------------------------------------------------------*\ - Class epsilonWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class epsilonWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Tolerance used in weighted calculations - static scalar tolerance_; - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Local copy of turbulence G field - scalarField G_; - - //- Local copy of turbulence epsilon field - scalarField epsilon_; - - //- Initialised flag - bool initialised_; - - //- Master patch ID - label master_; - - //- List of averaging corner weights - List<List<scalar> > cornerWeights_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Set the master patch - master is responsible for updating all - // wall function patches - virtual void setMaster(); - - //- Create the averaging weights for cells which are bounded by - // multiple wall function faces - virtual void createAveragingWeights(); - - //- Helper function to return non-const access to an epsilon patch - virtual epsilonWallFunctionFvPatchScalarField& epsilonPatch - ( - const label patchI - ); - - //- Main driver to calculate the turbulence fields - virtual void calculateTurbulenceFields - ( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& epsilon0 - ); - - //- Calculate the epsilon and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& epsilon - ); - - //- Return non-const access to the master patch ID - virtual label& master() - { - return master_; - } - - -public: - - //- Runtime type information - TypeName("epsilonWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - epsilonWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - epsilonWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // epsilonWallFunctionFvPatchScalarField - // onto a new patch - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new epsilonWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - epsilonWallFunctionFvPatchScalarField - ( - const epsilonWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new epsilonWallFunctionFvPatchScalarField(*this, iF) - ); - } - - //- Destructor - virtual ~epsilonWallFunctionFvPatchScalarField() - {} - - - // Member functions - - // Access - - //- Return non-const access to the master's G field - scalarField& G(bool init = false); - - //- Return non-const access to the master's epsilon field - scalarField& epsilon(bool init = false); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(const scalarField& weights); - - //- Manipulate matrix - virtual void manipulateMatrix(fvMatrix<scalar>& matrix); - - //- Manipulate matrix with given weights - virtual void manipulateMatrix - ( - fvMatrix<scalar>& matrix, - const scalarField& weights - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index 437ea76234f..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,252 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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/>. - -\*---------------------------------------------------------------------------*/ - -#include "kLowReWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -void kLowReWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("kLowReWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar kLowReWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - Ceps2_(1.9), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - Ceps2_(ptf.Ceps2_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - Ceps2_(dict.lookupOrDefault<scalar>("Ceps2", 1.9)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& kwfpsf -) -: - fixedValueFvPatchField<scalar>(kwfpsf), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} - - -kLowReWallFunctionFvPatchScalarField::kLowReWallFunctionFvPatchScalarField -( - const kLowReWallFunctionFvPatchScalarField& kwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(kwfpsf, iF), - Cmu_(kwfpsf.Cmu_), - kappa_(kwfpsf.kappa_), - E_(kwfpsf.E_), - Ceps2_(kwfpsf.Ceps2_), - yPlusLam_(kwfpsf.yPlusLam_) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void kLowReWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const label patchI = patch().index(); - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbulence.y()[patchI]; - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tnu = turbulence.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - scalarField& kw = *this; - - // Set k wall values - forAll(kw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uTau = Cmu25*sqrt(k[faceCellI]); - - scalar yPlus = uTau*y[faceI]/nuw[faceI]; - - if (yPlus > yPlusLam_) - { - scalar Ck = -0.416; - scalar Bk = 8.366; - kw[faceI] = Ck/kappa_*log(yPlus) + Bk; - } - else - { - scalar C = 11.0; - scalar Cf = (1.0/sqr(yPlus + C) + 2.0*yPlus/pow3(C) - 1.0/sqr(C)); - kw[faceI] = 2400.0/sqr(Ceps2_)*Cf; - } - - kw[faceI] *= sqr(uTau); - } - - fixedValueFvPatchField<scalar>::updateCoeffs(); - - // TODO: perform averaging for cells sharing more than one boundary face -} - - -void kLowReWallFunctionFvPatchScalarField::evaluate -( - const Pstream::commsTypes commsType -) -{ - fixedValueFvPatchField<scalar>::evaluate(commsType); -} - - -void kLowReWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchField<scalar>::write(os); - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; - os.writeKeyword("Ceps2") << Ceps2_ << token::END_STATEMENT << nl; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - kLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index db99287eaaf..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kLowReWallFunction/kLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,207 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2012 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::incompressible::kLowReWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulence kinetic energy wall function - condition for low- and high-Reynolds number turbulent flow cases. - - The model operates in two modes, based on the computed laminar-to-turbulent - switch-over y+ value derived from kappa and E. - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - Ceps2 | model coefficient | no | 1.9 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type kLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - kLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kLowReWallFunctionFvPatchScalarField_H -#define kLowReWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class kLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class kLowReWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Ceps2 coefficient - scalar Ceps2_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Calculate the Y+ at the edge of the laminar sublayer - scalar yPlusLam(const scalar kappa, const scalar E); - - -public: - - //- Runtime type information - TypeName("kLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - kLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - kLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given kLowReWallFunctionFvPatchScalarField - // onto a new patch - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new kLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - kLowReWallFunctionFvPatchScalarField - ( - const kLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new kLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Evaluate the patchField - virtual void evaluate(const Pstream::commsTypes); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C deleted file mode 100644 index 9ff2371a62c..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.C +++ /dev/null @@ -1,150 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "kqRWallFunctionFvPatchField.H" -#include "fvPatchFieldMapper.H" -#include "addToRunTimeSelectionTable.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::checkType() -{ - if (!isA<wallFvPatch>(this->patch())) - { - FatalErrorIn("kqRWallFunctionFvPatchField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << this->patch().name() - << " must be wall" << nl - << " Current patch type is " << this->patch().type() - << nl << endl - << abort(FatalError); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF -) -: - zeroGradientFvPatchField<Type>(p, iF) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& ptf, - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - zeroGradientFvPatchField<Type>(ptf, p, iF, mapper) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const fvPatch& p, - const DimensionedField<Type, volMesh>& iF, - const dictionary& dict -) -: - zeroGradientFvPatchField<Type>(p, iF, dict) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& tkqrwfpf -) -: - zeroGradientFvPatchField<Type>(tkqrwfpf) -{ - checkType(); -} - - -template<class Type> -kqRWallFunctionFvPatchField<Type>::kqRWallFunctionFvPatchField -( - const kqRWallFunctionFvPatchField& tkqrwfpf, - const DimensionedField<Type, volMesh>& iF -) -: - zeroGradientFvPatchField<Type>(tkqrwfpf, iF) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::evaluate -( - const Pstream::commsTypes commsType -) -{ - zeroGradientFvPatchField<Type>::evaluate(commsType); -} - - -template<class Type> -void kqRWallFunctionFvPatchField<Type>::write(Ostream& os) const -{ - zeroGradientFvPatchField<Type>::write(os); - this->writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H deleted file mode 100644 index e9b3731deb1..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchField.H +++ /dev/null @@ -1,185 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::kqRWallFunctionFvPatchField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a suitable condition for turbulence - \c k, \c q, and \c R fields for the case of high Reynolds number flow using - wall functions. - - It is a simple wrapper around the zero-gradient condition. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type kqRWallFunction; - } - \endverbatim - -SeeAlso - Foam::zeroGradientFvPatchField - -SourceFiles - kqRWallFunctionFvPatchField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kqRWallFunctionFvPatchField_H -#define kqRWallFunctionFvPatchField_H - -#include "zeroGradientFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class kqRWallFunctionFvPatchField Declaration -\*---------------------------------------------------------------------------*/ - -template<class Type> -class kqRWallFunctionFvPatchField -: - public zeroGradientFvPatchField<Type> -{ - - // Private Member Functions - - //- Check the type of the patch - void checkType(); - - -public: - - //- Runtime type information - TypeName("kqRWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - kqRWallFunctionFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - kqRWallFunctionFvPatchField - ( - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // kqRWallFunctionFvPatchField - // onto a new patch - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField&, - const fvPatch&, - const DimensionedField<Type, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchField<Type> > clone() const - { - return tmp<fvPatchField<Type> > - ( - new kqRWallFunctionFvPatchField(*this) - ); - } - - //- Construct as copy setting internal field reference - kqRWallFunctionFvPatchField - ( - const kqRWallFunctionFvPatchField&, - const DimensionedField<Type, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchField<Type> > clone - ( - const DimensionedField<Type, volMesh>& iF - ) const - { - return tmp<fvPatchField<Type> > - ( - new kqRWallFunctionFvPatchField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Evaluate the patchField - virtual void evaluate - ( - const Pstream::commsTypes commsType=Pstream::Pstream::blocking - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository -# include "kqRWallFunctionFvPatchField.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C deleted file mode 100644 index 9465bdf18c5..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.C +++ /dev/null @@ -1,47 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "kqRWallFunctionFvPatchFields.H" -#include "fvPatchFields.H" -#include "addToRunTimeSelectionTable.H" -#include "volFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -makePatchFields(kqRWallFunction); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H deleted file mode 100644 index b9a2727f34d..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kqRWallFunctions/kqRWallFunction/kqRWallFunctionFvPatchFields.H +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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/>. - -\*---------------------------------------------------------------------------*/ - -#ifndef kqRWallFunctionFvPatchFields_H -#define kqRWallFunctionFvPatchFields_H - -#include "kqRWallFunctionFvPatchField.H" -#include "fieldTypes.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeFieldTypedefs(kqRWallFunction); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.C deleted file mode 100644 index a0e340bf4de..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,131 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutLowReWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutLowReWallFunctionFvPatchScalarField::calcNut() const -{ - return tmp<scalarField>(new scalarField(patch().size(), 0.0)); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutLowReWallFunctionFvPatchScalarField::nutLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF) -{} - - -nutLowReWallFunctionFvPatchScalarField::nutLowReWallFunctionFvPatchScalarField -( - const nutLowReWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -nutLowReWallFunctionFvPatchScalarField::nutLowReWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -nutLowReWallFunctionFvPatchScalarField::nutLowReWallFunctionFvPatchScalarField -( - const nutLowReWallFunctionFvPatchScalarField& nlrwfpsf -) -: - nutWallFunctionFvPatchScalarField(nlrwfpsf) -{} - - -nutLowReWallFunctionFvPatchScalarField::nutLowReWallFunctionFvPatchScalarField -( - const nutLowReWallFunctionFvPatchScalarField& nlrwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(nlrwfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutLowReWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - - return y*sqrt(nuw*mag(Uw.snGrad()))/nuw; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutLowReWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H deleted file mode 100644 index f79533c2042..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutLowReWallFunction/nutLowReWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,166 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutLowReWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - for use with low Reynolds number models. It sets \c nut to zero, and - provides an access function to calculate y+. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutLowReWallFunction; - } - \endverbatim - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutLowReWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutLowReWallFunctionFvPatchScalarField_H -#define nutLowReWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutLowReWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutLowReWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutLowReWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutLowReWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutLowReWallFunctionFvPatchScalarField - // onto a new patch - nutLowReWallFunctionFvPatchScalarField - ( - const nutLowReWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutLowReWallFunctionFvPatchScalarField - ( - const nutLowReWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutLowReWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutLowReWallFunctionFvPatchScalarField - ( - const nutLowReWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutLowReWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C deleted file mode 100644 index fb992f1e940..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,313 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutURoughWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutURoughWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - // The flow velocity at the adjacent cell centre - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - tmp<scalarField> tyPlus = calcYPlus(magUp); - scalarField& yPlus = tyPlus(); - - tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0)); - scalarField& nutw = tnutw(); - - forAll(yPlus, facei) - { - if (yPlus[facei] > yPlusLam_) - { - const scalar Re = magUp[facei]*y[facei]/nuw[facei] + ROOTVSMALL; - nutw[facei] = nuw[facei]*(sqr(yPlus[facei])/Re - 1); - } - } - - return tnutw; -} - - -tmp<scalarField> nutURoughWallFunctionFvPatchScalarField::calcYPlus -( - const scalarField& magUp -) const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - tmp<scalarField> tyPlus(new scalarField(patch().size(), 0.0)); - scalarField& yPlus = tyPlus(); - - if (roughnessHeight_ > 0.0) - { - // Rough Walls - const scalar c_1 = 1/(90 - 2.25) + roughnessConstant_; - static const scalar c_2 = 2.25/(90 - 2.25); - static const scalar c_3 = 2.0*atan(1.0)/log(90/2.25); - static const scalar c_4 = c_3*log(2.25); - - //if (KsPlusBasedOnYPlus_) - { - // If KsPlus is based on YPlus the extra term added to the law - // of the wall will depend on yPlus - forAll(yPlus, facei) - { - const scalar magUpara = magUp[facei]; - const scalar Re = magUpara*y[facei]/nuw[facei]; - const scalar kappaRe = kappa_*Re; - - scalar yp = yPlusLam_; - const scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - scalar dKsPlusdYPlus = roughnessHeight_/y[facei]; - - // Enforce the roughnessHeight to be less than the distance to - // the first cell centre - if (dKsPlusdYPlus > 1) - { - dKsPlusdYPlus = 1; - } - - // Additional tuning parameter - nominally = 1 - dKsPlusdYPlus *= roughnessFactor_; - - do - { - yPlusLast = yp; - - // The non-dimensional roughness height - scalar KsPlus = yp*dKsPlusdYPlus; - - // The extra term in the law-of-the-wall - scalar G = 0.0; - - scalar yPlusGPrime = 0.0; - - if (KsPlus >= 90) - { - const scalar t_1 = 1 + roughnessConstant_*KsPlus; - G = log(t_1); - yPlusGPrime = roughnessConstant_*KsPlus/t_1; - } - else if (KsPlus > 2.25) - { - const scalar t_1 = c_1*KsPlus - c_2; - const scalar t_2 = c_3*log(KsPlus) - c_4; - const scalar sint_2 = sin(t_2); - const scalar logt_1 = log(t_1); - G = logt_1*sint_2; - yPlusGPrime = - (c_1*sint_2*KsPlus/t_1) + (c_3*logt_1*cos(t_2)); - } - - scalar denom = 1.0 + log(E_*yp) - G - yPlusGPrime; - if (mag(denom) > VSMALL) - { - yp = (kappaRe + yp*(1 - yPlusGPrime))/denom; - } - } while - ( - mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 - && ++iter < 10 - && yp > VSMALL - ); - - yPlus[facei] = max(0.0, yp); - } - } - } - else - { - // Smooth Walls - forAll(yPlus, facei) - { - const scalar magUpara = magUp[facei]; - const scalar Re = magUpara*y[facei]/nuw[facei]; - const scalar kappaRe = kappa_*Re; - - scalar yp = yPlusLam_; - const scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - - do - { - yPlusLast = yp; - yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - - } while (mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 && ++iter < 10); - - yPlus[facei] = max(0.0, yp); - } - } - - return tyPlus; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutURoughWallFunctionFvPatchScalarField::nutURoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF), - roughnessHeight_(pTraits<scalar>::zero), - roughnessConstant_(pTraits<scalar>::zero), - roughnessFactor_(pTraits<scalar>::zero) -{} - - -nutURoughWallFunctionFvPatchScalarField::nutURoughWallFunctionFvPatchScalarField -( - const nutURoughWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - roughnessHeight_(ptf.roughnessHeight_), - roughnessConstant_(ptf.roughnessConstant_), - roughnessFactor_(ptf.roughnessFactor_) -{} - - -nutURoughWallFunctionFvPatchScalarField::nutURoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict), - roughnessHeight_(readScalar(dict.lookup("roughnessHeight"))), - roughnessConstant_(readScalar(dict.lookup("roughnessConstant"))), - roughnessFactor_(readScalar(dict.lookup("roughnessFactor"))) -{} - - -nutURoughWallFunctionFvPatchScalarField::nutURoughWallFunctionFvPatchScalarField -( - const nutURoughWallFunctionFvPatchScalarField& rwfpsf -) -: - nutWallFunctionFvPatchScalarField(rwfpsf), - roughnessHeight_(rwfpsf.roughnessHeight_), - roughnessConstant_(rwfpsf.roughnessConstant_), - roughnessFactor_(rwfpsf.roughnessFactor_) -{} - - -nutURoughWallFunctionFvPatchScalarField::nutURoughWallFunctionFvPatchScalarField -( - const nutURoughWallFunctionFvPatchScalarField& rwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(rwfpsf, iF), - roughnessHeight_(rwfpsf.roughnessHeight_), - roughnessConstant_(rwfpsf.roughnessConstant_), - roughnessFactor_(rwfpsf.roughnessFactor_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutURoughWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - tmp<scalarField> magUp = mag(Uw.patchInternalField() - Uw); - - return calcYPlus(magUp()); -} - - -void nutURoughWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - os.writeKeyword("roughnessHeight") - << roughnessHeight_ << token::END_STATEMENT << nl; - os.writeKeyword("roughnessConstant") - << roughnessConstant_ << token::END_STATEMENT << nl; - os.writeKeyword("roughnessFactor") - << roughnessFactor_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutURoughWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H deleted file mode 100644 index 17adf6f909f..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,241 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutURoughWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions for rough walls, based on velocity. - - \heading Patch usage - - \table - Property | Description | Required | Default value - roughnessHeight | roughness height | yes | - roughnessConstant | roughness constanr | yes | - roughnessFactor | scaling factor | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutURoughWallFunction; - roughnessHeight 1e-5; - roughnessConstant 0.5; - roughnessFactor 1; - } - \endverbatim - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutURoughWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutURoughWallFunctionFvPatchScalarField_H -#define nutURoughWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutURoughWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutURoughWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ - // Private data - - // Roughness model parameters - - //- Height - scalar roughnessHeight_; - - //- Constant - scalar roughnessConstant_; - - //- Scale factor - scalar roughnessFactor_; - - - // Protected Member Functions - - //- Calculate yPLus - virtual tmp<scalarField> calcYPlus(const scalarField& magUp) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutURoughWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutURoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutURoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutURoughWallFunctionFvPatchScalarField - // onto a new patch - nutURoughWallFunctionFvPatchScalarField - ( - const nutURoughWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutURoughWallFunctionFvPatchScalarField - ( - const nutURoughWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutURoughWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutURoughWallFunctionFvPatchScalarField - ( - const nutURoughWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutURoughWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Access - - //- Return the roughness height - scalar roughnessHeight() const - { - return roughnessHeight_; - } - - //- Return reference to the roughness height to allow adjustment - scalar& roughnessHeight() - { - return roughnessHeight_; - } - - - //- Return the roughness constant scale - scalar roughnessConstant() const - { - return roughnessConstant_; - } - - //- Return reference to the roughness constant to allow adjustment - scalar& roughnessConstant() - { - return roughnessConstant_; - } - - //- Return the roughness scale factor - scalar roughnessFactor() const - { - return roughnessFactor_; - } - - //- Return reference to the roughness scale factor to allow - // adjustment - scalar& roughnessFactor() - { - return roughnessFactor_; - } - - - // I-O - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C deleted file mode 100644 index 7dca54b3e59..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,220 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutUSpaldingWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutUSpaldingWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchI = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchI]; - const scalarField magGradU(mag(Uw.snGrad())); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchI]; - - return max - ( - scalar(0), - sqr(calcUTau(magGradU))/(magGradU + ROOTVSMALL) - nuw - ); -} - - -tmp<scalarField> nutUSpaldingWallFunctionFvPatchScalarField::calcUTau -( - const scalarField& magGradU -) const -{ - const label patchI = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchI]; - - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchI]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchI]; - - const scalarField& nutw = *this; - - tmp<scalarField> tuTau(new scalarField(patch().size(), 0.0)); - scalarField& uTau = tuTau(); - - forAll(uTau, faceI) - { - scalar ut = sqrt((nutw[faceI] + nuw[faceI])*magGradU[faceI]); - - if (ut > ROOTVSMALL) - { - int iter = 0; - scalar err = GREAT; - - do - { - scalar kUu = min(kappa_*magUp[faceI]/ut, 50); - scalar fkUu = exp(kUu) - 1 - kUu*(1 + 0.5*kUu); - - scalar f = - - ut*y[faceI]/nuw[faceI] - + magUp[faceI]/ut - + 1/E_*(fkUu - 1.0/6.0*kUu*sqr(kUu)); - - scalar df = - y[faceI]/nuw[faceI] - + magUp[faceI]/sqr(ut) - + 1/E_*kUu*fkUu/ut; - - scalar uTauNew = ut + f/df; - err = mag((ut - uTauNew)/ut); - ut = uTauNew; - - } while (ut > ROOTVSMALL && err > 0.01 && ++iter < 10); - - uTau[faceI] = max(0.0, ut); - } - } - - return tuTau; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutUSpaldingWallFunctionFvPatchScalarField:: -nutUSpaldingWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF) -{} - - -nutUSpaldingWallFunctionFvPatchScalarField:: -nutUSpaldingWallFunctionFvPatchScalarField -( - const nutUSpaldingWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -nutUSpaldingWallFunctionFvPatchScalarField:: -nutUSpaldingWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -nutUSpaldingWallFunctionFvPatchScalarField:: -nutUSpaldingWallFunctionFvPatchScalarField -( - const nutUSpaldingWallFunctionFvPatchScalarField& wfpsf -) -: - nutWallFunctionFvPatchScalarField(wfpsf) -{} - - -nutUSpaldingWallFunctionFvPatchScalarField:: -nutUSpaldingWallFunctionFvPatchScalarField -( - const nutUSpaldingWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(wfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutUSpaldingWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - return y*calcUTau(mag(Uw.snGrad()))/nuw; -} - - -void nutUSpaldingWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutUSpaldingWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H deleted file mode 100644 index 210de458373..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,190 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutUSpaldingWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions for rough walls, based on velocity, using - Spalding's law to give a continuous nut profile to the wall (y+ = 0) - - \f[ - y^+ = u^+ + \frac{1}{E} \left[exp(\kappa u^+) - 1 - \kappa u^+\, - - 0.5 (\kappa u^+)^2 - \frac{1}{6} (\kappa u^+)^3\right] - \f] - - where - \vartable - y^+ | non-dimensional position - u^+ | non-dimensional velocity - \kappa | Von Karman constant - \endvartable - - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutUSpaldingWallFunction; - } - \endverbatim - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutUSpaldingWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutUSpaldingWallFunctionFvPatchScalarField_H -#define nutUSpaldingWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutUSpaldingWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutUSpaldingWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - //- Calculate the friction velocity - virtual tmp<scalarField> calcUTau(const scalarField& magGradU) const; - - -public: - - //- Runtime type information - TypeName("nutUSpaldingWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutUSpaldingWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutUSpaldingWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutUSpaldingWallFunctionFvPatchScalarField - // onto a new patch - nutUSpaldingWallFunctionFvPatchScalarField - ( - const nutUSpaldingWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutUSpaldingWallFunctionFvPatchScalarField - ( - const nutUSpaldingWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutUSpaldingWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutUSpaldingWallFunctionFvPatchScalarField - ( - const nutUSpaldingWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutUSpaldingWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C deleted file mode 100644 index 63bab814711..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,218 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutUTabulatedWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - const scalarField magGradU(mag(Uw.snGrad())); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - return - max - ( - scalar(0), - sqr(magUp/(calcUPlus(magUp*y/nuw) + ROOTVSMALL)) - /(magGradU + ROOTVSMALL) - - nuw - ); -} - - -tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::calcUPlus -( - const scalarField& Rey -) const -{ - tmp<scalarField> tuPlus(new scalarField(patch().size(), 0.0)); - scalarField& uPlus = tuPlus(); - - forAll(uPlus, faceI) - { - uPlus[faceI] = uPlusTable_.interpolateLog10(Rey[faceI]); - } - - return tuPlus; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutUTabulatedWallFunctionFvPatchScalarField:: -nutUTabulatedWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF), - uPlusTableName_("undefined-uPlusTableName"), - uPlusTable_ - ( - IOobject - ( - uPlusTableName_, - patch().boundaryMesh().mesh().time().constant(), - patch().boundaryMesh().mesh(), - IOobject::NO_READ, - IOobject::NO_WRITE, - false - ), - false - ) -{} - - -nutUTabulatedWallFunctionFvPatchScalarField:: -nutUTabulatedWallFunctionFvPatchScalarField -( - const nutUTabulatedWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - uPlusTableName_(ptf.uPlusTableName_), - uPlusTable_(ptf.uPlusTable_) -{} - - -nutUTabulatedWallFunctionFvPatchScalarField:: -nutUTabulatedWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict), - uPlusTableName_(dict.lookup("uPlusTable")), - uPlusTable_ - ( - IOobject - ( - uPlusTableName_, - patch().boundaryMesh().mesh().time().constant(), - patch().boundaryMesh().mesh(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ), - true - ) -{} - - -nutUTabulatedWallFunctionFvPatchScalarField:: -nutUTabulatedWallFunctionFvPatchScalarField -( - const nutUTabulatedWallFunctionFvPatchScalarField& wfpsf -) -: - nutWallFunctionFvPatchScalarField(wfpsf), - uPlusTableName_(wfpsf.uPlusTableName_), - uPlusTable_(wfpsf.uPlusTable_) -{} - - -nutUTabulatedWallFunctionFvPatchScalarField:: -nutUTabulatedWallFunctionFvPatchScalarField -( - const nutUTabulatedWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(wfpsf, iF), - uPlusTableName_(wfpsf.uPlusTableName_), - uPlusTable_(wfpsf.uPlusTable_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - const scalarField Rey(magUp*y/nuw); - - return Rey/(calcUPlus(Rey) + ROOTVSMALL); -} - - -void nutUTabulatedWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - os.writeKeyword("uPlusTable") << uPlusTableName_ - << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutUTabulatedWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H deleted file mode 100644 index f4f3d9a8f32..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::incompressible::nutUTabulatedWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions. As input, the user specifies a look-up table - of U+ as a function of near-wall Reynolds number. The table should be - located in the $FOAM_CASE/constant directory. - - \heading Patch usage - - \table - Property | Description | Required | Default value - uPlusTable | U+ as a function of Re table name | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutTabulatedWallFunction; - uPlusTable myUPlusTable; - } - \endverbatim - -Note - The tables are not registered since the same table object may be used for - more than one patch. - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutUTabulatedWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutUTabulatedWallFunctionFvPatchScalarField_H -#define nutUTabulatedWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" -#include "uniformInterpolationTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutUTabulatedWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutUTabulatedWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ -protected: - - // Protected data - - //- Name of u+ table - word uPlusTableName_; - - //- U+ table - uniformInterpolationTable<scalar> uPlusTable_; - - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - //- Calculate wall u+ from table - virtual tmp<scalarField> calcUPlus(const scalarField& Rey) const; - - -public: - - //- Runtime type information - TypeName("nutTabulatedWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutUTabulatedWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutUTabulatedWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutUTabulatedWallFunctionFvPatchScalarField - // onto a new patch - nutUTabulatedWallFunctionFvPatchScalarField - ( - const nutUTabulatedWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutUTabulatedWallFunctionFvPatchScalarField - ( - const nutUTabulatedWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutUTabulatedWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutUTabulatedWallFunctionFvPatchScalarField - ( - const nutUTabulatedWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutUTabulatedWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C deleted file mode 100644 index 3b34b46df12..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,202 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutUWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutUWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - tmp<scalarField> tyPlus = calcYPlus(magUp); - scalarField& yPlus = tyPlus(); - - tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0)); - scalarField& nutw = tnutw(); - - forAll(yPlus, facei) - { - if (yPlus[facei] > yPlusLam_) - { - nutw[facei] = - nuw[facei]*(yPlus[facei]*kappa_/log(E_*yPlus[facei]) - 1.0); - } - } - - return tnutw; -} - - -tmp<scalarField> nutUWallFunctionFvPatchScalarField::calcYPlus -( - const scalarField& magUp -) const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - tmp<scalarField> tyPlus(new scalarField(patch().size(), 0.0)); - scalarField& yPlus = tyPlus(); - - forAll(yPlus, facei) - { - scalar kappaRe = kappa_*magUp[facei]*y[facei]/nuw[facei]; - - scalar yp = yPlusLam_; - scalar ryPlusLam = 1.0/yp; - - int iter = 0; - scalar yPlusLast = 0.0; - - do - { - yPlusLast = yp; - yp = (kappaRe + yp)/(1.0 + log(E_*yp)); - - } while (mag(ryPlusLam*(yp - yPlusLast)) > 0.01 && ++iter < 10 ); - - yPlus[facei] = max(0.0, yp); - } - - return tyPlus; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutUWallFunctionFvPatchScalarField::nutUWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF) -{} - - -nutUWallFunctionFvPatchScalarField::nutUWallFunctionFvPatchScalarField -( - const nutUWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -nutUWallFunctionFvPatchScalarField::nutUWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -nutUWallFunctionFvPatchScalarField::nutUWallFunctionFvPatchScalarField -( - const nutUWallFunctionFvPatchScalarField& sawfpsf -) -: - nutWallFunctionFvPatchScalarField(sawfpsf) -{} - - -nutUWallFunctionFvPatchScalarField::nutUWallFunctionFvPatchScalarField -( - const nutUWallFunctionFvPatchScalarField& sawfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(sawfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutUWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi]; - const scalarField magUp(mag(Uw.patchInternalField() - Uw)); - - return calcYPlus(magUp); -} - - -void nutUWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutUWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H deleted file mode 100644 index 0a34ad6faca..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUWallFunction/nutUWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,176 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutUWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions, based on velocity. - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutUWallFunction; - } - \endverbatim - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutUWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutUWallFunctionFvPatchScalarField_H -#define nutUWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutUWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutUWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate yPLus - virtual tmp<scalarField> calcYPlus(const scalarField& magUp) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutUWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutUWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutUWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutUWallFunctionFvPatchScalarField - // onto a new patch - nutUWallFunctionFvPatchScalarField - ( - const nutUWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutUWallFunctionFvPatchScalarField - ( - const nutUWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutUWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutUWallFunctionFvPatchScalarField - ( - const nutUWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutUWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Evaluation functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; - - - // I-O - - //- Write - virtual void write(Ostream& os) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.C deleted file mode 100644 index 3b8749974d7..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------* \ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutWallFunctionFvPatchScalarField.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -defineTypeNameAndDebug(nutWallFunctionFvPatchScalarField, 0); - - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void nutWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("nutWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void nutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField -( - const nutWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchScalarField(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - yPlusLam_(ptf.yPlusLam_) -{ - checkType(); -} - - -nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchScalarField(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - yPlusLam_(yPlusLam(kappa_, E_)) -{ - checkType(); -} - - -nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField -( - const nutWallFunctionFvPatchScalarField& wfpsf -) -: - fixedValueFvPatchScalarField(wfpsf), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_), - yPlusLam_(wfpsf.yPlusLam_) -{ - checkType(); -} - - -nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField -( - const nutWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchScalarField(wfpsf, iF), - Cmu_(wfpsf.Cmu_), - kappa_(wfpsf.kappa_), - E_(wfpsf.E_), - yPlusLam_(wfpsf.yPlusLam_) -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalar nutWallFunctionFvPatchScalarField::yPlusLam -( - const scalar kappa, - const scalar E -) -{ - scalar ypl = 11.0; - - for (int i=0; i<10; i++) - { - ypl = log(max(E*ypl, 1))/kappa; - } - - return ypl; -} - - -void nutWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - operator==(calcNut()); - - fixedValueFvPatchScalarField::updateCoeffs(); -} - - -void nutWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H deleted file mode 100644 index de68000bd9f..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,181 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions, based on turbulence kinetic energy. - - replicates OpenFOAM v1.5 (and earlier) behaviour - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutWallFunction; - } - \endverbatim - -SeeAlso - Foam::fixedValueFvPatchField - -SourceFiles - nutWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutWallFunctionFvPatchScalarField_H -#define nutWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutWallFunctionFvPatchScalarField -: - public fixedValueFvPatchScalarField -{ -protected: - - // Protected data - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const = 0; - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - -public: - - //- Runtime type information - TypeName("nutWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutWallFunctionFvPatchScalarField - // onto a new patch - nutWallFunctionFvPatchScalarField - ( - const nutWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutWallFunctionFvPatchScalarField - ( - const nutWallFunctionFvPatchScalarField& - ); - - //- Construct as copy setting internal field reference - nutWallFunctionFvPatchScalarField - ( - const nutWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - - // Member functions - - //- Calculate the Y+ at the edge of the laminar sublayer - static scalar yPlusLam(const scalar kappa, const scalar E); - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const = 0; - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C deleted file mode 100644 index 9e724596bf1..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "nutkAtmRoughWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutkAtmRoughWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchI = patch().index(); - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbulence.y()[patchI]; - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - const tmp<volScalarField> tnu = turbulence.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - tmp<scalarField> tnutw(new scalarField(*this)); - scalarField& nutw = tnutw(); - - forAll(nutw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uStar = Cmu25*sqrt(k[faceCellI]); - scalar yPlus = uStar*y[faceI]/nuw[faceI]; - - scalar Edash = (y[faceI] + z0_[faceI])/(z0_[faceI] + 1e-4); - - nutw[faceI] = - nuw[faceI]*(yPlus*kappa_/log(max(Edash, 1 + 1e-4)) - 1); - - if (debug) - { - Info<< "yPlus = " << yPlus - << ", Edash = " << Edash - << ", nutw = " << nutw[faceI] - << endl; - } - } - - return tnutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutkAtmRoughWallFunctionFvPatchScalarField:: -nutkAtmRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutkWallFunctionFvPatchScalarField(p, iF), - z0_(p.size(), 0.0) -{} - - -nutkAtmRoughWallFunctionFvPatchScalarField:: -nutkAtmRoughWallFunctionFvPatchScalarField -( - const nutkAtmRoughWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - z0_(ptf.z0_, mapper) -{} - - -nutkAtmRoughWallFunctionFvPatchScalarField:: -nutkAtmRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutkWallFunctionFvPatchScalarField(p, iF, dict), - z0_("z0", dict, p.size()) -{} - - -nutkAtmRoughWallFunctionFvPatchScalarField:: -nutkAtmRoughWallFunctionFvPatchScalarField -( - const nutkAtmRoughWallFunctionFvPatchScalarField& rwfpsf -) -: - nutkWallFunctionFvPatchScalarField(rwfpsf), - z0_(rwfpsf.z0_) -{} - - -nutkAtmRoughWallFunctionFvPatchScalarField:: -nutkAtmRoughWallFunctionFvPatchScalarField -( - const nutkAtmRoughWallFunctionFvPatchScalarField& rwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutkWallFunctionFvPatchScalarField(rwfpsf, iF), - z0_(rwfpsf.z0_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void nutkAtmRoughWallFunctionFvPatchScalarField::autoMap -( - const fvPatchFieldMapper& m -) -{ - nutkWallFunctionFvPatchScalarField::autoMap(m); - z0_.autoMap(m); -} - - -void nutkAtmRoughWallFunctionFvPatchScalarField::rmap -( - const fvPatchScalarField& ptf, - const labelList& addr -) -{ - nutkWallFunctionFvPatchScalarField::rmap(ptf, addr); - - const nutkAtmRoughWallFunctionFvPatchScalarField& nrwfpsf = - refCast<const nutkAtmRoughWallFunctionFvPatchScalarField>(ptf); - - z0_.rmap(nrwfpsf.z0_, addr); -} - - -void nutkAtmRoughWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - z0_.writeEntry("z0", os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutkAtmRoughWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.H deleted file mode 100644 index 3767de1fc0d..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,217 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutkAtmRoughWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity for - atmospheric velocity profiles. It is desinged to be used in conjunction - with the atmBoundaryLayerInletVelocity boundary condition. The values - are calculated using: - - \f[ - U = frac{U_f}{K} ln(\frac{z + z_0}{z_0}) - \f] - - where - - \vartable - U_f | frictional velocity - K | Von Karman's constant - z_0 | surface roughness length - z | vertical co-ordinate - \endvartable - - \heading Patch usage - - \table - Property | Description | Required | Default value - z0 | surface roughness length| yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutkAtmRoughWallFunction; - z0 uniform 0; - } - \endverbatim - -SeeAlso - Foam::nutkWallFunctionFvPatchField - -SourceFiles - nutkAtmRoughWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutkAtmRoughWallFunctionFvPatchScalarField_H -#define nutkAtmRoughWallFunctionFvPatchScalarField_H - -#include "nutkWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutkAtmRoughWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutkAtmRoughWallFunctionFvPatchScalarField -: - public nutkWallFunctionFvPatchScalarField -{ -protected: - - // Protected data - - //- Surface roughness length - scalarField z0_; - - - // Protected Member Functions - - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutkAtmRoughWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutkAtmRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutkAtmRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutkAtmRoughWallFunctionFvPatchScalarField - // onto a new patch - nutkAtmRoughWallFunctionFvPatchScalarField - ( - const nutkAtmRoughWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutkAtmRoughWallFunctionFvPatchScalarField - ( - const nutkAtmRoughWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutkAtmRoughWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutkAtmRoughWallFunctionFvPatchScalarField - ( - const nutkAtmRoughWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutkAtmRoughWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Acces functions - - // Return z0 - scalarField& z0() - { - return z0_; - } - - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap(const fvPatchFieldMapper&); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchScalarField&, - const labelList& - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C deleted file mode 100644 index 61d80688268..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,241 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutkRoughWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -scalar nutkRoughWallFunctionFvPatchScalarField::fnRough -( - const scalar KsPlus, - const scalar Cs -) const -{ - // Return fn based on non-dimensional roughness height - - if (KsPlus < 90.0) - { - return pow - ( - (KsPlus - 2.25)/87.75 + Cs*KsPlus, - sin(0.4258*(log(KsPlus) - 0.811)) - ); - } - else - { - return (1.0 + Cs*KsPlus); - } -} - - -tmp<scalarField> nutkRoughWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - const scalar Cmu25 = pow025(Cmu_); - - tmp<scalarField> tnutw(new scalarField(*this)); - scalarField& nutw = tnutw(); - - forAll(nutw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar uStar = Cmu25*sqrt(k[faceCellI]); - scalar yPlus = uStar*y[faceI]/nuw[faceI]; - scalar KsPlus = uStar*Ks_[faceI]/nuw[faceI]; - - scalar Edash = E_; - if (KsPlus > 2.25) - { - Edash /= fnRough(KsPlus, Cs_[faceI]); - } - - scalar limitingNutw = max(nutw[faceI], nuw[faceI]); - - // To avoid oscillations limit the change in the wall viscosity - // which is particularly important if it temporarily becomes zero - nutw[faceI] = - max - ( - min - ( - nuw[faceI] - *(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1), - 2*limitingNutw - ), 0.5*limitingNutw - ); - - if (debug) - { - Info<< "yPlus = " << yPlus - << ", KsPlus = " << KsPlus - << ", Edash = " << Edash - << ", nutw = " << nutw[faceI] - << endl; - } - } - - return tnutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutkWallFunctionFvPatchScalarField(p, iF), - Ks_(p.size(), 0.0), - Cs_(p.size(), 0.0) -{} - - -nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField -( - const nutkRoughWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper), - Ks_(ptf.Ks_, mapper), - Cs_(ptf.Cs_, mapper) -{} - - -nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutkWallFunctionFvPatchScalarField(p, iF, dict), - Ks_("Ks", dict, p.size()), - Cs_("Cs", dict, p.size()) -{} - - -nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField -( - const nutkRoughWallFunctionFvPatchScalarField& rwfpsf -) -: - nutkWallFunctionFvPatchScalarField(rwfpsf), - Ks_(rwfpsf.Ks_), - Cs_(rwfpsf.Cs_) -{} - - -nutkRoughWallFunctionFvPatchScalarField::nutkRoughWallFunctionFvPatchScalarField -( - const nutkRoughWallFunctionFvPatchScalarField& rwfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutkWallFunctionFvPatchScalarField(rwfpsf, iF), - Ks_(rwfpsf.Ks_), - Cs_(rwfpsf.Cs_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void nutkRoughWallFunctionFvPatchScalarField::autoMap -( - const fvPatchFieldMapper& m -) -{ - nutkWallFunctionFvPatchScalarField::autoMap(m); - Ks_.autoMap(m); - Cs_.autoMap(m); -} - - -void nutkRoughWallFunctionFvPatchScalarField::rmap -( - const fvPatchScalarField& ptf, - const labelList& addr -) -{ - nutkWallFunctionFvPatchScalarField::rmap(ptf, addr); - - const nutkRoughWallFunctionFvPatchScalarField& nrwfpsf = - refCast<const nutkRoughWallFunctionFvPatchScalarField>(ptf); - - Ks_.rmap(nrwfpsf.Ks_, addr); - Cs_.rmap(nrwfpsf.Cs_, addr); -} - - -void nutkRoughWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fvPatchField<scalar>::write(os); - writeLocalEntries(os); - Cs_.writeEntry("Cs", os); - Ks_.writeEntry("Ks", os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutkRoughWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H deleted file mode 100644 index 5f5e495fdd1..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,221 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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::incompressible::nutkRoughWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions for rough walls, based on turbulence kinetic - energy. The condition manipulates the E parameter to account for roughness - effects. - - Parameter ranges - - roughness height = sand-grain roughness (0 for smooth walls) - - roughness constant = 0.5-1.0 - - \heading Patch usage - - \table - Property | Description | Required | Default value - Ks | sand-grain roughness height | yes | - Cs | roughness constant | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutkRoughWallFunction; - Ks uniform 0; - Cs uniform 0.5; - } - \endverbatim - -SeeAlso - Foam::nutkRoughWallFunctionFvPatchScalarField - -SourceFiles - nutkRoughWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutkRoughWallFunctionFvPatchScalarField_H -#define nutkRoughWallFunctionFvPatchScalarField_H - -#include "nutkWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutkRoughWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutkRoughWallFunctionFvPatchScalarField -: - public nutkWallFunctionFvPatchScalarField -{ -protected: - - // Protected data - - //- Roughness height - scalarField Ks_; - - //- Roughness constant - scalarField Cs_; - - - // Protected Member Functions - - //- Compute the roughness function - virtual scalar fnRough(const scalar KsPlus, const scalar Cs) const; - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutkRoughWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutkRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutkRoughWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutkRoughWallFunctionFvPatchScalarField - // onto a new patch - nutkRoughWallFunctionFvPatchScalarField - ( - const nutkRoughWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutkRoughWallFunctionFvPatchScalarField - ( - const nutkRoughWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutkRoughWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutkRoughWallFunctionFvPatchScalarField - ( - const nutkRoughWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutkRoughWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Acces functions - - // Return Ks - scalarField& Ks() - { - return Ks_; - } - - // Return Cs - scalarField& Cs() - { - return Cs_; - } - - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap(const fvPatchFieldMapper&); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchScalarField&, - const labelList& - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C deleted file mode 100644 index bfc542434fa..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,164 +0,0 @@ -/*---------------------------------------------------------------------------* \ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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 "nutkWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -tmp<scalarField> nutkWallFunctionFvPatchScalarField::calcNut() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - const scalar Cmu25 = pow025(Cmu_); - - tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0)); - scalarField& nutw = tnutw(); - - forAll(nutw, faceI) - { - label faceCellI = patch().faceCells()[faceI]; - - scalar yPlus = Cmu25*y[faceI]*sqrt(k[faceCellI])/nuw[faceI]; - - if (yPlus > yPlusLam_) - { - nutw[faceI] = nuw[faceI]*(yPlus*kappa_/log(E_*yPlus) - 1.0); - } - } - - return tnutw; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -nutkWallFunctionFvPatchScalarField::nutkWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(p, iF) -{} - - -nutkWallFunctionFvPatchScalarField::nutkWallFunctionFvPatchScalarField -( - const nutkWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper) -{} - - -nutkWallFunctionFvPatchScalarField::nutkWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - nutWallFunctionFvPatchScalarField(p, iF, dict) -{} - - -nutkWallFunctionFvPatchScalarField::nutkWallFunctionFvPatchScalarField -( - const nutkWallFunctionFvPatchScalarField& wfpsf -) -: - nutWallFunctionFvPatchScalarField(wfpsf) -{} - - -nutkWallFunctionFvPatchScalarField::nutkWallFunctionFvPatchScalarField -( - const nutkWallFunctionFvPatchScalarField& wfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - nutWallFunctionFvPatchScalarField(wfpsf, iF) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<scalarField> nutkWallFunctionFvPatchScalarField::yPlus() const -{ - const label patchi = patch().index(); - - const turbulenceModel& turbModel = - db().lookupObject<turbulenceModel>("turbulenceModel"); - const scalarField& y = turbModel.y()[patchi]; - - const tmp<volScalarField> tk = turbModel.k(); - const volScalarField& k = tk(); - tmp<scalarField> kwc = k.boundaryField()[patchi].patchInternalField(); - const tmp<volScalarField> tnu = turbModel.nu(); - const volScalarField& nu = tnu(); - const scalarField& nuw = nu.boundaryField()[patchi]; - - return pow025(Cmu_)*y*sqrt(kwc)/nuw; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - nutkWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H deleted file mode 100644 index ef0a3066db7..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutkWallFunction/nutkWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,166 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 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::incompressible::nutkWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a turbulent kinematic viscosity condition - when using wall functions, based on turbulence kinetic energy. - - replicates OpenFOAM v1.5 (and earlier) behaviour - - \heading Patch usage - - Example of the boundary condition specification: - \verbatim - myPatch - { - type nutkWallFunction; - } - \endverbatim - -SeeAlso - Foam::nutWallFunctionFvPatchScalarField - -SourceFiles - nutkWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef nutkWallFunctionFvPatchScalarField_H -#define nutkWallFunctionFvPatchScalarField_H - -#include "nutWallFunctionFvPatchScalarField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class nutkWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class nutkWallFunctionFvPatchScalarField -: - public nutWallFunctionFvPatchScalarField -{ -protected: - - // Protected Member Functions - - //- Calculate the turbulence viscosity - virtual tmp<scalarField> calcNut() const; - - -public: - - //- Runtime type information - TypeName("nutkWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - nutkWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - nutkWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // nutkWallFunctionFvPatchScalarField - // onto a new patch - nutkWallFunctionFvPatchScalarField - ( - const nutkWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - nutkWallFunctionFvPatchScalarField - ( - const nutkWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new nutkWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - nutkWallFunctionFvPatchScalarField - ( - const nutkWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new nutkWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - //- Calculate and return the yPlus at the boundary - virtual tmp<scalarField> yPlus() const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C deleted file mode 100644 index ebc195ece68..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C +++ /dev/null @@ -1,601 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "omegaWallFunctionFvPatchScalarField.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" -#include "fvPatchFieldMapper.H" -#include "fvMatrix.H" -#include "volFields.H" -#include "wallFvPatch.H" -#include "nutkWallFunctionFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -scalar omegaWallFunctionFvPatchScalarField::tolerance_ = 1e-5; - -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void omegaWallFunctionFvPatchScalarField::checkType() -{ - if (!isA<wallFvPatch>(patch())) - { - FatalErrorIn("omegaWallFunctionFvPatchScalarField::checkType()") - << "Invalid wall function specification" << nl - << " Patch type for patch " << patch().name() - << " must be wall" << nl - << " Current patch type is " << patch().type() << nl << endl - << abort(FatalError); - } -} - - -void omegaWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const -{ - os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl; - os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl; - os.writeKeyword("E") << E_ << token::END_STATEMENT << nl; - os.writeKeyword("beta1") << beta1_ << token::END_STATEMENT << nl; -} - - -void omegaWallFunctionFvPatchScalarField::setMaster() -{ - if (master_ != -1) - { - return; - } - - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - label master = -1; - forAll(bf, patchI) - { - if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchI])) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - if (master == -1) - { - master = patchI; - } - - opf.master() = master; - } - } -} - - -void omegaWallFunctionFvPatchScalarField::createAveragingWeights() -{ - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - const fvMesh& mesh = omega.mesh(); - - if (initialised_ && !mesh.changing()) - { - return; - } - - volScalarField weights - ( - IOobject - ( - "weights", - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE, - false // do not register - ), - mesh, - dimensionedScalar("zero", dimless, 0.0) - ); - - DynamicList<label> omegaPatches(bf.size()); - forAll(bf, patchI) - { - if (isA<omegaWallFunctionFvPatchScalarField>(bf[patchI])) - { - omegaPatches.append(patchI); - - const labelUList& faceCells = bf[patchI].patch().faceCells(); - forAll(faceCells, i) - { - label cellI = faceCells[i]; - weights[cellI]++; - } - } - } - - cornerWeights_.setSize(bf.size()); - forAll(omegaPatches, i) - { - label patchI = omegaPatches[i]; - const fvPatchScalarField& wf = weights.boundaryField()[patchI]; - cornerWeights_[patchI] = 1.0/wf.patchInternalField(); - } - - G_.setSize(dimensionedInternalField().size(), 0.0); - omega_.setSize(dimensionedInternalField().size(), 0.0); - - initialised_ = true; -} - - -omegaWallFunctionFvPatchScalarField& -omegaWallFunctionFvPatchScalarField::omegaPatch(const label patchI) -{ - const volScalarField& omega = - static_cast<const volScalarField&>(this->dimensionedInternalField()); - - const volScalarField::GeometricBoundaryField& bf = omega.boundaryField(); - - const omegaWallFunctionFvPatchScalarField& opf = - refCast<const omegaWallFunctionFvPatchScalarField>(bf[patchI]); - - return const_cast<omegaWallFunctionFvPatchScalarField&>(opf); -} - - -void omegaWallFunctionFvPatchScalarField::calculateTurbulenceFields -( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& omega0 -) -{ - // accumulate all of the G and omega contributions - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - const List<scalar>& w = cornerWeights_[patchI]; - - opf.calculate(turbulence, w, opf.patch(), G0, omega0); - } - } - - // apply zero-gradient condition for omega - forAll(cornerWeights_, patchI) - { - if (!cornerWeights_[patchI].empty()) - { - omegaWallFunctionFvPatchScalarField& opf = omegaPatch(patchI); - - opf == scalarField(omega0, opf.patch().faceCells()); - } - } -} - - -void omegaWallFunctionFvPatchScalarField::calculate -( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& omega -) -{ - const label patchI = patch.index(); - - const scalarField& y = turbulence.y()[patchI]; - - const scalar Cmu25 = pow025(Cmu_); - - const tmp<volScalarField> tk = turbulence.k(); - const volScalarField& k = tk(); - - const tmp<volScalarField> tnu = turbulence.nu(); - const scalarField& nuw = tnu().boundaryField()[patchI]; - - const tmp<volScalarField> tnut = turbulence.nut(); - const volScalarField& nut = tnut(); - const scalarField& nutw = nut.boundaryField()[patchI]; - - const fvPatchVectorField& Uw = turbulence.U().boundaryField()[patchI]; - - const scalarField magGradUw(mag(Uw.snGrad())); - - // Set omega and G - forAll(nutw, faceI) - { - label cellI = patch.faceCells()[faceI]; - - scalar w = cornerWeights[faceI]; - - scalar omegaVis = 6.0*nuw[faceI]/(beta1_*sqr(y[faceI])); - - scalar omegaLog = sqrt(k[cellI])/(Cmu25*kappa_*y[faceI]); - - omega[cellI] += w*sqrt(sqr(omegaVis) + sqr(omegaLog)); - - G[cellI] += - w - *(nutw[faceI] + nuw[faceI]) - *magGradUw[faceI] - *Cmu25*sqrt(k[cellI]) - /(kappa_*y[faceI]); - } -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(p, iF), - Cmu_(0.09), - kappa_(0.41), - E_(9.8), - beta1_(0.075), - yPlusLam_(nutkWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchField<scalar>(ptf, p, iF, mapper), - Cmu_(ptf.Cmu_), - kappa_(ptf.kappa_), - E_(ptf.E_), - beta1_(ptf.beta1_), - yPlusLam_(ptf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchField<scalar>(p, iF, dict), - Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)), - kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)), - E_(dict.lookupOrDefault<scalar>("E", 9.8)), - beta1_(dict.lookupOrDefault<scalar>("beta1", 0.075)), - yPlusLam_(nutkWallFunctionFvPatchScalarField::yPlusLam(kappa_, E_)), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); - - // apply zero-gradient condition on start-up - this->operator==(patchInternalField()); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& owfpsf -) -: - fixedValueFvPatchField<scalar>(owfpsf), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), - beta1_(owfpsf.beta1_), - yPlusLam_(owfpsf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -omegaWallFunctionFvPatchScalarField::omegaWallFunctionFvPatchScalarField -( - const omegaWallFunctionFvPatchScalarField& owfpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedValueFvPatchField<scalar>(owfpsf, iF), - Cmu_(owfpsf.Cmu_), - kappa_(owfpsf.kappa_), - E_(owfpsf.E_), - beta1_(owfpsf.beta1_), - yPlusLam_(owfpsf.yPlusLam_), - G_(), - omega_(), - initialised_(false), - master_(-1), - cornerWeights_() -{ - checkType(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -scalarField& omegaWallFunctionFvPatchScalarField::G(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - G_ = 0.0; - } - - return G_; - } - - return omegaPatch(master_).G(); -} - - -scalarField& omegaWallFunctionFvPatchScalarField::omega(bool init) -{ - if (patch().index() == master_) - { - if (init) - { - omega_ = 0.0; - } - - return omega_; - } - - return omegaPatch(master_).omega(init); -} - - -void omegaWallFunctionFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), omega(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& omega0 = this->omega(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& omega = const_cast<FieldType&>(dimensionedInternalField()); - - forAll(*this, faceI) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = G0[cellI]; - omega[cellI] = omega0[cellI]; - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void omegaWallFunctionFvPatchScalarField::updateCoeffs -( - const scalarField& weights -) -{ - if (updated()) - { - return; - } - - const turbulenceModel& turbulence = - db().lookupObject<turbulenceModel>(turbulenceModel::typeName); - - setMaster(); - - if (patch().index() == master_) - { - createAveragingWeights(); - calculateTurbulenceFields(turbulence, G(true), omega(true)); - } - - const scalarField& G0 = this->G(); - const scalarField& omega0 = this->omega(); - - typedef DimensionedField<scalar, volMesh> FieldType; - - FieldType& G = - const_cast<FieldType&> - ( - db().lookupObject<FieldType>(turbulence.GName()) - ); - - FieldType& omega = const_cast<FieldType&>(dimensionedInternalField()); - - scalarField& omegaf = *this; - - // only set the values if the weights are > tolerance - forAll(weights, faceI) - { - scalar w = weights[faceI]; - - if (w > tolerance_) - { - label cellI = patch().faceCells()[faceI]; - - G[cellI] = (1.0 - w)*G[cellI] + w*G0[cellI]; - omega[cellI] = (1.0 - w)*omega[cellI] + w*omega0[cellI]; - omegaf[faceI] = omega[cellI]; - } - } - - fvPatchField<scalar>::updateCoeffs(); -} - - -void omegaWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix -) -{ - if (manipulatedMatrix()) - { - return; - } - - matrix.setValues(patch().faceCells(), patchInternalField()); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void omegaWallFunctionFvPatchScalarField::manipulateMatrix -( - fvMatrix<scalar>& matrix, - const Field<scalar>& weights -) -{ - if (manipulatedMatrix()) - { - return; - } - - // filter weights so that we only apply the constraint where the - // weight > SMALL - DynamicList<label> constraintCells(weights.size()); - DynamicList<scalar> constraintomega(weights.size()); - const labelUList& faceCells = patch().faceCells(); - - const DimensionedField<scalar, volMesh>& omega = - dimensionedInternalField(); - - label nConstrainedCells = 0; - - - forAll(weights, faceI) - { - // only set the values if the weights are > tolerance - if (weights[faceI] > tolerance_) - { - nConstrainedCells++; - - label cellI = faceCells[faceI]; - - constraintCells.append(cellI); - constraintomega.append(omega[cellI]); - } - } - - if (debug) - { - Pout<< "Patch: " << patch().name() - << ": number of constrained cells = " << nConstrainedCells - << " out of " << patch().size() - << endl; - } - - matrix.setValues - ( - constraintCells, - scalarField(constraintomega.xfer()) - ); - - fvPatchField<scalar>::manipulateMatrix(matrix); -} - - -void omegaWallFunctionFvPatchScalarField::write(Ostream& os) const -{ - fixedValueFvPatchField<scalar>::write(os); - writeLocalEntries(os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - omegaWallFunctionFvPatchScalarField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H deleted file mode 100644 index 74eef728cf6..00000000000 --- a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.H +++ /dev/null @@ -1,298 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::incompressible::omegaWallFunctionFvPatchScalarField - -Group - grpIcoWallFunctions - -Description - This boundary condition provides a wall function constraint on turbulnce - specific dissipation, omega. The values are computed using: - - \f[ - \omega = sqrt(\omega_{vis}^2 + \omega_{log}^2) - \f] - - where - - \vartable - \omega_{vis} | omega in viscous region - \omega_{log} | omega in logarithmic region - \endvartable - - Model described by Eqs.(14, 15) of: - \verbatim - Menter, F., Esch, T. - "Elements of Industrial Heat Transfer Prediction" - 16th Brazilian Congress of Mechanical Engineering (COBEM), - Nov. 2001 - \endverbatim - - \heading Patch usage - - \table - Property | Description | Required | Default value - Cmu | model coefficient | no | 0.09 - kappa | Von Karman constant | no | 0.41 - E | model coefficient | no | 9.8 - beta1 | model coefficient | no | 0.075 - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type omegaWallFunction; - } - \endverbatim - -SourceFiles - omegaWallFunctionFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef omegaWallFunctionFvPatchScalarField_H -#define omegaWallFunctionFvPatchScalarField_H - -#include "fixedValueFvPatchField.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -class turbulenceModel; - -/*---------------------------------------------------------------------------*\ - Class omegaWallFunctionFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class omegaWallFunctionFvPatchScalarField -: - public fixedValueFvPatchField<scalar> -{ -protected: - - // Protected data - - //- Tolerance used in weighted calculations - static scalar tolerance_; - - //- Cmu coefficient - scalar Cmu_; - - //- Von Karman constant - scalar kappa_; - - //- E coefficient - scalar E_; - - //- beta1 coefficient - scalar beta1_; - - //- Y+ at the edge of the laminar sublayer - scalar yPlusLam_; - - //- Local copy of turbulence G field - scalarField G_; - - //- Local copy of turbulence omega field - scalarField omega_; - - //- Initialised flag - bool initialised_; - - //- Master patch ID - label master_; - - //- List of averaging corner weights - List<List<scalar> > cornerWeights_; - - - // Protected Member Functions - - //- Check the type of the patch - virtual void checkType(); - - //- Write local wall function variables - virtual void writeLocalEntries(Ostream&) const; - - //- Set the master patch - master is responsible for updating all - // wall function patches - virtual void setMaster(); - - //- Create the averaging weights for cells which are bounded by - // multiple wall function faces - virtual void createAveragingWeights(); - - //- Helper function to return non-const access to an omega patch - virtual omegaWallFunctionFvPatchScalarField& omegaPatch - ( - const label patchI - ); - - //- Main driver to calculate the turbulence fields - virtual void calculateTurbulenceFields - ( - const turbulenceModel& turbulence, - scalarField& G0, - scalarField& omega0 - ); - - //- Calculate the omega and G - virtual void calculate - ( - const turbulenceModel& turbulence, - const List<scalar>& cornerWeights, - const fvPatch& patch, - scalarField& G, - scalarField& omega - ); - - //- Return non-const access to the master patch ID - virtual label& master() - { - return master_; - } - - -public: - - //- Runtime type information - TypeName("omegaWallFunction"); - - - // Constructors - - //- Construct from patch and internal field - omegaWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - omegaWallFunctionFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // omegaWallFunctionFvPatchScalarField - // onto a new patch - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new omegaWallFunctionFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - omegaWallFunctionFvPatchScalarField - ( - const omegaWallFunctionFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new omegaWallFunctionFvPatchScalarField(*this, iF) - ); - } - - - // Member functions - - // Access - - //- Return non-const access to the master's G field - scalarField& G(bool init = false); - - //- Return non-const access to the master's omega field - scalarField& omega(bool init = false); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(const scalarField& weights); - - //- Manipulate matrix - virtual void manipulateMatrix(fvMatrix<scalar>& matrix); - - //- Manipulate matrix with given weights - virtual void manipulateMatrix - ( - fvMatrix<scalar>& matrix, - const scalarField& weights - ); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.C b/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.C deleted file mode 100644 index a152daae9a2..00000000000 --- a/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.C +++ /dev/null @@ -1,290 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "kEpsilon.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(kEpsilon, 0); -addToRunTimeSelectionTable(RASModel, kEpsilon, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kEpsilon::kEpsilon -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - C1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C1", - coeffDict_, - 1.44 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.92 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.3 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> kEpsilon::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kEpsilon::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kEpsilon::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> kEpsilon::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool kEpsilon::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - C1_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void kEpsilon::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - volScalarField G(GName(), nut_*2*magSqr(symm(fvc::grad(U_)))); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1_*G*epsilon_/k_ - - fvm::Sp(C2_*epsilon_/k_, epsilon_) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - - fvm::Sp(epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - nut_ = Cmu_*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.H b/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.H deleted file mode 100644 index b11e84097cc..00000000000 --- a/src/turbulenceModels/incompressible/RAS/kEpsilon/kEpsilon.H +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::kEpsilon - -Group - grpIcoRASTurbulence - -Description - Standard k-epsilon turbulence model for incompressible flows. - - Reference: - \verbatim - Launder, B.E., and Spalding, D.B., - "Mathematical Models of Turbulence", - Academic Press, 1972. - - Launder, B.E., and Spalding, D.B., - "Computational Methods for Turbulent Flows", - Comp. Meth in Appl Mech & Eng'g, Vol 3, 1974, pp 269-289. - \endverbatim - - The default model coefficients correspond to the following: - \verbatim - kEpsilonCoeffs - { - Cmu 0.09; - C1 1.44; - C2 1.92; - sigmaEps 1.3; - } - \endverbatim - -SourceFiles - kEpsilon.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kEpsilon_H -#define kEpsilon_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class kEpsilon Declaration -\*---------------------------------------------------------------------------*/ - -class kEpsilon -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar C1_; - dimensionedScalar C2_; - dimensionedScalar sigmaEps_; - - - // Fields - - volScalarField k_; - volScalarField epsilon_; - volScalarField nut_; - - -public: - - //- Runtime type information - TypeName("kEpsilon"); - - // Constructors - - //- Construct from components - kEpsilon - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~kEpsilon() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nut_ + nu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", nut_/sigmaEps_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C deleted file mode 100644 index 9eada0bf271..00000000000 --- a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.C +++ /dev/null @@ -1,472 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "kOmegaSST.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(kOmegaSST, 0); -addToRunTimeSelectionTable(RASModel, kOmegaSST, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> kOmegaSST::F1(const volScalarField& CDkOmega) const -{ - tmp<volScalarField> CDkOmegaPlus = max - ( - CDkOmega, - dimensionedScalar("1.0e-10", dimless/sqr(dimTime), 1.0e-10) - ); - - tmp<volScalarField> arg1 = min - ( - min - ( - max - ( - (scalar(1)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*nu()/(sqr(y_)*omega_) - ), - (4*alphaOmega2_)*k_/(CDkOmegaPlus*sqr(y_)) - ), - scalar(10) - ); - - return tanh(pow4(arg1)); -} - - -tmp<volScalarField> kOmegaSST::F2() const -{ - tmp<volScalarField> arg2 = min - ( - max - ( - (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_), - scalar(500)*nu()/(sqr(y_)*omega_) - ), - scalar(100) - ); - - return tanh(sqr(arg2)); -} - - -tmp<volScalarField> kOmegaSST::F3() const -{ - tmp<volScalarField> arg3 = min - ( - 150*nu()/(omega_*sqr(y_)), - scalar(10) - ); - - return 1 - tanh(pow4(arg3)); -} - - -tmp<volScalarField> kOmegaSST::F23() const -{ - tmp<volScalarField> f23(F2()); - - if (F3_) - { - f23() *= F3(); - } - - return f23; -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -kOmegaSST::kOmegaSST -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - alphaK1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK1", - coeffDict_, - 0.85 - ) - ), - alphaK2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaK2", - coeffDict_, - 1.0 - ) - ), - alphaOmega1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega1", - coeffDict_, - 0.5 - ) - ), - alphaOmega2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "alphaOmega2", - coeffDict_, - 0.856 - ) - ), - gamma1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma1", - coeffDict_, - 5.0/9.0 - ) - ), - gamma2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "gamma2", - coeffDict_, - 0.44 - ) - ), - beta1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta1", - coeffDict_, - 0.075 - ) - ), - beta2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "beta2", - coeffDict_, - 0.0828 - ) - ), - betaStar_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "betaStar", - coeffDict_, - 0.09 - ) - ), - a1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "a1", - coeffDict_, - 0.31 - ) - ), - b1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "b1", - coeffDict_, - 1.0 - ) - ), - c1_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "c1", - coeffDict_, - 10.0 - ) - ), - F3_ - ( - Switch::lookupOrAddToDict - ( - "F3", - coeffDict_, - false - ) - ), - - y_(wallDist::New(mesh_).y()), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - omega_ - ( - IOobject - ( - "omega", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateOmega("omega", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ) -{ - bound(k_, kMin_); - bound(omega_, omegaMin_); - - nut_ = - ( - a1_*k_ - / max - ( - a1_*omega_, - b1_*F23()*sqrt(2.0)*mag(symm(fvc::grad(U_))) - ) - ); - nut_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> kOmegaSST::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> kOmegaSST::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> kOmegaSST::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> kOmegaSST::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool kOmegaSST::read() -{ - if (RASModel::read()) - { - alphaK1_.readIfPresent(coeffDict()); - alphaK2_.readIfPresent(coeffDict()); - alphaOmega1_.readIfPresent(coeffDict()); - alphaOmega2_.readIfPresent(coeffDict()); - gamma1_.readIfPresent(coeffDict()); - gamma2_.readIfPresent(coeffDict()); - beta1_.readIfPresent(coeffDict()); - beta2_.readIfPresent(coeffDict()); - betaStar_.readIfPresent(coeffDict()); - a1_.readIfPresent(coeffDict()); - b1_.readIfPresent(coeffDict()); - c1_.readIfPresent(coeffDict()); - F3_.readIfPresent("F3", coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void kOmegaSST::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - const volScalarField S2(2*magSqr(symm(fvc::grad(U_)))); - volScalarField G(GName(), nut_*S2); - - // Update omega and G at the wall - omega_.boundaryField().updateCoeffs(); - - const volScalarField CDkOmega - ( - (2*alphaOmega2_)*(fvc::grad(k_) & fvc::grad(omega_))/omega_ - ); - - const volScalarField F1(this->F1(CDkOmega)); - - // Turbulent frequency equation - tmp<fvScalarMatrix> omegaEqn - ( - fvm::ddt(omega_) - + fvm::div(phi_, omega_) - - fvm::laplacian(DomegaEff(F1), omega_) - == - gamma(F1) - *min(S2, (c1_/a1_)*betaStar_*omega_*max(a1_*omega_, b1_*F23()*sqrt(S2))) - - fvm::Sp(beta(F1)*omega_, omega_) - - fvm::SuSp - ( - (F1 - scalar(1))*CDkOmega/omega_, - omega_ - ) - ); - - omegaEqn().relax(); - - omegaEqn().boundaryManipulate(omega_.boundaryField()); - - solve(omegaEqn); - bound(omega_, omegaMin_); - - // Turbulent kinetic energy equation - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(F1), k_) - == - min(G, c1_*betaStar_*k_*omega_) - - fvm::Sp(betaStar_*omega_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - nut_ = a1_*k_/max(a1_*omega_, b1_*F23()*sqrt(S2)); - nut_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.H b/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.H deleted file mode 100644 index c64f5e36b32..00000000000 --- a/src/turbulenceModels/incompressible/RAS/kOmegaSST/kOmegaSST.H +++ /dev/null @@ -1,311 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::kOmegaSST - -Description - Implementation of the k-omega-SST turbulence model for incompressible - flows. - - Turbulence model described in - \verbatim - Menter, F., Esch, T., - "Elements of Industrial Heat Transfer Prediction", - 16th Brazilian Congress of Mechanical Engineering (COBEM), - Nov. 2001. - \endverbatim - - with updated coefficients from - \verbatim - Menter, F. R., Kuntz, M., and Langtry, R., - "Ten Years of Industrial Experience with the SST Turbulence Model", - Turbulence, Heat and Mass Transfer 4, 2003, - pp. 625 - 632. - \endverbatim - - but with the consistent production terms from the 2001 paper as form in the - 2003 paper is a typo, see - \verbatim - http://turbmodels.larc.nasa.gov/sst.html - \endverbatim - - and the addition of the optional F3 term for rough walls from - \verbatim - Hellsten, A. - "Some Improvements in Menter’s k-omega-SST turbulence model" - 29th AIAA Fluid Dynamics Conference, - AIAA-98-2554, - June 1998. - \endverbatim - - Note that this implementation is written in terms of alpha diffusion - coefficients rather than the more traditional sigma (alpha = 1/sigma) so - that the blending can be applied to all coefficuients in a consistent - manner. The paper suggests that sigma is blended but this would not be - consistent with the blending of the k-epsilon and k-omega models. - - Also note that the error in the last term of equation (2) relating to - sigma has been corrected. - - The default model coefficients correspond to the following: - \verbatim - kOmegaSSTCoeffs - { - alphaK1 0.85; - alphaK2 1.0; - alphaOmega1 0.5; - alphaOmega2 0.856; - beta1 0.075; - beta2 0.0828; - betaStar 0.09; - gamma1 5/9; - gamma2 0.44; - a1 0.31; - b1 1.0; - c1 10.0; - F3 no; - } - \endverbatim - -SourceFiles - kOmegaSST.C - -\*---------------------------------------------------------------------------*/ - -#ifndef kOmegaSST_H -#define kOmegaSST_H - -#include "RASModel.H" -#include "wallDist.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class kOmegaSST Declaration -\*---------------------------------------------------------------------------*/ - -class kOmegaSST -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - dimensionedScalar alphaK1_; - dimensionedScalar alphaK2_; - - dimensionedScalar alphaOmega1_; - dimensionedScalar alphaOmega2_; - - dimensionedScalar gamma1_; - dimensionedScalar gamma2_; - - dimensionedScalar beta1_; - dimensionedScalar beta2_; - - dimensionedScalar betaStar_; - - dimensionedScalar a1_; - dimensionedScalar b1_; - dimensionedScalar c1_; - - Switch F3_; - - - // Fields - - //- Wall distance - // Note: different to wall distance in parent RASModel - // which is for near-wall cells only - const volScalarField& y_; - - volScalarField k_; - volScalarField omega_; - volScalarField nut_; - - - // Protected Member Functions - - tmp<volScalarField> F1(const volScalarField& CDkOmega) const; - tmp<volScalarField> F2() const; - tmp<volScalarField> F3() const; - tmp<volScalarField> F23() const; - - tmp<volScalarField> blend - ( - const volScalarField& F1, - const dimensionedScalar& psi1, - const dimensionedScalar& psi2 - ) const - { - return F1*(psi1 - psi2) + psi2; - } - - tmp<volScalarField> alphaK(const volScalarField& F1) const - { - return blend(F1, alphaK1_, alphaK2_); - } - - tmp<volScalarField> alphaOmega(const volScalarField& F1) const - { - return blend(F1, alphaOmega1_, alphaOmega2_); - } - - tmp<volScalarField> beta(const volScalarField& F1) const - { - return blend(F1, beta1_, beta2_); - } - - tmp<volScalarField> gamma(const volScalarField& F1) const - { - return blend(F1, gamma1_, gamma2_); - } - - -public: - - //- Runtime type information - TypeName("kOmegaSST"); - - - // Constructors - - //- Construct from components - kOmegaSST - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~kOmegaSST() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", alphaK(F1)*nut_ + nu()) - ); - } - - //- Return the effective diffusivity for omega - tmp<volScalarField> DomegaEff(const volScalarField& F1) const - { - return tmp<volScalarField> - ( - new volScalarField("DomegaEff", alphaOmega(F1)*nut_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence specific dissipation rate - virtual tmp<volScalarField> omega() const - { - return omega_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - mesh_.time().timeName(), - mesh_ - ), - betaStar_*k_*omega_, - omega_.boundaryField().types() - ) - ); - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/laminar/laminar.C b/src/turbulenceModels/incompressible/RAS/laminar/laminar.C deleted file mode 100644 index 6967db5edb4..00000000000 --- a/src/turbulenceModels/incompressible/RAS/laminar/laminar.C +++ /dev/null @@ -1,214 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "laminar.H" -#include "addToRunTimeSelectionTable.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(laminar, 0); -addToRunTimeSelectionTable(RASModel, laminar, dictionary); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -laminar::laminar -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volScalarField> laminar::nut() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("nut", nu()().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::k() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("k", sqr(U_.dimensions()), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::epsilon() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar - ( - "epsilon", sqr(U_.dimensions())/dimTime, 0.0 - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedSymmTensor - ( - "R", sqr(U_.dimensions()), symmTensor::zero - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool laminar::read() -{ - return RASModel::read(); -} - - -void laminar::correct() -{ - turbulenceModel::correct(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.C b/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.C deleted file mode 100644 index 75c4624c2fa..00000000000 --- a/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.C +++ /dev/null @@ -1,356 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "realizableKE.H" -#include "addToRunTimeSelectionTable.H" - -#include "backwardsCompatibilityWallFunctions.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(realizableKE, 0); -addToRunTimeSelectionTable(RASModel, realizableKE, dictionary); - -// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // - -tmp<volScalarField> realizableKE::rCmu -( - const volTensorField& gradU, - const volScalarField& S2, - const volScalarField& magS -) -{ - tmp<volSymmTensorField> tS = dev(symm(gradU)); - const volSymmTensorField& S = tS(); - - tmp<volScalarField> W - ( - (2*sqrt(2.0))*((S&S)&&S) - /( - magS*S2 - + dimensionedScalar("small", dimensionSet(0, 0, -3, 0, 0), SMALL) - ) - ); - - tS.clear(); - - tmp<volScalarField> phis - ( - (1.0/3.0)*acos(min(max(sqrt(6.0)*W, -scalar(1)), scalar(1))) - ); - tmp<volScalarField> As = sqrt(6.0)*cos(phis); - tmp<volScalarField> Us = sqrt(S2/2.0 + magSqr(skew(gradU))); - - return 1.0/(A0_ + As*Us*k_/epsilon_); -} - - -tmp<volScalarField> realizableKE::rCmu -( - const volTensorField& gradU -) -{ - const volScalarField S2(2*magSqr(dev(symm(gradU)))); - tmp<volScalarField> magS = sqrt(S2); - return rCmu(gradU, S2, magS); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -realizableKE::realizableKE -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName, - const word& modelName -) -: - RASModel(modelName, U, phi, transport, turbulenceModelName), - - Cmu_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "Cmu", - coeffDict_, - 0.09 - ) - ), - A0_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "A0", - coeffDict_, - 4.0 - ) - ), - C2_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "C2", - coeffDict_, - 1.9 - ) - ), - sigmak_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmak", - coeffDict_, - 1.0 - ) - ), - sigmaEps_ - ( - dimensioned<scalar>::lookupOrAddToDict - ( - "sigmaEps", - coeffDict_, - 1.2 - ) - ), - - k_ - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateK("k", mesh_) - ), - epsilon_ - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateEpsilon("epsilon", mesh_) - ), - nut_ - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - autoCreateNut("nut", mesh_) - ) -{ - bound(k_, kMin_); - bound(epsilon_, epsilonMin_); - - nut_ = rCmu(fvc::grad(U_))*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); - - printCoeffs(); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -tmp<volSymmTensorField> realizableKE::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - ((2.0/3.0)*I)*k_ - nut_*twoSymm(fvc::grad(U_)), - k_.boundaryField().types() - ) - ); -} - - -tmp<volSymmTensorField> realizableKE::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nuEff()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> realizableKE::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> realizableKE::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -bool realizableKE::read() -{ - if (RASModel::read()) - { - Cmu_.readIfPresent(coeffDict()); - A0_.readIfPresent(coeffDict()); - C2_.readIfPresent(coeffDict()); - sigmak_.readIfPresent(coeffDict()); - sigmaEps_.readIfPresent(coeffDict()); - - return true; - } - else - { - return false; - } -} - - -void realizableKE::correct() -{ - RASModel::correct(); - - if (!turbulence_) - { - return; - } - - const volTensorField gradU(fvc::grad(U_)); - const volScalarField S2(2*magSqr(dev(symm(gradU)))); - const volScalarField magS(sqrt(S2)); - - const volScalarField eta(magS*k_/epsilon_); - tmp<volScalarField> C1 = max(eta/(scalar(5) + eta), scalar(0.43)); - - volScalarField G(GName(), nut_*S2); - - // Update epsilon and G at the wall - epsilon_.boundaryField().updateCoeffs(); - - - // Dissipation equation - tmp<fvScalarMatrix> epsEqn - ( - fvm::ddt(epsilon_) - + fvm::div(phi_, epsilon_) - - fvm::laplacian(DepsilonEff(), epsilon_) - == - C1*magS*epsilon_ - - fvm::Sp - ( - C2_*epsilon_/(k_ + sqrt(nu()*epsilon_)), - epsilon_ - ) - ); - - epsEqn().relax(); - - epsEqn().boundaryManipulate(epsilon_.boundaryField()); - - solve(epsEqn); - bound(epsilon_, epsilonMin_); - - - // Turbulent kinetic energy equation - tmp<fvScalarMatrix> kEqn - ( - fvm::ddt(k_) - + fvm::div(phi_, k_) - - fvm::laplacian(DkEff(), k_) - == - G - fvm::Sp(epsilon_/k_, k_) - ); - - kEqn().relax(); - solve(kEqn); - bound(k_, kMin_); - - - // Re-calculate viscosity - nut_ = rCmu(gradU, S2, magS)*sqr(k_)/epsilon_; - nut_.correctBoundaryConditions(); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.H b/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.H deleted file mode 100644 index 699479253f9..00000000000 --- a/src/turbulenceModels/incompressible/RAS/realizableKE/realizableKE.H +++ /dev/null @@ -1,211 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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::incompressible::RASModels::realizableKE - -Group - grpIcoRASTurbulence - -Description - Realizable k-epsilon turbulence model for incompressible flows. - - Model described in the paper: - \verbatim - "A New k-epsilon Eddy Viscosity Model for High Reynolds Number - Turbulent Flows" - - Tsan-Hsing Shih, William W. Liou, Aamir Shabbir, Zhigang Tang and - Jiang Zhu - - Computers and Fluids Vol. 24, No. 3, pp. 227-238, 1995 - \endverbatim - - The default model coefficients correspond to the following: - \verbatim - realizableKECoeffs - { - Cmu 0.09; - A0 4.0; - C2 1.9; - sigmak 1.0; - sigmaEps 1.2; - } - \endverbatim - -SourceFiles - realizableKE.C - -\*---------------------------------------------------------------------------*/ - -#ifndef realizableKE_H -#define realizableKE_H - -#include "RASModel.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ -namespace RASModels -{ - -/*---------------------------------------------------------------------------*\ - Class realizableKE Declaration -\*---------------------------------------------------------------------------*/ - -class realizableKE -: - public RASModel -{ - -protected: - - // Protected data - - // Model coefficients - - dimensionedScalar Cmu_; - dimensionedScalar A0_; - dimensionedScalar C2_; - dimensionedScalar sigmak_; - dimensionedScalar sigmaEps_; - - - // Fields - - volScalarField k_; - volScalarField epsilon_; - volScalarField nut_; - - - // Protected Member Functions - - tmp<volScalarField> rCmu - ( - const volTensorField& gradU, - const volScalarField& S2, - const volScalarField& magS - ); - - tmp<volScalarField> rCmu(const volTensorField& gradU); - - -public: - - //- Runtime type information - TypeName("realizableKE"); - - // Constructors - - //- Construct from components - realizableKE - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = turbulenceModel::typeName, - const word& modelName = typeName - ); - - - //- Destructor - virtual ~realizableKE() - {} - - - // Member Functions - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const - { - return nut_; - } - - //- Return the effective diffusivity for k - tmp<volScalarField> DkEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DkEff", nut_/sigmak_ + nu()) - ); - } - - //- Return the effective diffusivity for epsilon - tmp<volScalarField> DepsilonEff() const - { - return tmp<volScalarField> - ( - new volScalarField("DepsilonEff", nut_/sigmaEps_ + nu()) - ); - } - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const - { - return k_; - } - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const - { - return epsilon_; - } - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct(); - - //- Read RASProperties dictionary - virtual bool read(); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace RASModels -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/Make/files b/src/turbulenceModels/incompressible/turbulenceModel/Make/files deleted file mode 100644 index f770af1ec8b..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/Make/files +++ /dev/null @@ -1,7 +0,0 @@ -turbulenceModel.C -laminar/laminar.C -derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C -derivedFvPatchFields/atmBoundaryLayer/atmBoundaryLayer.C -derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C - -LIB = $(FOAM_LIBBIN)/libincompressibleTurbulenceModel diff --git a/src/turbulenceModels/incompressible/turbulenceModel/Make/options b/src/turbulenceModels/incompressible/turbulenceModel/Make/options deleted file mode 100644 index 2af4fa4baf8..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/Make/options +++ /dev/null @@ -1,8 +0,0 @@ -EXE_INC = \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/turbulenceModels \ - -I$(LIB_SRC)/transportModels - -LIB_LIBS = \ - -lfiniteVolume - diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C b/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C deleted file mode 100644 index 9c8e5e423b3..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.C +++ /dev/null @@ -1,142 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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 "atmBoundaryLayerInletVelocityFvPatchVectorField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "surfaceFields.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -atmBoundaryLayerInletVelocityFvPatchVectorField:: -atmBoundaryLayerInletVelocityFvPatchVectorField -( - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF -) -: - fixedValueFvPatchVectorField(p, iF), - atmBoundaryLayer() -{} - - -atmBoundaryLayerInletVelocityFvPatchVectorField:: -atmBoundaryLayerInletVelocityFvPatchVectorField -( - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF, - const dictionary& dict -) -: - fixedValueFvPatchVectorField(p, iF), - atmBoundaryLayer(patch().Cf(), dict) -{ - vectorField::operator=(U(patch().Cf())); -} - - -atmBoundaryLayerInletVelocityFvPatchVectorField:: -atmBoundaryLayerInletVelocityFvPatchVectorField -( - const atmBoundaryLayerInletVelocityFvPatchVectorField& pvf, - const fvPatch& p, - const DimensionedField<vector, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedValueFvPatchVectorField(pvf, p, iF, mapper), - atmBoundaryLayer(pvf, mapper) -{} - - -atmBoundaryLayerInletVelocityFvPatchVectorField:: -atmBoundaryLayerInletVelocityFvPatchVectorField -( - const atmBoundaryLayerInletVelocityFvPatchVectorField& pvf, - const DimensionedField<vector, volMesh>& iF -) -: - fixedValueFvPatchVectorField(pvf, iF), - atmBoundaryLayer(pvf) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void atmBoundaryLayerInletVelocityFvPatchVectorField::autoMap -( - const fvPatchFieldMapper& m -) -{ - fixedValueFvPatchVectorField::autoMap(m); - atmBoundaryLayer::autoMap(m); -} - - -void atmBoundaryLayerInletVelocityFvPatchVectorField::rmap -( - const fvPatchVectorField& pvf, - const labelList& addr -) -{ - fixedValueFvPatchVectorField::rmap(pvf, addr); - - const atmBoundaryLayerInletVelocityFvPatchVectorField& blpvf = - refCast<const atmBoundaryLayerInletVelocityFvPatchVectorField>(pvf); - - atmBoundaryLayer::rmap(blpvf, addr); -} - - -void atmBoundaryLayerInletVelocityFvPatchVectorField::write(Ostream& os) const -{ - fvPatchVectorField::write(os); - atmBoundaryLayer::write(os); - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchVectorField, - atmBoundaryLayerInletVelocityFvPatchVectorField -); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H b/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H deleted file mode 100644 index 87022836869..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/atmBoundaryLayerInletVelocity/atmBoundaryLayerInletVelocityFvPatchVectorField.H +++ /dev/null @@ -1,178 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2014 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::incompressible::atmBoundaryLayerInletVelocityFvPatchVectorField - -Group - grpIcoRASBoundaryConditions grpInletBoundaryConditions - -Description - This boundary condition specifies a velocity inlet profile appropriate - for atmospheric boundary layers (ABL). - - See Foam::incompressible::atmBoundaryLayer for details. - - Example of the boundary condition specification: - \verbatim - ground - { - type atmBoundaryLayerInletVelocity; - n (1 0 0); - z (0 0 1); - Uref 10.0; - Zref 20.0; - z0 uniform 0.1; - zGround uniform 0.0; - } - \endverbatim - -SeeAlso - Foam::incompressible::atmBoundaryLayer, - Foam::incompressible::atmBoundaryLayerInletKFvPatchScalarField, - Foam::incompressible::atmBoundaryLayerInletEpsilonFvPatchScalarField - -SourceFiles - atmBoundaryLayerInletVelocityFvPatchVectorField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef atmBoundaryLayerInletVelocityFvPatchVectorField_H -#define atmBoundaryLayerInletVelocityFvPatchVectorField_H - -#include "fvPatchFields.H" -#include "fixedValueFvPatchFields.H" -#include "atmBoundaryLayer.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class atmBoundaryLayerInletVelocityFvPatchVectorField Declaration -\*---------------------------------------------------------------------------*/ - -class atmBoundaryLayerInletVelocityFvPatchVectorField -: - public fixedValueFvPatchVectorField, - public atmBoundaryLayer -{ - -public: - - //- Runtime type information - TypeName("atmBoundaryLayerInletVelocity"); - - - // Constructors - - //- Construct from patch and internal field - atmBoundaryLayerInletVelocityFvPatchVectorField - ( - const fvPatch&, - const DimensionedField<vector, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - atmBoundaryLayerInletVelocityFvPatchVectorField - ( - const fvPatch&, - const DimensionedField<vector, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // atmBoundaryLayerInletVelocityFvPatchVectorField onto a new patch - atmBoundaryLayerInletVelocityFvPatchVectorField - ( - const atmBoundaryLayerInletVelocityFvPatchVectorField&, - const fvPatch&, - const DimensionedField<vector, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct and return a clone - virtual tmp<fvPatchVectorField> clone() const - { - return tmp<fvPatchVectorField> - ( - new atmBoundaryLayerInletVelocityFvPatchVectorField(*this) - ); - } - - //- Construct as copy setting internal field reference - atmBoundaryLayerInletVelocityFvPatchVectorField - ( - const atmBoundaryLayerInletVelocityFvPatchVectorField&, - const DimensionedField<vector, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchVectorField> clone - ( - const DimensionedField<vector, volMesh>& iF - ) const - { - return tmp<fvPatchVectorField> - ( - new atmBoundaryLayerInletVelocityFvPatchVectorField(*this, iF) - ); - } - - - // Member functions - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap - ( - const fvPatchFieldMapper& - ); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchVectorField&, - const labelList& - ); - - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C b/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C deleted file mode 100644 index 077e77fdaa4..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.C +++ /dev/null @@ -1,256 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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 "turbulentHeatFluxTemperatureFvPatchScalarField.H" -#include "addToRunTimeSelectionTable.H" -#include "fvPatchFieldMapper.H" -#include "volFields.H" -#include "incompressible/turbulenceModel/turbulenceModel.H" - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -namespace Foam -{ - // declare specialization within 'Foam' namespace - template<> - const char* NamedEnum - < - Foam::incompressible:: - turbulentHeatFluxTemperatureFvPatchScalarField::heatSourceType, - 2 - >::names[] = - { - "power", - "flux" - }; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - - -namespace Foam -{ - -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -const NamedEnum -< - turbulentHeatFluxTemperatureFvPatchScalarField::heatSourceType, - 2 -> turbulentHeatFluxTemperatureFvPatchScalarField::heatSourceTypeNames_; - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulentHeatFluxTemperatureFvPatchScalarField:: -turbulentHeatFluxTemperatureFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(p, iF), - heatSource_(hsPower), - q_(p.size(), 0.0), - alphaEffName_("undefinedAlphaEff") -{} - - -turbulentHeatFluxTemperatureFvPatchScalarField:: -turbulentHeatFluxTemperatureFvPatchScalarField -( - const turbulentHeatFluxTemperatureFvPatchScalarField& ptf, - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const fvPatchFieldMapper& mapper -) -: - fixedGradientFvPatchScalarField(ptf, p, iF, mapper), - heatSource_(ptf.heatSource_), - q_(ptf.q_, mapper), - alphaEffName_(ptf.alphaEffName_) -{} - - -turbulentHeatFluxTemperatureFvPatchScalarField:: -turbulentHeatFluxTemperatureFvPatchScalarField -( - const fvPatch& p, - const DimensionedField<scalar, volMesh>& iF, - const dictionary& dict -) -: - fixedGradientFvPatchScalarField(p, iF), - heatSource_(heatSourceTypeNames_.read(dict.lookup("heatSource"))), - q_("q", dict, p.size()), - alphaEffName_(dict.lookup("alphaEff")) -{ - if (dict.found("value") && dict.found("gradient")) - { - fvPatchField<scalar>::operator=(Field<scalar>("value", dict, p.size())); - gradient() = Field<scalar>("gradient", dict, p.size()); - } - else - { - fvPatchField<scalar>::operator=(patchInternalField()); - gradient() = 0.0; - } -} - - -turbulentHeatFluxTemperatureFvPatchScalarField:: -turbulentHeatFluxTemperatureFvPatchScalarField -( - const turbulentHeatFluxTemperatureFvPatchScalarField& thftpsf -) -: - fixedGradientFvPatchScalarField(thftpsf), - heatSource_(thftpsf.heatSource_), - q_(thftpsf.q_), - alphaEffName_(thftpsf.alphaEffName_) -{} - - -turbulentHeatFluxTemperatureFvPatchScalarField:: -turbulentHeatFluxTemperatureFvPatchScalarField -( - const turbulentHeatFluxTemperatureFvPatchScalarField& thftpsf, - const DimensionedField<scalar, volMesh>& iF -) -: - fixedGradientFvPatchScalarField(thftpsf, iF), - heatSource_(thftpsf.heatSource_), - q_(thftpsf.q_), - alphaEffName_(thftpsf.alphaEffName_) -{} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulentHeatFluxTemperatureFvPatchScalarField::autoMap -( - const fvPatchFieldMapper& m -) -{ - scalarField::autoMap(m); - q_.autoMap(m); -} - - -void turbulentHeatFluxTemperatureFvPatchScalarField::rmap -( - const fvPatchScalarField& ptf, - const labelList& addr -) -{ - fixedGradientFvPatchScalarField::rmap(ptf, addr); - - const turbulentHeatFluxTemperatureFvPatchScalarField& thftptf = - refCast<const turbulentHeatFluxTemperatureFvPatchScalarField> - ( - ptf - ); - - q_.rmap(thftptf.q_, addr); -} - - -void turbulentHeatFluxTemperatureFvPatchScalarField::updateCoeffs() -{ - if (updated()) - { - return; - } - - const scalarField& alphaEffp = - patch().lookupPatchField<volScalarField, scalar>(alphaEffName_); - - // retrieve (constant) specific heat capacity from transport dictionary - const IOdictionary& transportProperties = - db().lookupObject<IOdictionary>("transportProperties"); - const scalar Cp0(readScalar(transportProperties.lookup("Cp0"))); - - switch (heatSource_) - { - case hsPower: - { - const scalar Ap = gSum(patch().magSf()); - gradient() = q_/(Ap*Cp0*alphaEffp); - break; - } - case hsFlux: - { - gradient() = q_/(Cp0*alphaEffp); - break; - } - default: - { - FatalErrorIn - ( - "turbulentHeatFluxTemperatureFvPatchScalarField" - "(" - "const fvPatch&, " - "const DimensionedField<scalar, volMesh>&, " - "const dictionary&" - ")" - ) << "Unknown heat source type. Valid types are: " - << heatSourceTypeNames_ << nl << exit(FatalError); - } - } - - fixedGradientFvPatchScalarField::updateCoeffs(); -} - - -void turbulentHeatFluxTemperatureFvPatchScalarField::write(Ostream& os) const -{ - fixedGradientFvPatchScalarField::write(os); - os.writeKeyword("heatSource") << heatSourceTypeNames_[heatSource_] - << token::END_STATEMENT << nl; - q_.writeEntry("q", os); - os.writeKeyword("alphaEff") << alphaEffName_ << token::END_STATEMENT << nl; - writeEntry("value", os); -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -makePatchTypeField -( - fvPatchScalarField, - turbulentHeatFluxTemperatureFvPatchScalarField -); - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H b/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H deleted file mode 100644 index 3a7e1d849e0..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/derivedFvPatchFields/turbulentHeatFluxTemperature/turbulentHeatFluxTemperatureFvPatchScalarField.H +++ /dev/null @@ -1,228 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / 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::incompressible::turbulentHeatFluxTemperatureFvPatchScalarField - -Group - grpIcoRASBoundaryConditions grpWallBoundaryConditions - -Description - Fixed heat boundary condition to specify temperature gradient. Input - heat source either specified in terms of an absolute power [W], or as a - flux [W/m2]. - - \heading Patch usage - - \table - Property | Description | Required | Default value - heatSource | heat source type: \c flux [W/m2] or \c power [W]| yes | - q | heat source value | yes | - alphaEff | turbulent thermal diffusivity field name | yes | - \endtable - - Example of the boundary condition specification: - \verbatim - myPatch - { - type turbulentHeatFluxTemperature; - heatSource flux; - q uniform 10; - alphaEff alphaEff; - value uniform 300; // place holder - } - \endverbatim - -Note - - it is assumed that the units of \c alphaEff are [kg/m/s] - - the specific heat capcaity is read from the transport dictionary entry - \c Cp0 - -SourceFiles - turbulentHeatFluxTemperatureFvPatchScalarField.C - -\*---------------------------------------------------------------------------*/ - -#ifndef turbulentHeatFluxTemperatureFvPatchScalarFields_H -#define turbulentHeatFluxTemperatureFvPatchScalarFields_H - -#include "fvPatchFields.H" -#include "fixedGradientFvPatchFields.H" -#include "NamedEnum.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulentHeatFluxTemperatureFvPatchScalarField Declaration -\*---------------------------------------------------------------------------*/ - -class turbulentHeatFluxTemperatureFvPatchScalarField -: - public fixedGradientFvPatchScalarField -{ -public: - - // Data types - - //- Enumeration listing the possible hest source input modes - enum heatSourceType - { - hsPower, - hsFlux - }; - - -private: - - // Private data - - //- Heat source type names - static const NamedEnum<heatSourceType, 2> heatSourceTypeNames_; - - //- Heat source type - heatSourceType heatSource_; - - //- Heat power [W] or flux [W/m2] - // NOTE: to be divided by density, rho, if used in kinematic form - scalarField q_; - - //- Name of effective thermal diffusivity field - word alphaEffName_; - - -public: - - //- Runtime type information - TypeName("turbulentHeatFluxTemperature"); - - - // Constructors - - //- Construct from patch and internal field - turbulentHeatFluxTemperatureFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct from patch, internal field and dictionary - turbulentHeatFluxTemperatureFvPatchScalarField - ( - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const dictionary& - ); - - //- Construct by mapping given - // turbulentHeatFluxTemperatureFvPatchScalarField onto - // a new patch - turbulentHeatFluxTemperatureFvPatchScalarField - ( - const turbulentHeatFluxTemperatureFvPatchScalarField&, - const fvPatch&, - const DimensionedField<scalar, volMesh>&, - const fvPatchFieldMapper& - ); - - //- Construct as copy - turbulentHeatFluxTemperatureFvPatchScalarField - ( - const turbulentHeatFluxTemperatureFvPatchScalarField& - ); - - //- Construct and return a clone - virtual tmp<fvPatchScalarField> clone() const - { - return tmp<fvPatchScalarField> - ( - new turbulentHeatFluxTemperatureFvPatchScalarField(*this) - ); - } - - //- Construct as copy setting internal field reference - turbulentHeatFluxTemperatureFvPatchScalarField - ( - const turbulentHeatFluxTemperatureFvPatchScalarField&, - const DimensionedField<scalar, volMesh>& - ); - - //- Construct and return a clone setting internal field reference - virtual tmp<fvPatchScalarField> clone - ( - const DimensionedField<scalar, volMesh>& iF - ) const - { - return tmp<fvPatchScalarField> - ( - new turbulentHeatFluxTemperatureFvPatchScalarField - ( - *this, - iF - ) - ); - } - - - // Member functions - - // Mapping functions - - //- Map (and resize as needed) from self given a mapping object - virtual void autoMap(const fvPatchFieldMapper&); - - //- Reverse map the given fvPatchField onto this fvPatchField - virtual void rmap - ( - const fvPatchScalarField&, - const labelList& - ); - - - // Evaluation functions - - //- Update the coefficients associated with the patch field - virtual void updateCoeffs(); - - - // I-O - - //- Write - virtual void write(Ostream&) const; -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.C b/src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.C deleted file mode 100644 index f14b681011d..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/laminar/laminar.C +++ /dev/null @@ -1,245 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "laminar.H" -#include "Time.H" -#include "volFields.H" -#include "fvcGrad.H" -#include "fvcDiv.H" -#include "fvmLaplacian.H" -#include "addToRunTimeSelectionTable.H" - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(laminar, 0); -addToRunTimeSelectionTable(turbulenceModel, laminar, turbulenceModel); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -laminar::laminar -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -: - turbulenceModel(U, phi, transport, turbulenceModelName) -{} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<laminar> laminar::New -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -{ - return autoPtr<laminar> - ( - new laminar(U, phi, transport, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -const dictionary& laminar::coeffDict() const -{ - return dictionary::null; -} - - -tmp<volScalarField> laminar::nut() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "nut", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("nut", nu()().dimensions(), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::nuEff() const -{ - return tmp<volScalarField>(new volScalarField("nuEff", nu())); -} - - -tmp<volScalarField> laminar::k() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "k", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar("k", sqr(U_.dimensions()), 0.0) - ) - ); -} - - -tmp<volScalarField> laminar::epsilon() const -{ - return tmp<volScalarField> - ( - new volScalarField - ( - IOobject - ( - "epsilon", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar - ( - "epsilon", sqr(U_.dimensions())/dimTime, 0.0 - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::R() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "R", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedSymmTensor - ( - "R", sqr(U_.dimensions()), symmTensor::zero - ) - ) - ); -} - - -tmp<volSymmTensorField> laminar::devReff() const -{ - return tmp<volSymmTensorField> - ( - new volSymmTensorField - ( - IOobject - ( - "devRhoReff", - runTime_.timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - -nu()*dev(twoSymm(fvc::grad(U_))) - ) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevReff(volVectorField& U) const -{ - return - ( - - fvm::laplacian(nuEff(), U) - - fvc::div(nuEff()*dev(T(fvc::grad(U)))) - ); -} - - -tmp<fvVectorMatrix> laminar::divDevRhoReff -( - const volScalarField& rho, - volVectorField& U -) const -{ - volScalarField muEff("muEff", rho*nuEff()); - - return - ( - - fvm::laplacian(muEff, U) - - fvc::div(muEff*dev(T(fvc::grad(U)))) - ); -} - - -void laminar::correct() -{ - turbulenceModel::correct(); -} - - -bool laminar::read() -{ - return true; -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.C b/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.C deleted file mode 100644 index 6e607c160d8..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.C +++ /dev/null @@ -1,143 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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 "turbulenceModel.H" -#include "volFields.H" -#include "surfaceFields.H" -#include "wallFvPatch.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace incompressible -{ - -// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // - -defineTypeNameAndDebug(turbulenceModel, 0); -defineRunTimeSelectionTable(turbulenceModel, turbulenceModel); - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -turbulenceModel::turbulenceModel -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -: - regIOobject - ( - IOobject - ( - turbulenceModelName, - U.time().constant(), - U.db(), - IOobject::NO_READ, - IOobject::NO_WRITE - ) - ), - runTime_(U.time()), - mesh_(U.mesh()), - - U_(U), - phi_(phi), - transportModel_(transport), - y_(mesh_) -{} - - -// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * // - -autoPtr<turbulenceModel> turbulenceModel::New -( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName -) -{ - // get model name, but do not register the dictionary - // otherwise it is registered in the database twice - const word modelType - ( - IOdictionary - ( - IOobject - ( - "turbulenceProperties", - U.time().constant(), - U.db(), - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) - ).lookup("simulationType") - ); - - Info<< "Selecting turbulence model type " << modelType << endl; - - turbulenceModelConstructorTable::iterator cstrIter = - turbulenceModelConstructorTablePtr_->find(modelType); - - if (cstrIter == turbulenceModelConstructorTablePtr_->end()) - { - FatalErrorIn - ( - "turbulenceModel::New(const volVectorField&, " - "const surfaceScalarField&, transportModel&, const word&)" - ) << "Unknown turbulenceModel type " - << modelType << nl << nl - << "Valid turbulenceModel types:" << endl - << turbulenceModelConstructorTablePtr_->sortedToc() - << exit(FatalError); - } - - return autoPtr<turbulenceModel> - ( - cstrIter()(U, phi, transport, turbulenceModelName) - ); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void turbulenceModel::correct() -{ - if (mesh_.changing()) - { - y_.correct(); - } -} - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// ************************************************************************* // diff --git a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.H b/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.H deleted file mode 100644 index 52684d71256..00000000000 --- a/src/turbulenceModels/incompressible/turbulenceModel/turbulenceModel.H +++ /dev/null @@ -1,246 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2011-2015 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/>. - -Namespace - Foam::incompressible::turbulenceModels - -Description - Namespace for incompressible turbulence turbulence models. - -Class - Foam::incompressible::turbulenceModel - -Description - Abstract base class for incompressible turbulence models - (RAS, LES and laminar). - -SourceFiles - turbulenceModel.C - newTurbulenceModel.C - -\*---------------------------------------------------------------------------*/ - -#ifndef turbulenceModel_H -#define turbulenceModel_H - -#include "primitiveFieldsFwd.H" -#include "volFieldsFwd.H" -#include "surfaceFieldsFwd.H" -#include "fvMatricesFwd.H" -#include "incompressible/transportModel/transportModel.H" -#include "nearWallDist.H" -#include "autoPtr.H" -#include "runTimeSelectionTables.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ - -// Forward declarations -class fvMesh; - -namespace incompressible -{ - -/*---------------------------------------------------------------------------*\ - Class turbulenceModel Declaration -\*---------------------------------------------------------------------------*/ - -class turbulenceModel -: - public regIOobject -{ - -protected: - - // Protected data - - const Time& runTime_; - const fvMesh& mesh_; - - const volVectorField& U_; - const surfaceScalarField& phi_; - - const transportModel& transportModel_; - - //- Near wall distance boundary field - nearWallDist y_; - - -private: - - // Private Member Functions - - //- Disallow default bitwise copy construct - turbulenceModel(const turbulenceModel&); - - //- Disallow default bitwise assignment - void operator=(const turbulenceModel&); - - -public: - - //- Runtime type information - TypeName("turbulenceModel"); - - - // Declare run-time New selection table - - declareRunTimeNewSelectionTable - ( - autoPtr, - turbulenceModel, - turbulenceModel, - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName - ), - (U, phi, transport, turbulenceModelName) - ); - - - // Constructors - - //- Construct from components - turbulenceModel - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = typeName - ); - - - // Selectors - - //- Return a reference to the selected turbulence model - static autoPtr<turbulenceModel> New - ( - const volVectorField& U, - const surfaceScalarField& phi, - const transportModel& transport, - const word& turbulenceModelName = typeName - ); - - - //- Destructor - virtual ~turbulenceModel() - {} - - - // Member Functions - - //- Const access to the coefficients dictionary - virtual const dictionary& coeffDict() const = 0; - - //- Helper function to return the nam eof the turbulence G field - inline word GName() const - { - return word(type() + ":G"); - } - - //- Access function to velocity field - inline const volVectorField& U() const - { - return U_; - } - - //- Access function to flux field - inline const surfaceScalarField& phi() const - { - return phi_; - } - - //- Access function to incompressible transport model - inline const transportModel& transport() const - { - return transportModel_; - } - - //- Return the near wall distances - const nearWallDist& y() const - { - return y_; - } - - //- Return the laminar viscosity - inline tmp<volScalarField> nu() const - { - return transportModel_.nu(); - } - - //- Return the turbulence viscosity - virtual tmp<volScalarField> nut() const = 0; - - //- Return the effective viscosity - virtual tmp<volScalarField> nuEff() const = 0; - - //- Return the turbulence kinetic energy - virtual tmp<volScalarField> k() const = 0; - - //- Return the turbulence kinetic energy dissipation rate - virtual tmp<volScalarField> epsilon() const = 0; - - //- Return the Reynolds stress tensor - virtual tmp<volSymmTensorField> R() const = 0; - - //- Return the effective stress tensor including the laminar stress - virtual tmp<volSymmTensorField> devReff() const = 0; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevReff(volVectorField& U) const = 0; - - //- Return the source term for the momentum equation - virtual tmp<fvVectorMatrix> divDevRhoReff - ( - const volScalarField& rho, - volVectorField& U - ) const = 0; - - //- Solve the turbulence equations and correct the turbulence viscosity - virtual void correct() = 0; - - //- Read LESProperties or RASProperties dictionary - virtual bool read() = 0; - - //- Default dummy write function - virtual bool writeData(Ostream&) const - { - return true; - } -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace incompressible -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* // diff --git a/tutorials/combustion/LTSReactingFoam/ras/counterFlowFlame2D/system/fvSchemes b/tutorials/combustion/LTSReactingFoam/ras/counterFlowFlame2D/system/fvSchemes index dbda14ce2e9..050a277e00f 100644 --- a/tutorials/combustion/LTSReactingFoam/ras/counterFlowFlame2D/system/fvSchemes +++ b/tutorials/combustion/LTSReactingFoam/ras/counterFlowFlame2D/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phid,p) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/epsilon b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/epsilon index 8dc2a96f1c3..26ca09c49a4 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/epsilon +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/epsilon @@ -29,7 +29,7 @@ boundaryField } ground { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -37,7 +37,7 @@ boundaryField } blockedFaces { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -45,7 +45,7 @@ boundaryField } baffleWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k index 40833031907..a9ff01787fb 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k @@ -29,17 +29,17 @@ boundaryField } ground { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } blockedFaces { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleCyclic_half0 diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k.old b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k.old index 40833031907..a9ff01787fb 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k.old +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/k.old @@ -29,17 +29,17 @@ boundaryField } ground { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } blockedFaces { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleCyclic_half0 diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/mut b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/nut similarity index 89% rename from tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/mut rename to tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/nut index da762e68d0b..50a3a27e9d0 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/mut +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -28,7 +28,7 @@ boundaryField } ground { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -36,7 +36,7 @@ boundaryField } blockedFaces { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -44,7 +44,7 @@ boundaryField } baffleWall { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/RASProperties b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/RASProperties deleted file mode 100644 index 2f7a80d5772..00000000000 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/RASProperties +++ /dev/null @@ -1,36 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel PDRkEpsilon; - -PDRkEpsilonCoeffs -{ - Cmu 0.09; - C1 1.44; - C2 1.92; - C3 0; - C4 0.1; - alphah 1; - alphak 1; - alphaEps 0.76923; -} - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/turbulenceProperties b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/turbulenceProperties index 3721a46a2ea..3cf4138c412 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/turbulenceProperties +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/constant/turbulenceProperties @@ -15,7 +15,28 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel PDRkEpsilon; + + PDRkEpsilonCoeffs + { + Cmu 0.09; + C1 1.44; + C2 1.92; + C3 0; + C4 0.1; + alphah 1; + alphak 1; + alphaEps 0.76923; + } + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/changeDictionaryDict b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/changeDictionaryDict index a8ce95c9cd3..b48f2bf7336 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/changeDictionaryDict +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/changeDictionaryDict @@ -78,12 +78,12 @@ dictionaryReplacement { blockedFaces { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.1; } baffleWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 1e-5; } baffleCyclic_half0 @@ -103,12 +103,12 @@ dictionaryReplacement { blockedFaces { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1.5; } baffleCyclic_half0 diff --git a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes index b8943aa44f9..979d0d7dc9a 100644 --- a/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes +++ b/tutorials/combustion/PDRFoam/flamePropagationWithObstacles/system/fvSchemes @@ -50,7 +50,7 @@ divSchemes div((Su*grad(b))) Gauss linear; div((U+((Su*Xi)*grad(b)))) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(U) Gauss linear; } diff --git a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/mut b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/nut similarity index 95% rename from tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/mut rename to tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/nut index a9920120d01..113acd86c3e 100644 --- a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/mut +++ b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [ 0 2 -1 0 0 0 0 ]; internalField uniform 0; diff --git a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/turbulenceProperties b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/turbulenceProperties index 3721a46a2ea..b9a4c7ca82e 100644 --- a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/turbulenceProperties +++ b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel LaunderSharmaKE; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/system/fvSchemes b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/system/fvSchemes index c23bdd6acf6..359b92b0352 100644 --- a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/system/fvSchemes +++ b/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/system/fvSchemes @@ -49,7 +49,7 @@ divSchemes div(U) Gauss linear; div((Su*grad(b))) Gauss linear; div((U+((Su*Xi)*grad(b)))) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/combustion/engineFoam/kivaTest/-180/epsilon b/tutorials/combustion/engineFoam/kivaTest/-180/epsilon index fed15ed8462..9cb713ec95d 100644 --- a/tutorials/combustion/engineFoam/kivaTest/-180/epsilon +++ b/tutorials/combustion/engineFoam/kivaTest/-180/epsilon @@ -23,7 +23,7 @@ boundaryField { piston { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } liner { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -39,7 +39,7 @@ boundaryField } cylinderHead { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/combustion/engineFoam/kivaTest/-180/k b/tutorials/combustion/engineFoam/kivaTest/-180/k index 3b0e378049e..fb951423a9f 100644 --- a/tutorials/combustion/engineFoam/kivaTest/-180/k +++ b/tutorials/combustion/engineFoam/kivaTest/-180/k @@ -23,17 +23,17 @@ boundaryField { piston { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 4; } liner { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 4; } cylinderHead { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 4; } } diff --git a/tutorials/combustion/engineFoam/kivaTest/-180/mut b/tutorials/combustion/engineFoam/kivaTest/-180/nut similarity index 87% rename from tutorials/combustion/engineFoam/kivaTest/-180/mut rename to tutorials/combustion/engineFoam/kivaTest/-180/nut index 22cccd07d63..68a368eb002 100644 --- a/tutorials/combustion/engineFoam/kivaTest/-180/mut +++ b/tutorials/combustion/engineFoam/kivaTest/-180/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "-180"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { piston { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } liner { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -39,7 +39,7 @@ boundaryField } cylinderHead { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary b/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary index 24684a3ecfd..0b12967f8e6 100644 --- a/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary +++ b/tutorials/combustion/engineFoam/kivaTest/constant/polyMesh/boundary @@ -20,18 +20,21 @@ FoamFile piston { type wall; + inGroups 1(wall); nFaces 1326; startFace 79522; } liner { type wall; + inGroups 1(wall); nFaces 2710; startFace 80848; } cylinderHead { type wall; + inGroups 1(wall); nFaces 2184; startFace 83558; } diff --git a/tutorials/combustion/engineFoam/kivaTest/constant/turbulenceProperties b/tutorials/combustion/engineFoam/kivaTest/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/combustion/engineFoam/kivaTest/constant/turbulenceProperties +++ b/tutorials/combustion/engineFoam/kivaTest/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/combustion/engineFoam/kivaTest/system/fvSchemes b/tutorials/combustion/engineFoam/kivaTest/system/fvSchemes index a92565feff2..ed155cb77b8 100644 --- a/tutorials/combustion/engineFoam/kivaTest/system/fvSchemes +++ b/tutorials/combustion/engineFoam/kivaTest/system/fvSchemes @@ -53,7 +53,7 @@ divSchemes div(U) Gauss linear; div((Su*grad(b))) Gauss linear; div((U+((Su*Xi)*grad(b)))) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphaSgs b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphat similarity index 98% rename from tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphaSgs rename to tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphat index 91c0c2894e3..6de6470702d 100644 --- a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphaSgs +++ b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/alphat @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object alphaSgs; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/muSgs b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/nut similarity index 89% rename from tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/muSgs rename to tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/nut index 9da5b0c67de..f7a34d20690 100644 --- a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/muSgs +++ b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/0/nut @@ -12,13 +12,13 @@ FoamFile format ascii; location "0"; class volScalarField; - object muSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -32,7 +32,7 @@ boundaryField ground { - type mutUSpaldingWallFunction; + type nutUSpaldingWallFunction; value uniform 0; } @@ -50,7 +50,7 @@ boundaryField region0_to_pyrolysisRegion_coupledWall { - type mutUSpaldingWallFunction; + type nutUSpaldingWallFunction; value uniform 0; } diff --git a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/LESProperties b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/LESProperties deleted file mode 100644 index 5ecdc02d18a..00000000000 --- a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/LESProperties +++ /dev/null @@ -1,93 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -turbulence on; - -printCoeffs on; - -oneEqEddyCoeffs -{ - Prt 1; -} - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/turbulenceProperties index 098d0823ab8..0973192685e 100644 --- a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/turbulenceProperties +++ b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/constant/turbulenceProperties @@ -1,4 +1,4 @@ -/*---------------------------------------------------------------------------*\ +/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | @@ -17,7 +17,84 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + delta cubeRootVol; + + turbulence on; + + printCoeffs on; + + kEqnCoeffs + { + Prt 1; + } + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/system/fvSchemes b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/system/fvSchemes index a5dcaf45b65..1173de15cff 100644 --- a/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/flameSpreadWaterSuppressionPanel/system/fvSchemes @@ -44,7 +44,7 @@ divSchemes h limitedLinear 1; }; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phiU,p) Gauss linear; div(Ji,Ii_h) Gauss upwind; } diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphat similarity index 94% rename from tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphat index 5daa281498e..b9d5bb084f7 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphaSgs +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/alphat @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object alphaSgs; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -24,7 +24,6 @@ boundaryField ground { type compressible::alphatWallFunction; - mut muSgs; value uniform 0; } @@ -46,7 +45,6 @@ boundaryField "(region0_to.*)" { type compressible::alphatWallFunction; - mut muSgs; value uniform 0; } } diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/nut similarity index 91% rename from tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs rename to tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/nut index cf1d5513646..6bce2726001 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/muSgs +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/0/nut @@ -11,10 +11,10 @@ FoamFile format ascii; class volScalarField; location "0"; - object muSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -43,7 +43,7 @@ boundaryField "(region0_to.*)" { - type mutUSpaldingWallFunction; + type nutUSpaldingWallFunction; value uniform 0; } } diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun index 28496ffcf77..5528c96c783 100755 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/Allrun @@ -24,9 +24,11 @@ runApplication topoSet -dict system/fBurner.topoSetDict runApplication createPatch -overwrite -decomposePar -force > log.decomposePar.log 2>&1 +decomposePar -force > log.decomposePar 2>&1 -decomposePar -region panelRegion > log.decomposeParPanelRegion.log 2>&1 +decomposePar -region panelRegion > log.decomposeParPanelRegion 2>&1 + +decomposePar -fields > log.decomposePar 2>&1 runParallel `getApplication` 6 diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties deleted file mode 100644 index 5ecdc02d18a..00000000000 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/LESProperties +++ /dev/null @@ -1,93 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -turbulence on; - -printCoeffs on; - -oneEqEddyCoeffs -{ - Prt 1; -} - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties index 098d0823ab8..94eb369ba13 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/constant/turbulenceProperties @@ -1,4 +1,4 @@ -/*---------------------------------------------------------------------------*\ +/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | @@ -17,7 +17,83 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; +LES +{ + LESModel kEqn; + + delta cubeRootVol; + + turbulence on; + + printCoeffs on; + + kEqnCoeffs + { + Prt 1; + } + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes index 27521262649..0ca1dcaa675 100644 --- a/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/oppositeBurningPanels/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes CO2 linearUpwind grad(CO2); h linearUpwind grad(h); }; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,K) Gauss limitedLinear 1; div(Ji,Ii_h) Gauss upwind; } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphat similarity index 98% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphat index 203285a6c28..fe217e29ee3 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/muSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphat @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object muSgs; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/nut similarity index 95% rename from tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs rename to tutorials/combustion/fireFoam/les/smallPoolFire2D/0/nut index 5495f422b44..d22df48d1b6 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/alphaSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object alphaSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/LESProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/LESProperties deleted file mode 100644 index c24a9553bd1..00000000000 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/LESProperties +++ /dev/null @@ -1,82 +0,0 @@ -/*---------------------------------------------------------------------------*\ -| ========= | | -| \\ / 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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -turbulence on; - -printCoeffs on; - - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/turbulenceProperties index 098d0823ab8..2b6d52fc7df 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/turbulenceProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/turbulenceProperties @@ -1,4 +1,4 @@ -/*---------------------------------------------------------------------------*\ +/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: dev | @@ -14,10 +14,75 @@ FoamFile location "constant"; object turbulenceProperties; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + delta cubeRootVol; + + turbulence on; + + printCoeffs on; + + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes index efa1275f2b6..406f98c2aa0 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes CO2 limitedLinear01 1; h limitedLinear 1; }; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,omega) Gauss limitedLinear 1; div(phi,K) Gauss limitedLinear 1; div(U) Gauss linear; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/muSgs b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphat similarity index 97% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/muSgs rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphat index d94861f4ba9..eee8d350d2d 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/muSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphat @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object muSgs; + object alphat; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -37,6 +37,7 @@ boundaryField { type zeroGradient; } + } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphaSgs b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/nut similarity index 94% rename from tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphaSgs rename to tutorials/combustion/fireFoam/les/smallPoolFire3D/0/nut index ed7509d9f40..f626af56683 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/alphaSgs +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object alphaSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -37,7 +37,6 @@ boundaryField { type zeroGradient; } - } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/LESProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/LESProperties deleted file mode 100644 index 12e4f39bd62..00000000000 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/LESProperties +++ /dev/null @@ -1,88 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -turbulence on; - -printCoeffs on; - - -oneEqEddyCoeffs -{ - ck 0.07; -} - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/turbulenceProperties b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/turbulenceProperties index f97f6389b04..fc866e33627 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/turbulenceProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/constant/turbulenceProperties @@ -13,10 +13,80 @@ FoamFile location "constant"; object turbulenceProperties; } - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + delta cubeRootVol; + + turbulence on; + + printCoeffs on; + + + kEqnCoeffs + { + ck 0.07; + } + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes index e82354947c6..fbb43d9b9cd 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/smallPoolFire3D/system/fvSchemes @@ -40,7 +40,7 @@ divSchemes CO2 limitedLinear01 1; h limitedLinear 1; }; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(Ji,Ii_h) Gauss upwind; } diff --git a/tutorials/combustion/reactingFoam/ras/counterFlowFlame2D/system/fvSchemes b/tutorials/combustion/reactingFoam/ras/counterFlowFlame2D/system/fvSchemes index 4e19f9c7de1..48b4e3fff93 100644 --- a/tutorials/combustion/reactingFoam/ras/counterFlowFlame2D/system/fvSchemes +++ b/tutorials/combustion/reactingFoam/ras/counterFlowFlame2D/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phid,p) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon index c6f28faeeaf..8c7abfb78fc 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/epsilon @@ -23,27 +23,27 @@ boundaryField { front { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } back { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } porosityWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k index b92ab42afed..acbc36ec25a 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/k @@ -23,22 +23,22 @@ boundaryField { front { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } back { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } porosityWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } inlet diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/mut b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/nut similarity index 85% rename from tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/mut rename to tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/nut index 6f779fd4165..4170dde35ce 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/mut +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { front { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } back { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } porosityWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } inlet diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes index cec14e1fb56..49aa2c4c830 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes +++ b/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes div((rho*R)) Gauss linear; div(R) Gauss linear; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/mut b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/nut similarity index 86% rename from tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/mut rename to tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/nut index 21f39546801..1272c0822c9 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/mut +++ b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/0.org/nut @@ -11,21 +11,21 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "${FOAM_CASE}/constant/caseSettings" -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; boundaryField { - inlet { $:calculated.mut; } - outlet { $:calculated.mut; } - movingWalls { $:wall.mut; } + inlet { $:calculated.nut; } + outlet { $:calculated.nut; } + movingWalls { $:wall.nut; } staticWalls { $movingWalls; } #include "${WM_PROJECT_DIR}/etc/caseDicts/setConstraintTypes" diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/boundaryConditions b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/boundaryConditions index 7c492476ce2..6224731ba23 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/boundaryConditions +++ b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/boundaryConditions @@ -22,7 +22,7 @@ calculated type calculated; value uniform 0; } - mut + nut { type calculated; value uniform 0; @@ -99,19 +99,19 @@ wall k { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform $:innerInlet.k; } epsilon { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform $:innerInlet.epsilon; } - mut + nut { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/turbulenceProperties index c2021e7271a..cd2daf8229b 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/system/fvSchemes b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/system/fvSchemes index 4256201f449..1cd4e17a525 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/system/fvSchemes +++ b/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(meshPhi,p) Gauss linear; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/alphaSgs b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/alphat similarity index 100% rename from tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/alphaSgs rename to tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/alphat diff --git a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nuSgs b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/nut similarity index 98% rename from tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nuSgs rename to tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/nut index 608ec8c465f..726b637f782 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nuSgs +++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/nut @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/LESProperties b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/LESProperties deleted file mode 100644 index b78b63e5ed9..00000000000 --- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/LESProperties +++ /dev/null @@ -1,88 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -turbulence on; - -printCoeffs on; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/polyMesh/boundary b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/polyMesh/boundary index 43b78ef4111..581ceffc709 100644 --- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/polyMesh/boundary @@ -32,12 +32,14 @@ FoamFile upperWall { type wall; + inGroups 1(wall); nFaces 223; startFace 24257; } lowerWall { type wall; + inGroups 1(wall); nFaces 250; startFace 24480; } diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/turbulenceProperties index a925d3cc2b2..dccceff3d8c 100644 --- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/constant/turbulenceProperties @@ -15,7 +15,79 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta cubeRootVol; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/system/fvSchemes index 51d3236831d..36d3193afd8 100644 --- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/system/fvSchemes +++ b/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,B) Gauss limitedLinear 1; div(phi,muTilda) Gauss limitedLinear 1; div(B) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/epsilon b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/epsilon index c6f28faeeaf..8c7abfb78fc 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/epsilon +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/epsilon @@ -23,27 +23,27 @@ boundaryField { front { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } back { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } porosityWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/k b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/k index b92ab42afed..acbc36ec25a 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/k +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/k @@ -23,22 +23,22 @@ boundaryField { front { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } back { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } porosityWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } inlet diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/mut b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/nut similarity index 85% rename from tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/mut rename to tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/nut index 6f779fd4165..4170dde35ce 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/mut +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { front { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } back { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } porosityWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } inlet diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSchemes index 5d15eae6c0f..dce2ee09ff1 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSchemes +++ b/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes div((rho*R)) Gauss linear; div(R) Gauss linear; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/epsilon b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/epsilon index 6f1ace6a162..cfc9a229b56 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/epsilon +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/epsilon @@ -23,13 +23,13 @@ boundaryField { movingWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value $internalField; } fixedWalls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value $internalField; } diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/k b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/k index 6917b826d91..72d1287df1f 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/k +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/k @@ -23,12 +23,12 @@ boundaryField { movingWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.00325; } fixedWalls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.00325; } frontAndBack diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/mut b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/nut similarity index 91% rename from tutorials/compressible/rhoPimpleFoam/ras/cavity/0/mut rename to tutorials/compressible/rhoPimpleFoam/ras/cavity/0/nut index db1e79f1de9..94c53c3de52 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/mut +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/nut @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { movingWall { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } fixedWalls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/omega b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/omega index 5a9f7e014d5..dc890e42e1a 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/omega +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/0/omega @@ -23,7 +23,7 @@ boundaryField { movingWall { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } fixedWalls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/ras/cavity/system/fvSchemes index 7510de7b7a5..c2728910fe2 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/system/fvSchemes +++ b/tutorials/compressible/rhoPimpleFoam/ras/cavity/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes div((rho*R)) Gauss linear; div(R) Gauss linear; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon index dcbf83049b5..07e4effd344 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/epsilon @@ -23,13 +23,13 @@ boundaryField { rotor { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 20; } stator { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 20; } diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k index 29b185deadf..60208ba1315 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/k @@ -23,13 +23,13 @@ boundaryField { rotor { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } stator { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/mut b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/nut similarity index 88% rename from tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/mut rename to tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/nut index 98af49fbc18..6ca6d3aef64 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/mut +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,13 +23,13 @@ boundaryField { rotor { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } stator { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes index db6494d806a..ddea2bbda03 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes +++ b/tutorials/compressible/rhoPimpleFoam/ras/mixerVessel2D/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,h) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,K) Gauss linear; } diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat index 33ecb425e27..b2a20bdcd79 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/alphat @@ -17,39 +17,39 @@ FoamFile dimensions [1 -1 -1 0 0 0 0]; -internalField uniform 0; +internalField uniform 1e-3; boundaryField { front { type compressible::alphatWallFunction; - value uniform 0; + value $internalField; } back { type compressible::alphatWallFunction; - value uniform 0; + value $internalField; } walls { type compressible::alphatWallFunction; - value uniform 0; + value $internalField; } porosityWall { type compressible::alphatWallFunction; - value uniform 0; + value $internalField; } inlet { type calculated; - value uniform 0; + value $internalField; } outlet { type calculated; - value uniform 0; + value $internalField; } } diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon index c6f28faeeaf..8c7abfb78fc 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/epsilon @@ -23,27 +23,27 @@ boundaryField { front { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } back { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } porosityWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k index b92ab42afed..acbc36ec25a 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/k @@ -23,22 +23,22 @@ boundaryField { front { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } back { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } porosityWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } inlet diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/nut similarity index 85% rename from tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut rename to tutorials/compressible/rhoPimplecFoam/angledDuct/0/nut index 6f779fd4165..4170dde35ce 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/0/mut +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { front { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } back { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } porosityWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } inlet diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes index 5d15eae6c0f..dce2ee09ff1 100644 --- a/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes +++ b/tutorials/compressible/rhoPimplecFoam/angledDuct/system/fvSchemes @@ -39,7 +39,7 @@ divSchemes div((rho*R)) Gauss linear; div(R) Gauss linear; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes index f83203612ee..232bd728b01 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctExplicit/system/fvSchemes @@ -28,7 +28,7 @@ gradSchemes divSchemes { div(phi,U) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,e) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon index 12c9b362e35..21b1e98ef91 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/epsilon @@ -23,31 +23,31 @@ boundaryField { front { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } back { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } porosityWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k index 3dbe46f030c..cd7aa310966 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/k @@ -23,25 +23,25 @@ boundaryField { front { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } back { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } porosityWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/nut similarity index 85% rename from tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut rename to tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/nut index a01a5a0eed8..4362a65a8dc 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/mut +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [ 0 2 -1 0 0 0 0 ]; internalField uniform 0; @@ -23,25 +23,25 @@ boundaryField { front { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } back { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } porosityWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes index f83203612ee..232bd728b01 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes +++ b/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/system/fvSchemes @@ -28,7 +28,7 @@ gradSchemes divSchemes { div(phi,U) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,e) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon index 12c9b362e35..21b1e98ef91 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/epsilon @@ -23,31 +23,31 @@ boundaryField { front { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } back { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } porosityWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 200; } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k index 3dbe46f030c..cd7aa310966 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/k @@ -23,25 +23,25 @@ boundaryField { front { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } back { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } porosityWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } diff --git a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/mut b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/nut similarity index 85% rename from tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/mut rename to tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/nut index a01a5a0eed8..fcb2bc9b008 100644 --- a/tutorials/compressible/rhoPorousSimpleFoam/angledDuctImplicit/0/mut +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,25 +23,25 @@ boundaryField { front { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } back { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } porosityWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary index 76e163242f2..7a2d7d0e5e3 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/polyMesh/boundary @@ -20,24 +20,28 @@ FoamFile front { type wall; + inGroups 1(wall); nFaces 700; startFace 63400; } back { type wall; + inGroups 1(wall); nFaces 700; startFace 64100; } walls { type wall; + inGroups 1(wall); nFaces 1400; startFace 64800; } porosityWall { type wall; + inGroups 1(wall); nFaces 1600; startFace 66200; } diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/turbulenceProperties b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes index b4ca79e3c84..7c3213ef9b4 100644 --- a/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes +++ b/tutorials/compressible/rhoSimpleFoam/angledDuctExplicitFixedCoeff/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,e) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon b/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon index 9161ca6171e..71b9c782d16 100644 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/epsilon @@ -23,7 +23,7 @@ boundaryField { Default_Boundary_Region { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } inlet { - type compressible::turbulentMixingLengthDissipationRateInlet; + type turbulentMixingLengthDissipationRateInlet; mixingLength 0.005; value uniform 200; } diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/k b/tutorials/compressible/rhoSimplecFoam/squareBend/0/k index baffcd16db4..7ee52f8dbfb 100644 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/0/k +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/k @@ -23,7 +23,7 @@ boundaryField { Default_Boundary_Region { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } inlet diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/0/mut b/tutorials/compressible/rhoSimplecFoam/squareBend/0/nut similarity index 92% rename from tutorials/compressible/rhoSimplecFoam/squareBend/0/mut rename to tutorials/compressible/rhoSimplecFoam/squareBend/0/nut index eb4656f2966..ac8d562f40e 100644 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/0/mut +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { Default_Boundary_Region { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes index 5a12a4e1dad..665b390b98b 100644 --- a/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes +++ b/tutorials/compressible/rhoSimplecFoam/squareBend/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,e) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; diff --git a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes index 4d56bbf40f8..0b421e801c7 100644 --- a/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/laminar/forwardStep/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,e) Gauss limitedLinear 1; div(phi,K) Gauss limitedLinear 1; div(phiv,p) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear 1; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear 1; } laplacianSchemes diff --git a/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes b/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes index d42c248c254..85d4f97a6ce 100644 --- a/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/laminar/shockTube/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,e) Gauss limitedLinear 1; div(phi,K) Gauss limitedLinear 1; div(phiv,p) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear 1; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear 1; } laplacianSchemes diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/epsilon b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/epsilon index 9a65ce7eec4..867915923d5 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/epsilon +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/epsilon @@ -39,7 +39,7 @@ boundaryField } WALL10 { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/k b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/k index 552f881f4ef..807d2a2b302 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/k +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/k @@ -39,7 +39,7 @@ boundaryField } WALL10 { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1000; } } diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/mut b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/nut similarity index 92% rename from tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/mut rename to tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/nut index d10d5087061..b8c80af97ce 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/mut +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -37,7 +37,7 @@ boundaryField } WALL10 { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/RASProperties b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/RASProperties deleted file mode 100644 index 34805a0b264..00000000000 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel LaunderSharmaKE; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/polyMesh/boundary b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/polyMesh/boundary index b6f0d11024a..becd8320f7b 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/polyMesh/boundary +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/polyMesh/boundary @@ -39,6 +39,7 @@ FoamFile WALL10 { type wall; + inGroups 1(wall); nFaces 260; startFace 160170; } diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties index 3721a46a2ea..b9a4c7ca82e 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel LaunderSharmaKE; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes index ec1368d9cac..e43f10e9b91 100644 --- a/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/ras/nacaAirfoil/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phiv,p) Gauss limitedLinear 1; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/sonicFoam/ras/prism/0/epsilon b/tutorials/compressible/sonicFoam/ras/prism/0/epsilon index a7bd5b6bb0b..baba5a80013 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/0/epsilon +++ b/tutorials/compressible/sonicFoam/ras/prism/0/epsilon @@ -46,7 +46,7 @@ boundaryField } prismWall { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 266000; } defaultFaces diff --git a/tutorials/compressible/sonicFoam/ras/prism/0/k b/tutorials/compressible/sonicFoam/ras/prism/0/k index 2917c4e8493..61815273a53 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/0/k +++ b/tutorials/compressible/sonicFoam/ras/prism/0/k @@ -46,7 +46,7 @@ boundaryField } prismWall { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1000; } defaultFaces diff --git a/tutorials/compressible/sonicFoam/ras/prism/0/mut b/tutorials/compressible/sonicFoam/ras/prism/0/nut similarity index 93% rename from tutorials/compressible/sonicFoam/ras/prism/0/mut rename to tutorials/compressible/sonicFoam/ras/prism/0/nut index 61d98a744d3..3035025ddc6 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/0/mut +++ b/tutorials/compressible/sonicFoam/ras/prism/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -43,7 +43,7 @@ boundaryField } prismWall { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } defaultFaces diff --git a/tutorials/compressible/sonicFoam/ras/prism/constant/RASProperties b/tutorials/compressible/sonicFoam/ras/prism/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/compressible/sonicFoam/ras/prism/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties b/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties +++ b/tutorials/compressible/sonicFoam/ras/prism/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes b/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes index bf71cbee709..6519c5e77cb 100644 --- a/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes +++ b/tutorials/compressible/sonicFoam/ras/prism/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phiv,p) Gauss limitedLinear 1; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/turbulenceProperties b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/system/fvSchemes index 2ea94995ae8..9052cd188f6 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantBoussinesqPimpleFoam/hotRoom/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/turbulenceProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes index 7f51468ad72..cbc48629e53 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/hotRoom/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,T) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/turbulenceProperties b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict index 31ca07d47d1..590a482d4a0 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/controlDict @@ -15,13 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" - "libincompressibleTransportModels.so" -); - application buoyantBoussinesqSimpleFoam; startFrom startTime; diff --git a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes index bba4ac8e0c1..b64a3959f5e 100644 --- a/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantBoussinesqSimpleFoam/iglooWithFridges/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,epsilon) bounded Gauss upwind; div(phi,R) bounded Gauss upwind; div(R) Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/epsilon b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/epsilon index 23851291dc6..892d69375d9 100644 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/epsilon +++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/epsilon @@ -23,17 +23,17 @@ boundaryField { floor { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } ceiling { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } fixedWalls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/k b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/k index 62dd722078f..8e5e6563ee0 100644 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/k +++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/k @@ -23,17 +23,17 @@ boundaryField { floor { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } ceiling { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } fixedWalls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/mut b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/nut similarity index 85% rename from tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/mut rename to tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/nut index 3da3e391bf6..a4ff4149840 100644 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/mut +++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,17 +23,17 @@ boundaryField { floor { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } ceiling { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } fixedWalls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } } diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/turbulenceProperties b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/turbulenceProperties +++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/fvSchemes index 9ca38f0376f..d156cf98bb7 100644 --- a/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantPimpleFoam/hotRoom/system/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(phi,K) Gauss linear; div(phi,Ekp) Gauss linear; div(R) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/epsilon index da6d8915485..f1ac119104a 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/epsilon +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/epsilon @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } topAndBottom { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } hot { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } cold { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/k index 886667fb5c3..ccdab2054e5 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/k +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/k @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } topAndBottom { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } hot { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } cold { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/nut similarity index 83% rename from tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/mut rename to tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/nut index 0ecb8672d27..bc7b9104086 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/mut +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } topAndBottom { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } hot { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } cold { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/omega b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/omega index 423815a2de8..481f4e64d7c 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/omega +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/omega @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } topAndBottom { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } hot { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } cold { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/RASProperties deleted file mode 100644 index be86bc1efaa..00000000000 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/RASProperties +++ /dev/null @@ -1,23 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/turbulenceProperties similarity index 89% rename from tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/RASProperties rename to tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/turbulenceProperties index e0e6b776a27..beee8bdf085 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/cavity/constant/RASProperties +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/constant/turbulenceProperties @@ -10,16 +10,18 @@ FoamFile version 2.0; format ascii; class dictionary; - location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kOmegaSST; +RAS +{ + RASModel kOmegaSST; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/system/fvSchemes index 5e55527b803..d2738ff36b3 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,k) bounded Gauss limitedLinear 0.2; div(phi,epsilon) bounded Gauss limitedLinear 0.2; div(phi,omega) bounded Gauss limitedLinear 0.2; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/epsilon index 7ac88b9230b..e850a8a82f1 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/epsilon +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/epsilon @@ -26,7 +26,7 @@ boundaryField floor { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -34,7 +34,7 @@ boundaryField } ceiling { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/include/wallBafflePatches b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/include/wallBafflePatches index fd5f3f8c4c8..c9385a0f640 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/include/wallBafflePatches +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/include/wallBafflePatches @@ -14,19 +14,19 @@ alphat epsilon { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } k { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.01; } -mut +nut { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/k b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/k index 97f41e6e200..e231033d12f 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/k +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/k @@ -26,12 +26,12 @@ boundaryField floor { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } ceiling { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } inlet diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/mut b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/nut similarity index 91% rename from tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/mut rename to tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/nut index 329027bb91e..53df8822769 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/mut +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -26,7 +26,7 @@ boundaryField floor { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -34,7 +34,7 @@ boundaryField } ceiling { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/RASProperties deleted file mode 100644 index 5eeb61a9ad9..00000000000 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/RASProperties +++ /dev/null @@ -1,23 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/turbulenceProperties similarity index 89% rename from tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/RASProperties rename to tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/turbulenceProperties index a4937b503a4..1c094d0a383 100644 --- a/tutorials/compressible/rhoPimpleFoam/ras/angledDuct/constant/RASProperties +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/constant/turbulenceProperties @@ -10,16 +10,18 @@ FoamFile version 2.0; format ascii; class dictionary; - location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kEpsilon; +RAS +{ + RASModel kEpsilon; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/controlDict b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/controlDict index f35c15f101f..78f6a784a29 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/controlDict +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/controlDict @@ -44,6 +44,6 @@ timePrecision 6; runTimeModifiable true; -libs ("libthermalBaffleModels.so" "libcompressibleRASModels.so"); +libs ("libthermalBaffleModels.so"); // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/fvSchemes index 9881bbd431b..0c8ae95a6dc 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/circuitBoardCooling/system/fvSchemes @@ -33,18 +33,18 @@ divSchemes div(phi,k) bounded Gauss limitedLinear 0.2; div(phi,epsilon) bounded Gauss limitedLinear 0.2; div(phi,omega) bounded Gauss limitedLinear 0.2; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes { default none; - laplacian(muEff,U) Gauss linear uncorrected; + laplacian((rho*nuEff),U) Gauss linear uncorrected; laplacian(rhorAUf,p_rgh) Gauss linear uncorrected; laplacian(alphaEff,h) Gauss linear uncorrected; - laplacian(DkEff,k) Gauss linear uncorrected; - laplacian(DepsilonEff,epsilon) Gauss linear uncorrected; - laplacian(DomegaEff,omega) Gauss linear uncorrected; + laplacian((rho*DkEff),k) Gauss linear uncorrected; + laplacian((rho*DepsilonEff),epsilon) Gauss linear uncorrected; + laplacian((rho*DomegaEff),omega) Gauss linear uncorrected; } interpolationSchemes diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/epsilon index da6d8915485..f1ac119104a 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/epsilon +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/epsilon @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } topAndBottom { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } hot { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } cold { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 4e-06; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/k index 886667fb5c3..ccdab2054e5 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/k +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/k @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } topAndBottom { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } hot { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } cold { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 3.75e-04; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/nut similarity index 83% rename from tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/mut rename to tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/nut index 0ecb8672d27..bc7b9104086 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/buoyantCavity/0/mut +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } topAndBottom { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } hot { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } cold { - type mutUWallFunction; + type nutUWallFunction; value uniform 0; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/omega b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/omega index 423815a2de8..481f4e64d7c 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/omega +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/omega @@ -23,22 +23,22 @@ boundaryField { frontAndBack { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } topAndBottom { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } hot { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } cold { - type compressible::omegaWallFunction; + type omegaWallFunction; value uniform 0.12; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/RASProperties deleted file mode 100644 index be86bc1efaa..00000000000 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/RASProperties +++ /dev/null @@ -1,23 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/turbulenceProperties b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/turbulenceProperties new file mode 100644 index 00000000000..beee8bdf085 --- /dev/null +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/constant/turbulenceProperties @@ -0,0 +1,27 @@ +/*--------------------------------*- 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 RASProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/system/fvSchemes index 5e55527b803..d2738ff36b3 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,k) bounded Gauss limitedLinear 0.2; div(phi,epsilon) bounded Gauss limitedLinear 0.2; div(phi,omega) bounded Gauss limitedLinear 0.2; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon index 312afc24a63..a0fa682a610 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/epsilon @@ -23,22 +23,22 @@ boundaryField { box { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } floor { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } ceiling { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } fixedWalls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k index 2b618db2f3e..0ca172de859 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/k @@ -23,22 +23,22 @@ boundaryField { box { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } floor { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } ceiling { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } fixedWalls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/nut similarity index 83% rename from tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/mut rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/nut index 504bd304c15..86ee5ac89b2 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/mut +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,22 +23,22 @@ boundaryField { box { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } floor { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } ceiling { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } fixedWalls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/turbulenceProperties similarity index 90% rename from tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/RASProperties rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/turbulenceProperties index 34805a0b264..15d9319a448 100644 --- a/tutorials/combustion/XiFoam/ras/moriyoshiHomogeneous/constant/RASProperties +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/constant/turbulenceProperties @@ -15,11 +15,14 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel LaunderSharmaKE; +RAS +{ + RASModel kEpsilon; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes index 2ceace5b7c7..293a173b11b 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoom/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,h) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon index b8e91addc9d..c49b1005e38 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/epsilon @@ -23,7 +23,7 @@ boundaryField { box { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } floor { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -39,7 +39,7 @@ boundaryField } ceiling { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -47,7 +47,7 @@ boundaryField } fixedWalls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k index 2b618db2f3e..0ca172de859 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/k @@ -23,22 +23,22 @@ boundaryField { box { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } floor { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } ceiling { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } fixedWalls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/mut b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/nut similarity index 86% rename from tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/mut rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/nut index 93c6dc22bcd..a7fc155fc21 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/mut +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { box { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -31,7 +31,7 @@ boundaryField } floor { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -39,7 +39,7 @@ boundaryField } ceiling { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; @@ -47,7 +47,7 @@ boundaryField } fixedWalls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/turbulenceProperties similarity index 90% rename from tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties rename to tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/turbulenceProperties index a4937b503a4..15d9319a448 100644 --- a/tutorials/compressible/rhoLTSPimpleFoam/angledDuct/constant/RASProperties +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/constant/turbulenceProperties @@ -15,11 +15,14 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kEpsilon; +RAS +{ + RASModel kEpsilon; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes index e0a0f4efd26..1abd80550c2 100644 --- a/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes +++ b/tutorials/heatTransfer/buoyantSimpleFoam/hotRadiationRoomFvDOM/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; div(Ji,Ii_h) bounded Gauss linearUpwind grad(Ii_h); - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/epsilon b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/epsilon index c09d9c59c9b..f8b893353b7 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/epsilon +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/epsilon @@ -34,32 +34,32 @@ boundaryField } minY { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } minZ { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } maxZ { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } bottomWater_to_rightSolid { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } bottomWater_to_leftSolid { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } bottomWater_to_heater { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/k b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/k index 556c0d3d9ef..2558d1e2e9d 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/k +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/0/bottomWater/k @@ -34,32 +34,32 @@ boundaryField } minY { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } minZ { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } maxZ { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } bottomWater_to_rightSolid { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } bottomWater_to_leftSolid { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } bottomWater_to_heater { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun index 070546bfcfd..bf6e7f74877 100755 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/Allrun @@ -12,7 +12,7 @@ runApplication splitMeshRegions -cellZones -overwrite # remove fluid fields from solid regions (important for post-processing) for i in heater leftSolid rightSolid do - rm -f 0*/$i/{mut,alphat,epsilon,k,U,p_rgh} + rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh} done diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/changeDictionaryDict index dad0abea12a..63a08c87a1d 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/changeDictionaryDict @@ -97,7 +97,7 @@ dictionaryReplacement ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } @@ -123,7 +123,7 @@ dictionaryReplacement ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/fvSchemes b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/fvSchemes index 3051d55b0f4..1278f2856a5 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/bottomWater/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict index 77bc57943a2..32b54e823d7 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/controlDict @@ -15,12 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libcompressibleTurbulenceModel.so" - "libcompressibleRASModels.so" -); - application chtMultiRegionFoam; startFrom latestTime; diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict index fef7666e767..ae6e8d8c8f0 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/system/topAir/changeDictionaryDict @@ -83,7 +83,7 @@ dictionaryReplacement { ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } @@ -109,7 +109,7 @@ dictionaryReplacement { ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun index f00ffc59180..1b68a368e41 100755 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/Allrun @@ -16,7 +16,7 @@ runApplication splitMeshRegions -cellZones -overwrite # remove fluid fields from solid regions (important for post-processing) for i in heater leftSolid rightSolid do - rm -f 0*/$i/{mut,alphat,epsilon,k,U,p_rgh} + rm -f 0*/$i/{nut,alphat,epsilon,k,U,p_rgh} done diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/bottomAir/RASProperties b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/bottomAir/RASProperties deleted file mode 100644 index 09a9a55851d..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/bottomAir/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/topAir/RASProperties b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/topAir/RASProperties deleted file mode 120000 index eaf002d2e96..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/constant/topAir/RASProperties +++ /dev/null @@ -1 +0,0 @@ -../bottomAir/RASProperties \ No newline at end of file diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/changeDictionaryDict index caff6664586..b7bddf908d9 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/changeDictionaryDict @@ -74,7 +74,7 @@ dictionaryReplacement { ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } @@ -88,7 +88,7 @@ dictionaryReplacement { ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/fvSchemes index dca5ba3f8e4..867b0a2e978 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/bottomAir/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/topAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/topAir/changeDictionaryDict index fef7666e767..ae6e8d8c8f0 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/topAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionFoam/snappyMultiRegionHeater/system/topAir/changeDictionaryDict @@ -83,7 +83,7 @@ dictionaryReplacement { ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } @@ -109,7 +109,7 @@ dictionaryReplacement { ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/alphat b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/alphat new file mode 100644 index 00000000000..40eeda22be7 --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/alphat @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.3.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0/air"; + object alphat; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [1 -1 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type compressible::alphatWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + blades + { + type compressible::alphatWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/epsilon b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/epsilon index 46cfcab3a22..49dcfaa45a1 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/epsilon +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/epsilon @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value $internalField; } inlet @@ -37,7 +37,7 @@ boundaryField } blades { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value $internalField; } } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/k b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/k index 6a2ab6f9406..3f0421bdf84 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/k +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/k @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value $internalField; } inlet @@ -37,7 +37,7 @@ boundaryField } blades { - type compressible::kqRWallFunction; + type kqRWallFunction; value $internalField; } } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/nut b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/nut new file mode 100644 index 00000000000..63b9c797a6d --- /dev/null +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/0.org/air/nut @@ -0,0 +1,47 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.3.x | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0/air"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + walls + { + type nutkWallFunction; + value uniform 0; + } + inlet + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + blades + { + type nutkWallFunction; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/RASProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/turbulenceProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/turbulenceProperties +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/air/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/porous/RASProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/porous/RASProperties deleted file mode 100644 index 1cc42b8af81..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/constant/porous/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs off; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvSchemes index a39397c7c31..52e15c826bb 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/air/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,K) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/porous/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/porous/fvSchemes index f787aa1bb47..27a33bf7c41 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/porous/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/heatExchanger/system/porous/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,K) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun.pre b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun.pre index 6590684a5aa..9ce6c565d54 100755 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun.pre +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/Allrun.pre @@ -12,7 +12,7 @@ runApplication splitMeshRegions -cellZones -overwrite # remove fluid fields from solid regions (important for post-processing) for i in heater leftSolid rightSolid do - rm -f 0*/$i/{rho,mut,alphat,epsilon,k,U,p_rgh,Qr,G,IDefault} + rm -f 0*/$i/{rho,nut,alphat,epsilon,k,U,p_rgh,Qr,G,IDefault} done for i in bottomAir topAir heater leftSolid rightSolid diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/bottomAir/RASProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/bottomAir/RASProperties deleted file mode 100644 index c6886ad2826..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/bottomAir/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/topAir/RASProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/topAir/RASProperties deleted file mode 120000 index eaf002d2e96..00000000000 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/constant/topAir/RASProperties +++ /dev/null @@ -1 +0,0 @@ -../bottomAir/RASProperties \ No newline at end of file diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/changeDictionaryDict index b115024cc77..c583021fa3c 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/changeDictionaryDict @@ -71,7 +71,7 @@ dictionaryReplacement { ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } } @@ -84,7 +84,7 @@ dictionaryReplacement { ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } } diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes index 127c9c965f0..f761dabb4a9 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/bottomAir/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(phi,R) bounded Gauss upwind; div(R) Gauss linear; div(Ji,Ii_h) Gauss linearUpwind grad(U); - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/changeDictionaryDict index e6294637398..68f73839a2d 100644 --- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/changeDictionaryDict +++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/topAir/changeDictionaryDict @@ -82,7 +82,7 @@ dictionaryReplacement { ".*" { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.01; } @@ -107,7 +107,7 @@ dictionaryReplacement { ".*" { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.1; } diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/RASProperties b/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/polyMesh/boundary b/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/polyMesh/boundary index 0ffa7ce34e9..921d19779b8 100644 --- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/polyMesh/boundary +++ b/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/polyMesh/boundary @@ -20,6 +20,7 @@ FoamFile rotor { type wall; + inGroups 1(wall); nFaces 144; startFace 5640; } @@ -32,12 +33,14 @@ FoamFile front { type empty; + inGroups 1(empty); nFaces 2880; startFace 5880; } back { type empty; + inGroups 1(empty); nFaces 2880; startFace 8760; } diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/turbulenceProperties b/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/turbulenceProperties index e7fa28c74a5..381b548effb 100644 --- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/turbulenceProperties +++ b/tutorials/incompressible/SRFPimpleFoam/rotor2D/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/fvSchemes b/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/fvSchemes index d9300091381..4a2232f7315 100644 --- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/fvSchemes +++ b/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes div(phi,Urel) Gauss limitedLinearV 1; div(phi,k) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(Urel))))) Gauss linear; + div((nuEff*dev2(T(grad(Urel))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/SRFSimpleFoam/mixer/constant/RASProperties b/tutorials/incompressible/SRFSimpleFoam/mixer/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/incompressible/SRFSimpleFoam/mixer/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/SRFSimpleFoam/mixer/constant/turbulenceProperties b/tutorials/incompressible/SRFSimpleFoam/mixer/constant/turbulenceProperties new file mode 100644 index 00000000000..85d399a1ec6 --- /dev/null +++ b/tutorials/incompressible/SRFSimpleFoam/mixer/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/SRFSimpleFoam/mixer/system/fvSchemes b/tutorials/incompressible/SRFSimpleFoam/mixer/system/fvSchemes index c6d44d3c2e7..e5ff26a907d 100644 --- a/tutorials/incompressible/SRFSimpleFoam/mixer/system/fvSchemes +++ b/tutorials/incompressible/SRFSimpleFoam/mixer/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,R) bounded Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) bounded Gauss upwind; - div((nuEff*dev(T(grad(Urel))))) Gauss linear; + div((nuEff*dev2(T(grad(Urel))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/SRFSimpleFoam/mixer/turbulenceProperties b/tutorials/incompressible/SRFSimpleFoam/mixer/turbulenceProperties new file mode 100644 index 00000000000..85d399a1ec6 --- /dev/null +++ b/tutorials/incompressible/SRFSimpleFoam/mixer/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/RASProperties b/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/RASProperties deleted file mode 100644 index aed2ebec562..00000000000 --- a/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/combustion/engineFoam/kivaTest/constant/RASProperties b/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/turbulenceProperties similarity index 90% rename from tutorials/combustion/engineFoam/kivaTest/constant/RASProperties rename to tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/turbulenceProperties index a4937b503a4..15d9319a448 100644 --- a/tutorials/combustion/engineFoam/kivaTest/constant/RASProperties +++ b/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/constant/turbulenceProperties @@ -15,11 +15,14 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kEpsilon; +RAS +{ + RASModel kEpsilon; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/system/fvSchemes b/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/system/fvSchemes index de12e1d3a84..06b08169dbd 100644 --- a/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/system/fvSchemes +++ b/tutorials/incompressible/adjointShapeOptimizationFoam/pitzDaily/system/fvSchemes @@ -32,10 +32,10 @@ divSchemes div(phi,U) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; div(phi,epsilon) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; div(-phi,Ua) bounded Gauss upwind; - div((nuEff*dev(T(grad(Ua))))) Gauss linear; + div((nuEff*dev2(T(grad(Ua))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/RASProperties b/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/RASProperties deleted file mode 100644 index 34805a0b264..00000000000 --- a/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel LaunderSharmaKE; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/turbulenceProperties b/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/turbulenceProperties new file mode 100644 index 00000000000..8e24a9035ab --- /dev/null +++ b/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel LaunderSharmaKE; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/system/fvSchemes b/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/system/fvSchemes index 815e2582005..0fd54ce506d 100644 --- a/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/system/fvSchemes +++ b/tutorials/incompressible/boundaryFoam/boundaryLaunderSharma/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,epsilon) bounded Gauss linear; div(phi,R) bounded Gauss linear; div(phi,nuTilda) bounded Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/RASProperties b/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/turbulenceProperties b/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/system/fvSchemes b/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/system/fvSchemes index 815e2582005..0fd54ce506d 100644 --- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/system/fvSchemes +++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctions/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,epsilon) bounded Gauss linear; div(phi,R) bounded Gauss linear; div(phi,nuTilda) bounded Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/RASProperties b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/RASProperties deleted file mode 100644 index b74bfe5738c..00000000000 --- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; // SpalartAllmaras; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/turbulenceProperties b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/system/fvSchemes b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/system/fvSchemes index ce1e571bfbd..36dca60f67c 100644 --- a/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/system/fvSchemes +++ b/tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,omega) bounded Gauss linear; div(phi,R) bounded Gauss linear; div(phi,nuTilda) bounded Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/RASProperties b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/system/fvSchemes index 83902138b48..44da6880a95 100644 --- a/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/mixerVesselAMI2D/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes { default none; div(phi,U) Gauss linearUpwind grad(U); - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSchemes index b7e6607f899..51be17c90c8 100644 --- a/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/movingCone/system/fvSchemes @@ -29,7 +29,7 @@ divSchemes { default none; div(phi,U) Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/0/nuSgs b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/0.org/nut similarity index 61% rename from tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/0/nuSgs rename to tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/0.org/nut index 77f51f79803..55d04b4210b 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/0/nuSgs +++ b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/0.org/nut @@ -10,7 +10,8 @@ FoamFile version 2.0; format ascii; class volScalarField; - object nuSgs; + location "0"; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -23,25 +24,44 @@ boundaryField inlet { type fixedValue; - value uniform 0; + value $internalField; } - outlet { type inletOutlet; - inletValue uniform 0; - value uniform 0; + inletValue $internalField; + value $internalField; } - walls { - type zeroGradient; + type nutkWallFunction; + value $internalField; } - defaultFaces { type empty; } + ACMI1_blockage + { + type nutkWallFunction; + value $internalField; + } + ACMI1_couple + { + type cyclicACMI; + value $internalField; + } + ACMI2_blockage + { + type nutkWallFunction; + value $internalField; + } + ACMI2_couple + { + type cyclicACMI; + value $internalField; + } } + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/RASProperties b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/turbulenceProperties b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/system/fvSchemes index b6ae74a4e93..f65b5bf3979 100644 --- a/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/oscillatingInletACMI2D/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,U) Gauss linearUpwind grad(U); div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/RASProperties b/tutorials/incompressible/pimpleDyMFoam/propeller/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/turbulenceProperties b/tutorials/incompressible/pimpleDyMFoam/propeller/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/incompressible/pimpleDyMFoam/propeller/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleDyMFoam/propeller/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/propeller/system/controlDict b/tutorials/incompressible/pimpleDyMFoam/propeller/system/controlDict index 264b5c1c1b0..57b261e4803 100644 --- a/tutorials/incompressible/pimpleDyMFoam/propeller/system/controlDict +++ b/tutorials/incompressible/pimpleDyMFoam/propeller/system/controlDict @@ -15,12 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); - application pimpleDyMFoam; startFrom startTime; diff --git a/tutorials/incompressible/pimpleDyMFoam/propeller/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/propeller/system/fvSchemes index b6ae74a4e93..f65b5bf3979 100644 --- a/tutorials/incompressible/pimpleDyMFoam/propeller/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/propeller/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,U) Gauss linearUpwind grad(U); div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/RASProperties b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/turbulenceProperties b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/system/fvSchemes index 5f991022850..82d5997ca48 100644 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_pimpleDyMFoam/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,U) Gauss linearUpwind grad(U); div(phi,k) Gauss limitedLinear 1; div(phi,omega) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/RASProperties b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/turbulenceProperties b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/turbulenceProperties new file mode 100644 index 00000000000..af8a54be232 --- /dev/null +++ b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/constant/turbulenceProperties @@ -0,0 +1,27 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/system/fvSchemes index 370aa5a6649..da2c979ea8d 100644 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion2D_simpleFoam/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,U) bounded Gauss linearUpwind grad(U); div(phi,k) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion_snappyHexMesh/system/fvSchemes b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion_snappyHexMesh/system/fvSchemes index 14f066ebe92..f8bab393c97 100644 --- a/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion_snappyHexMesh/system/fvSchemes +++ b/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion_snappyHexMesh/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phid,p) Gauss limitedLinear 1; div(phi,K) Gauss limitedLinear 1; div(phi,e) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleFoam/TJunction/constant/RASProperties b/tutorials/incompressible/pimpleFoam/TJunction/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleFoam/TJunction/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/TJunction/constant/turbulenceProperties b/tutorials/incompressible/pimpleFoam/TJunction/constant/turbulenceProperties index e7fa28c74a5..381b548effb 100644 --- a/tutorials/incompressible/pimpleFoam/TJunction/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleFoam/TJunction/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/TJunction/system/controlDict b/tutorials/incompressible/pimpleFoam/TJunction/system/controlDict index e351883188c..8495249e240 100644 --- a/tutorials/incompressible/pimpleFoam/TJunction/system/controlDict +++ b/tutorials/incompressible/pimpleFoam/TJunction/system/controlDict @@ -15,13 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libOpenFOAM.so" - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); - application pimpleFoam; startFrom startTime; diff --git a/tutorials/incompressible/pimpleFoam/TJunction/system/fvSchemes b/tutorials/incompressible/pimpleFoam/TJunction/system/fvSchemes index a59b75bee93..ff07884de81 100644 --- a/tutorials/incompressible/pimpleFoam/TJunction/system/fvSchemes +++ b/tutorials/incompressible/pimpleFoam/TJunction/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/RASProperties b/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/turbulenceProperties b/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/turbulenceProperties index e7fa28c74a5..381b548effb 100644 --- a/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleFoam/TJunctionFan/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/controlDict b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/controlDict index 0cbeb15c6b5..929e6a5039c 100644 --- a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/controlDict +++ b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/controlDict @@ -48,12 +48,6 @@ adjustTimeStep yes; maxCo 3; -libs -( - "libOpenFOAM.so" - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); functions { diff --git a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/fvSchemes b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/fvSchemes index a59b75bee93..ff07884de81 100644 --- a/tutorials/incompressible/pimpleFoam/TJunctionFan/system/fvSchemes +++ b/tutorials/incompressible/pimpleFoam/TJunctionFan/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleFoam/channel395/0.org/nuSgs b/tutorials/incompressible/pimpleFoam/channel395/0.org/nut similarity index 98% rename from tutorials/incompressible/pimpleFoam/channel395/0.org/nuSgs rename to tutorials/incompressible/pimpleFoam/channel395/0.org/nut index b4ba303bf75..df3efc1518b 100644 --- a/tutorials/incompressible/pimpleFoam/channel395/0.org/nuSgs +++ b/tutorials/incompressible/pimpleFoam/channel395/0.org/nut @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "1"; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/incompressible/pimpleFoam/channel395/0/nuSgs.gz b/tutorials/incompressible/pimpleFoam/channel395/0/nuSgs.gz deleted file mode 100644 index 7c05e74de9f71cf1d5853ab5496bae46aa9d785d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208201 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 byZZzK=cV8NKS}5OOYzi;li!|x!NmXo0m{qF diff --git a/tutorials/incompressible/pimpleFoam/channel395/Allrun b/tutorials/incompressible/pimpleFoam/channel395/Allrun index 436a3b7ae5e..a94c6e72a3b 100755 --- a/tutorials/incompressible/pimpleFoam/channel395/Allrun +++ b/tutorials/incompressible/pimpleFoam/channel395/Allrun @@ -14,7 +14,7 @@ runApplication blockMesh #- Run parallel runApplication decomposePar -cellDist -runParallel $application 5 +runParallel $application 4 runApplication reconstructPar runApplication postChannel diff --git a/tutorials/incompressible/pimpleFoam/channel395/constant/LESProperties b/tutorials/incompressible/pimpleFoam/channel395/constant/LESProperties deleted file mode 100644 index af3a82dbea0..00000000000 --- a/tutorials/incompressible/pimpleFoam/channel395/constant/LESProperties +++ /dev/null @@ -1,86 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -printCoeffs on; - -delta vanDriest; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/channel395/constant/turbulenceProperties b/tutorials/incompressible/pimpleFoam/channel395/constant/turbulenceProperties index 2d60fc8bf13..b04390b6e24 100644 --- a/tutorials/incompressible/pimpleFoam/channel395/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleFoam/channel395/constant/turbulenceProperties @@ -15,6 +15,79 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel SpalartAllmarasDDES; //kEqn; + + turbulence on; + + printCoeffs on; + + delta vanDriest; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/channel395/system/decomposeParDict b/tutorials/incompressible/pimpleFoam/channel395/system/decomposeParDict index 9f0365f2de4..d4b2c3d0ab9 100644 --- a/tutorials/incompressible/pimpleFoam/channel395/system/decomposeParDict +++ b/tutorials/incompressible/pimpleFoam/channel395/system/decomposeParDict @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -numberOfSubdomains 5; +numberOfSubdomains 4; //- Keep owner and neighbour on same processor for faces in zones: // preserveFaceZones (heater solid1 solid3); @@ -38,9 +38,9 @@ numberOfSubdomains 5; // for a balanced number of particles in a lagrangian simulation. // weightField dsmcRhoNMean; -method scotch; -//method hierarchical; -// method simple; +// method scotch; +// method hierarchical; +method simple; // method metis; // method manual; // method multiLevel; @@ -73,7 +73,7 @@ multiLevelCoeffs simpleCoeffs { - n (2 1 1); + n (1 2 2); delta 0.001; } diff --git a/tutorials/incompressible/pimpleFoam/channel395/system/fvSchemes b/tutorials/incompressible/pimpleFoam/channel395/system/fvSchemes index 6d5ef5ab979..8973a7c1c4c 100644 --- a/tutorials/incompressible/pimpleFoam/channel395/system/fvSchemes +++ b/tutorials/incompressible/pimpleFoam/channel395/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,B) Gauss limitedLinear 1; div(B) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes @@ -57,5 +57,10 @@ fluxRequired p ; } +wallDist +{ + method meshWave; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/channel395/system/fvSolution b/tutorials/incompressible/pimpleFoam/channel395/system/fvSolution index 3beda0be2d6..b3abd8eafb3 100644 --- a/tutorials/incompressible/pimpleFoam/channel395/system/fvSolution +++ b/tutorials/incompressible/pimpleFoam/channel395/system/fvSolution @@ -39,7 +39,7 @@ solvers relTol 0; } - "(U|k)" + "(U|k|nuTilda)" { solver smoothSolver; smoother symGaussSeidel; @@ -47,7 +47,7 @@ solvers relTol 0.1; } - "(U|k)Final" + "(U|k|nuTilda)Final" { $U; tolerance 1e-05; diff --git a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/RASProperties b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/RASProperties deleted file mode 100644 index 88b1e501ac6..00000000000 --- a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kkLOmega; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/turbulenceProperties b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/turbulenceProperties index e7fa28c74a5..d6c0926546d 100644 --- a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kkLOmega; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/system/fvSchemes b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/system/fvSchemes index ea3c1491e16..0adb7755519 100644 --- a/tutorials/incompressible/pimpleFoam/elipsekkLOmega/system/fvSchemes +++ b/tutorials/incompressible/pimpleFoam/elipsekkLOmega/system/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/RASProperties b/tutorials/incompressible/pimpleFoam/pitzDaily/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/polyMesh/boundary b/tutorials/incompressible/pimpleFoam/pitzDaily/constant/polyMesh/boundary index 43b78ef4111..581ceffc709 100644 --- a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/polyMesh/boundary +++ b/tutorials/incompressible/pimpleFoam/pitzDaily/constant/polyMesh/boundary @@ -32,12 +32,14 @@ FoamFile upperWall { type wall; + inGroups 1(wall); nFaces 223; startFace 24257; } lowerWall { type wall; + inGroups 1(wall); nFaces 250; startFace 24480; } diff --git a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/turbulenceProperties b/tutorials/incompressible/pimpleFoam/pitzDaily/constant/turbulenceProperties index e7fa28c74a5..d5016f6d22b 100644 --- a/tutorials/incompressible/pimpleFoam/pitzDaily/constant/turbulenceProperties +++ b/tutorials/incompressible/pimpleFoam/pitzDaily/constant/turbulenceProperties @@ -15,6 +15,15 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pimpleFoam/pitzDaily/system/fvSchemes b/tutorials/incompressible/pimpleFoam/pitzDaily/system/fvSchemes index 926d489aae5..e72eaed33ac 100644 --- a/tutorials/incompressible/pimpleFoam/pitzDaily/system/fvSchemes +++ b/tutorials/incompressible/pimpleFoam/pitzDaily/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,R) bounded Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/Allrun b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/Allrun index 4cbfb18b0e1..769a0e506ba 100755 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/Allrun +++ b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/Allrun @@ -3,20 +3,14 @@ # Source tutorial run functions . $WM_PROJECT_DIR/bin/tools/RunFunctions - # Set-up the LES case cp ../lesFiles/fvS* ../lesFiles/controlDict system/ -cp ../lesFiles/LESProperties ../lesFiles/turbulenceProperties constant/ +cp ../lesFiles/turbulenceProperties constant/ ls -d processor* | xargs -i rm -rf ./{}/0 $1 ls -d processor* | xargs -i mv ./{}/500 ./{}/0 $1 ls -d processor* | xargs -i rm -rf ./{}/0/uniform $1 -ls -d processor* | xargs -i cp ../lesFiles/LESProperties ./{}/constant/ $1 -ls -d processor* | xargs -i cp ../lesFiles/turbulenceProperties ./{}/constant/ $1 -ls -d processor* | xargs -i cp ../lesFiles/nuSgs ./{}/0/ $1 - - runParallel pisoFoam 8 runApplication reconstructParMesh -constant -mergeTol 1e-6 diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/LESProperties b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/LESProperties deleted file mode 100644 index 197e16d1261..00000000000 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/LESProperties +++ /dev/null @@ -1,79 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel SpalartAllmarasDDES; - -delta cubeRootVol; - -printCoeffs on; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; - } - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSchemes b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSchemes index 3972a7e7887..2c7ad38af54 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSchemes +++ b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSchemes @@ -36,11 +36,10 @@ divSchemes default none; div(phi,U) Gauss LUST unlimitedGrad(U); - //div(phi,U) Gauss linearUpwind unlimitedGrad(U); div(phi,k) Gauss limitedLinear 1; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSolution b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSolution index 19904d0a378..ea00426f610 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSolution +++ b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/fvSolution @@ -20,7 +20,7 @@ solvers { solver GAMG; tolerance 1e-6; - relTol 0.1; + relTol 0.05; smoother GaussSeidel; nPreSweeps 0; @@ -28,7 +28,7 @@ solvers cacheAgglomeration true; - nCellsInCoarsestLevel 50;//10; + nCellsInCoarsestLevel 50; agglomerator faceAreaPair; mergeLevels 1; }; @@ -36,23 +36,22 @@ solvers pFinal { $p; - tolerance 1e-6; relTol 0; }; "(U|k|B|nuTilda)" { solver smoothSolver; - smoother GaussSeidel; - tolerance 1e-07; + smoother symGaussSeidel; + tolerance 1e-7; relTol 0; }; } PISO { - nCorrectors 2; - nNonOrthogonalCorrectors 1; + nCorrectors 3; + nNonOrthogonalCorrectors 0; } relaxationFactors diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/nuSgs b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/nuSgs deleted file mode 100644 index bcc0d11042c..00000000000 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/nuSgs +++ /dev/null @@ -1,69 +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 volScalarField; - object nuSgs; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -dimensions [0 2 -1 0 0 0 0]; - -internalField uniform 0.0544766; - -boundaryField -{ - inlet - { - type fixedValue; - value uniform 0.0544766; - } - - outlet - { - type inletOutlet; - inletValue uniform 0.0544766; - value uniform 0.0544766; - } - - front - { - type symmetryPlane; - } - - back - { - type symmetryPlane; - } - - lowerWall - { - type nutUSpaldingWallFunction; - value uniform 0.0544766; - } - - upperWall - { - type symmetryPlane; - } - - "motorBike_.*" - { - type nutUSpaldingWallFunction; - value uniform 0.0544766; - } - - "proc.*" - { - type processor; - } -} - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/turbulenceProperties b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/turbulenceProperties index ab998a16d7a..35b21043f9e 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/turbulenceProperties +++ b/tutorials/incompressible/pisoFoam/les/motorBike/lesFiles/turbulenceProperties @@ -15,6 +15,72 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel SpalartAllmarasDDES; + + delta cubeRootVol; + + printCoeffs on; + + turbulence on; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + maxDeltaRatio 1.1; + } +} + // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/RASProperties b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/RASProperties deleted file mode 100644 index d76eff61b45..00000000000 --- a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel SpalartAllmaras; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/polyMesh/boundary b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/polyMesh/boundary index 578783eaeb9..7e7cb8fc3c6 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/polyMesh/boundary +++ b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/polyMesh/boundary @@ -15,441 +15,47 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -72 +6 ( - frontAndBack + front { type symmetryPlane; inGroups 1(symmetryPlane); - nFaces 320; - startFace 9440280; + nFaces 160; + startFace 3456; + } + back + { + type symmetryPlane; + inGroups 1(symmetryPlane); + nFaces 160; + startFace 3616; } inlet { type patch; nFaces 64; - startFace 9440600; + startFace 3776; } outlet { type patch; nFaces 64; - startFace 9440664; + startFace 3840; } lowerWall { type wall; - nFaces 15243; - startFace 9440728; + inGroups 1(wall); + nFaces 160; + startFace 3904; } upperWall { type symmetryPlane; inGroups 1(symmetryPlane); nFaces 160; - startFace 9455971; - } - motorBike_frt-fairing:001%1 - { - type wall; - nFaces 90875; - startFace 9456131; - } - motorBike_windshield:002%2 - { - type wall; - nFaces 376; - startFace 9547006; - } - motorBike_rr-wh-rim:005%5 - { - type wall; - nFaces 2402; - startFace 9547382; - } - motorBike_rr-wh-rim:010%10 - { - type wall; - nFaces 5288; - startFace 9549784; - } - motorBike_fr-wh-rim:011%11 - { - type wall; - nFaces 7215; - startFace 9555072; - } - motorBike_fr-wh-brake-disk:012%12 - { - type wall; - nFaces 973; - startFace 9562287; - } - motorBike_frame:016-shadow%13 - { - type wall; - nFaces 1718; - startFace 9563260; - } - motorBike_rear-susp:014%14 - { - type wall; - nFaces 14936; - startFace 9564978; - } - motorBike_rear-susp:014-shadow%15 - { - type wall; - nFaces 8564; - startFace 9579914; - } - motorBike_frame:016%16 - { - type wall; - nFaces 969; - startFace 9588478; - } - motorBike_rr-wh-rim:005-shadow%17 - { - type wall; - nFaces 1251; - startFace 9589447; - } - motorBike_rr-wh-chain-hub:022%22 - { - type wall; - nFaces 1827; - startFace 9590698; - } - motorBike_rearseat%24 - { - type wall; - nFaces 3241; - startFace 9592525; - } - motorBike_frt-fairing%25 - { - type wall; - nFaces 5078; - startFace 9595766; - } - motorBike_windshield%26 - { - type wall; - nFaces 6545; - startFace 9600844; - } - motorBike_headlights%27 - { - type wall; - nFaces 455; - startFace 9607389; - } - motorBike_driversseat%28 - { - type wall; - nFaces 5112; - startFace 9607844; - } - motorBike_rear-body%29 - { - type wall; - nFaces 12033; - startFace 9612956; - } - motorBike_fuel-tank%30 - { - type wall; - nFaces 6586; - startFace 9624989; - } - motorBike_exhaust%31 - { - type wall; - nFaces 20319; - startFace 9631575; - } - motorBike_rr-wh-rim%32 - { - type wall; - nFaces 9928; - startFace 9651894; - } - motorBike_fr-mud-guard%33 - { - type wall; - nFaces 13989; - startFace 9661822; - } - motorBike_fr-wh-rim%34 - { - type wall; - nFaces 6592; - startFace 9675811; - } - motorBike_fr-wh-brake-disk%35 - { - type wall; - nFaces 7374; - startFace 9682403; - } - motorBike_fr-brake-caliper%36 - { - type wall; - nFaces 2178; - startFace 9689777; - } - motorBike_fr-wh-tyre%37 - { - type wall; - nFaces 9947; - startFace 9691955; - } - motorBike_hbars%38 - { - type wall; - nFaces 7345; - startFace 9701902; - } - motorBike_fr-forks%39 - { - type wall; - nFaces 10349; - startFace 9709247; - } - motorBike_chain%40 - { - type wall; - nFaces 7168; - startFace 9719596; - } - motorBike_rr-wh-tyre%41 - { - type wall; - nFaces 7245; - startFace 9726764; - } - motorBike_square-dial%42 - { - type wall; - nFaces 62; - startFace 9734009; - } - motorBike_round-dial%43 - { - type wall; - nFaces 183; - startFace 9734071; - } - motorBike_dial-holder%44 - { - type wall; - nFaces 1336; - startFace 9734254; - } - motorBike_rear-susp%45 - { - type wall; - nFaces 25738; - startFace 9735590; - } - motorBike_rear-brake-lights%46 - { - type wall; - nFaces 860; - startFace 9761328; - } - motorBike_rear-light-bracket%47 - { - type wall; - nFaces 2003; - startFace 9762188; - } - motorBike_frame%48 - { - type wall; - nFaces 20232; - startFace 9764191; - } - motorBike_rear-mud-guard%49 - { - type wall; - nFaces 10690; - startFace 9784423; - } - motorBike_rear-susp-spring-damp%50 - { - type wall; - nFaces 1769; - startFace 9795113; - } - motorBike_fairing-inner-plate%51 - { - type wall; - nFaces 4660; - startFace 9796882; - } - motorBike_clutch-housing%52 - { - type wall; - nFaces 8237; - startFace 9801542; - } - motorBike_radiator%53 - { - type wall; - nFaces 1849; - startFace 9809779; - } - motorBike_water-pipe%54 - { - type wall; - nFaces 1182; - startFace 9811628; - } - motorBike_water-pump%55 - { - type wall; - nFaces 902; - startFace 9812810; - } - motorBike_engine%56 - { - type wall; - nFaces 19087; - startFace 9813712; - } - motorBike_rear-shock-link%57 - { - type wall; - nFaces 512; - startFace 9832799; - } - motorBike_rear-brake-fluid-pot-bracket%58 - { - type wall; - nFaces 721; - startFace 9833311; - } - motorBike_rear-brake-fluid-pot%59 - { - type wall; - nFaces 795; - startFace 9834032; - } - motorBike_footpeg%60 - { - type wall; - nFaces 1405; - startFace 9834827; - } - motorBike_rr-wh-chain-hub%61 - { - type wall; - nFaces 1984; - startFace 9836232; - } - motorBike_rear-brake-caliper%62 - { - type wall; - nFaces 2119; - startFace 9838216; - } - motorBike_rider-helmet%65 - { - type wall; - nFaces 2244; - startFace 9840335; - } - motorBike_rider-visor%66 - { - type wall; - nFaces 171; - startFace 9842579; - } - motorBike_rider-boots%67 - { - type wall; - nFaces 5287; - startFace 9842750; - } - motorBike_rider-gloves%68 - { - type wall; - nFaces 3129; - startFace 9848037; - } - motorBike_rider-body%69 - { - type wall; - nFaces 22909; - startFace 9851166; - } - motorBike_frame:0%70 - { - type wall; - nFaces 361; - startFace 9874075; - } - motorBike_frt-fairing:001-shadow%74 - { - type wall; - nFaces 56996; - startFace 9874436; - } - motorBike_windshield-shadow%75 - { - type wall; - nFaces 4535; - startFace 9931432; - } - motorBike_fr-mud-guard-shadow%81 - { - type wall; - nFaces 9174; - startFace 9935967; - } - motorBike_fr-wh-brake-disk-shadow%83 - { - type wall; - nFaces 3923; - startFace 9945141; - } - motorBike_rear-mud-guard-shadow%84 - { - type wall; - nFaces 6792; - startFace 9949064; - } - motorBike_rear-susp-spring-damp-shadow%85 - { - type wall; - nFaces 1211; - startFace 9955856; - } - motorBike_radiator-shadow%86 - { - type wall; - nFaces 1080; - startFace 9957067; - } - motorBike_rear-shock-link-shadow%87 - { - type wall; - nFaces 357; - startFace 9958147; - } - motorBike_rear-brake-fluid-pot-bracket-shadow%88 - { - type wall; - nFaces 420; - startFace 9958504; - } - motorBike_rr-wh-chain-hub-shadow%89 - { - type wall; - nFaces 1071; - startFace 9958924; + startFace 4064; } ) diff --git a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/RASProperties b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/turbulenceProperties similarity index 90% rename from tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/RASProperties rename to tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/turbulenceProperties index aed2ebec562..f9d4381ee65 100644 --- a/tutorials/compressible/rhoPimpleDyMFoam/annularThermalMixer/constant/RASProperties +++ b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/constant/turbulenceProperties @@ -15,10 +15,13 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kEpsilon; +RAS +{ + RASModel SpalartAllmaras; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/fvSchemes b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/fvSchemes index 3bc772bfed7..c6c8fbf6f8d 100644 --- a/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/fvSchemes +++ b/tutorials/incompressible/pisoFoam/les/motorBike/motorBike/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,U) bounded Gauss linearUpwindV grad(U); div(phi,k) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; div(phi,nuTilda) bounded Gauss upwind; } diff --git a/tutorials/incompressible/pisoFoam/les/pitzDaily/0/nuSgs b/tutorials/incompressible/pisoFoam/les/pitzDaily/0/nut similarity index 98% rename from tutorials/incompressible/pisoFoam/les/pitzDaily/0/nuSgs rename to tutorials/incompressible/pisoFoam/les/pitzDaily/0/nut index 608ec8c465f..726b637f782 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDaily/0/nuSgs +++ b/tutorials/incompressible/pisoFoam/les/pitzDaily/0/nut @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/LESProperties b/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/LESProperties deleted file mode 100644 index b0c6edf80fd..00000000000 --- a/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/LESProperties +++ /dev/null @@ -1,86 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -printCoeffs on; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/turbulenceProperties b/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/turbulenceProperties index ab998a16d7a..19b96955768 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/turbulenceProperties +++ b/tutorials/incompressible/pisoFoam/les/pitzDaily/constant/turbulenceProperties @@ -15,6 +15,78 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta cubeRootVol; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/pitzDaily/system/fvSchemes b/tutorials/incompressible/pisoFoam/les/pitzDaily/system/fvSchemes index 45cce4ef177..752f20f660a 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDaily/system/fvSchemes +++ b/tutorials/incompressible/pisoFoam/les/pitzDaily/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,B) Gauss limitedLinear 1; div(phi,nuTilda) Gauss limitedLinear 1; div(B) Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/muSgs b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nut similarity index 95% rename from tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/muSgs rename to tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nut index 65048d6cc30..726b637f782 100644 --- a/tutorials/compressible/rhoPimpleFoam/les/pitzDaily/0/muSgs +++ b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/0/nut @@ -10,11 +10,11 @@ FoamFile version 2.0; format ascii; class volScalarField; - object muSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; diff --git a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/LESProperties b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/LESProperties deleted file mode 100644 index b0c6edf80fd..00000000000 --- a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/LESProperties +++ /dev/null @@ -1,86 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta cubeRootVol; - -printCoeffs on; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/turbulenceProperties b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/turbulenceProperties index a925d3cc2b2..19b96955768 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/turbulenceProperties +++ b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/constant/turbulenceProperties @@ -15,7 +15,78 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta cubeRootVol; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/system/fvSchemes b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/system/fvSchemes index 62b8ad368d4..75f35706047 100644 --- a/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/system/fvSchemes +++ b/tutorials/incompressible/pisoFoam/les/pitzDailyMapped/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phi,B) Gauss limitedLinear 1; div(phi,nuTilda) Gauss limitedLinear 1; div(B) Gauss linear; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pisoFoam/ras/cavity/0/omega b/tutorials/incompressible/pisoFoam/ras/cavity/0/omega new file mode 100644 index 00000000000..a7040dd8439 --- /dev/null +++ b/tutorials/incompressible/pisoFoam/ras/cavity/0/omega @@ -0,0 +1,41 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object omega; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 0 -1 0 0 0 0]; + +internalField uniform 1; + +boundaryField +{ + movingWall + { + type omegaWallFunction; + value uniform 1; + } + fixedWalls + { + type omegaWallFunction; + value uniform 1; + } + frontAndBack + { + type empty; + } +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/ras/cavity/constant/RASProperties b/tutorials/incompressible/pisoFoam/ras/cavity/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pisoFoam/ras/cavity/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/ras/cavity/constant/turbulenceProperties b/tutorials/incompressible/pisoFoam/ras/cavity/constant/turbulenceProperties index 3721a46a2ea..3ffed52b9a2 100644 --- a/tutorials/incompressible/pisoFoam/ras/cavity/constant/turbulenceProperties +++ b/tutorials/incompressible/pisoFoam/ras/cavity/constant/turbulenceProperties @@ -15,7 +15,15 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; +RAS +{ + RASModel kOmega; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSchemes b/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSchemes index a59b75bee93..9d066714d2b 100644 --- a/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSchemes +++ b/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSchemes @@ -31,10 +31,11 @@ divSchemes div(phi,U) Gauss limitedLinearV 1; div(phi,k) Gauss limitedLinear 1; div(phi,epsilon) Gauss limitedLinear 1; + div(phi,omega) Gauss limitedLinear 1; div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSolution b/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSolution index 983e6dd8045..7342e01ebe4 100644 --- a/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSolution +++ b/tutorials/incompressible/pisoFoam/ras/cavity/system/fvSolution @@ -38,7 +38,7 @@ solvers relTol 0; } - "(U|k|epsilon|R|nuTilda)" + "(U|k|epsilon|omega|R|nuTilda)" { solver smoothSolver; smoother GaussSeidel; diff --git a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/RASProperties b/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/turbulenceProperties b/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/turbulenceProperties index 3721a46a2ea..d587253c9a8 100644 --- a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/turbulenceProperties +++ b/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/constant/turbulenceProperties @@ -15,7 +15,15 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/system/fvSchemes b/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/system/fvSchemes index a59b75bee93..ff07884de81 100644 --- a/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/system/fvSchemes +++ b/tutorials/incompressible/pisoFoam/ras/cavityCoupledU/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/porousSimpleFoam/angledDuctExplicit/system/fvSchemes b/tutorials/incompressible/porousSimpleFoam/angledDuctExplicit/system/fvSchemes index 5db0abc188c..930ef501add 100644 --- a/tutorials/incompressible/porousSimpleFoam/angledDuctExplicit/system/fvSchemes +++ b/tutorials/incompressible/porousSimpleFoam/angledDuctExplicit/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; } diff --git a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/RASProperties b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/system/fvSchemes b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/system/fvSchemes index 9376d23004a..ee3301aead9 100644 --- a/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/system/fvSchemes +++ b/tutorials/incompressible/porousSimpleFoam/angledDuctImplicit/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; } diff --git a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/RASProperties b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/turbulenceProperties b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/fvSchemes b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/fvSchemes index 9376d23004a..ee3301aead9 100644 --- a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/fvSchemes +++ b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; } diff --git a/tutorials/incompressible/simpleFoam/airFoil2D/constant/RASProperties b/tutorials/incompressible/simpleFoam/airFoil2D/constant/RASProperties deleted file mode 100644 index d76eff61b45..00000000000 --- a/tutorials/incompressible/simpleFoam/airFoil2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel SpalartAllmaras; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/airFoil2D/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/airFoil2D/constant/turbulenceProperties new file mode 100644 index 00000000000..2c4a2745464 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/airFoil2D/constant/turbulenceProperties @@ -0,0 +1,27 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel SpalartAllmaras; + + turbulence on; + + printCoeffs on; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes index 4158d2dead3..38d9449246c 100644 --- a/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/airFoil2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) bounded Gauss linearUpwind grad(U); div(phi,nuTilda) bounded Gauss linearUpwind grad(nuTilda); - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/turbulenceProperties new file mode 100644 index 00000000000..a9b58dc78e7 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/mixerVessel2D/constant/turbulenceProperties @@ -0,0 +1,27 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes b/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes index dddcf6c24b8..6a50ad98d87 100644 --- a/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/mixerVessel2D/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes div(phi,U) bounded Gauss limitedLinearV 1; div(phi,k) bounded Gauss limitedLinear 1; div(phi,epsilon) bounded Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties b/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties deleted file mode 100644 index 3b7dcacf869..00000000000 --- a/tutorials/incompressible/simpleFoam/motorBike/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties new file mode 100644 index 00000000000..f1719c6a001 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/motorBike/constant/turbulenceProperties @@ -0,0 +1,26 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/controlDict b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict index 553c603b445..c7607fc236c 100644 --- a/tutorials/incompressible/simpleFoam/motorBike/system/controlDict +++ b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict @@ -14,13 +14,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libOpenFOAM.so" - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); - application simpleFoam; startFrom latestTime; diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes b/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes index 065507c3f43..cf8155eeaaa 100644 --- a/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/motorBike/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes div(phi,U) bounded Gauss linearUpwindV grad(U); div(phi,k) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/pipeCyclic/constant/RASProperties b/tutorials/incompressible/simpleFoam/pipeCyclic/constant/RASProperties deleted file mode 100644 index 63ed5a5ef8f..00000000000 --- a/tutorials/incompressible/simpleFoam/pipeCyclic/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel realizableKE; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pipeCyclic/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/pipeCyclic/constant/turbulenceProperties index e7fa28c74a5..45b095b5455 100644 --- a/tutorials/incompressible/simpleFoam/pipeCyclic/constant/turbulenceProperties +++ b/tutorials/incompressible/simpleFoam/pipeCyclic/constant/turbulenceProperties @@ -15,6 +15,14 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +RAS +{ + RASModel realizableKE; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict b/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict index da248aeec7b..e43cefc79a5 100644 --- a/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict +++ b/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict @@ -15,13 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libOpenFOAM.so" - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); - application simpleFoam; startFrom startTime; diff --git a/tutorials/incompressible/simpleFoam/pipeCyclic/system/fvSchemes b/tutorials/incompressible/simpleFoam/pipeCyclic/system/fvSchemes index eb56b2a74bd..eff3e37ae4b 100644 --- a/tutorials/incompressible/simpleFoam/pipeCyclic/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/pipeCyclic/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) bounded Gauss limitedLinear 1; div(R) Gauss linear; div(phi,nuTilda) bounded Gauss limitedLinear 1; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/constant/RASProperties b/tutorials/incompressible/simpleFoam/pitzDaily/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/simpleFoam/pitzDaily/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/pitzDaily/constant/turbulenceProperties new file mode 100644 index 00000000000..59a2e7e2073 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/pitzDaily/constant/turbulenceProperties @@ -0,0 +1,28 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDaily/system/fvSchemes b/tutorials/incompressible/simpleFoam/pitzDaily/system/fvSchemes index 821adc7eb93..268cde63e03 100644 --- a/tutorials/incompressible/simpleFoam/pitzDaily/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/pitzDaily/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) bounded Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/RASProperties b/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/turbulenceProperties b/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/turbulenceProperties new file mode 100644 index 00000000000..a9b58dc78e7 --- /dev/null +++ b/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/constant/turbulenceProperties @@ -0,0 +1,27 @@ +/*--------------------------------*- 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 turbulenceProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + +// ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/system/fvSchemes b/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/system/fvSchemes index 821adc7eb93..268cde63e03 100644 --- a/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/pitzDailyExptInlet/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,R) bounded Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/constant/RASProperties b/tutorials/incompressible/simpleFoam/turbineSiting/constant/turbulenceProperties similarity index 58% rename from tutorials/incompressible/simpleFoam/turbineSiting/constant/RASProperties rename to tutorials/incompressible/simpleFoam/turbineSiting/constant/turbulenceProperties index e8f2fd50229..1385aff112b 100644 --- a/tutorials/incompressible/simpleFoam/turbineSiting/constant/RASProperties +++ b/tutorials/incompressible/simpleFoam/turbineSiting/constant/turbulenceProperties @@ -10,26 +10,31 @@ FoamFile version 2.0; format ascii; class dictionary; - object RASProperties; + object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel kEpsilon; +RAS +{ + RASModel kEpsilon; -turbulence on; + turbulence on; -printCoeffs on; + printCoeffs on; -kEpsilonCoeffs -{ - Cmu 0.09; - C1 1.44; - C2 1.92; - sigmaEps 1.11; //Original value:1.44 - //NOTE: See "On the use of the k-Epsilon model in commercial CFD software - // to model the neutral atmospheric boundary layer". J. of wind engineering - // and inductrial aerodymanics 95(2007) 355-269 by - // D.M. Hargreaves and N.G. Wright + kEpsilonCoeffs + { + Cmu 0.09; + C1 1.44; + C2 1.92; + sigmaEps 1.11; //Original value:1.44 + // See: + // D.M. Hargreaves and N.G. Wright + // "On the use of the k-Epsilon model in commercial CFD software + // to model the neutral atmospheric boundary layer", + // J. of wind engineering and industrial aerodymanics, + // 95(2007) 355-269 + } } // ************************************************************************* // diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict b/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict index 1b295b32a3a..f648f3ed70a 100644 --- a/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict +++ b/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict @@ -14,8 +14,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs ("libincompressibleRASModels.so"); - application simpleFoam; startFrom latestTime; @@ -34,7 +32,7 @@ writeInterval 50; purgeWrite 0; -writeFormat binary; //ascii; +writeFormat binary; writePrecision 12; diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/system/fvSchemes b/tutorials/incompressible/simpleFoam/turbineSiting/system/fvSchemes index 492b79ef744..445a2f3bd51 100644 --- a/tutorials/incompressible/simpleFoam/turbineSiting/system/fvSchemes +++ b/tutorials/incompressible/simpleFoam/turbineSiting/system/fvSchemes @@ -27,10 +27,12 @@ gradSchemes divSchemes { default none; + div(phi,U) bounded Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; div(phi,epsilon) bounded Gauss upwind; div(phi,k) bounded Gauss upwind; + + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/mut b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/nut similarity index 95% rename from tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/mut rename to tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/nut index 47d65d567db..7c1a3594d05 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/mut +++ b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/RASProperties b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/turbulenceProperties b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/turbulenceProperties index c2c3b28a1b4..aefe0c27d7a 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/turbulenceProperties +++ b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/constant/turbulenceProperties @@ -17,5 +17,4 @@ FoamFile simulationType laminar; - // ************************************************************************* // diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/system/fvSchemes b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/system/fvSchemes index 73cdf5dcaae..a3d785d3153 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/system/fvSchemes +++ b/tutorials/lagrangian/LTSReactingParcelFoam/counterFlowFlame2D/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,epsilon) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/k b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/k index 2a769368937..098b4a6eb05 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/k +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/k @@ -48,7 +48,7 @@ boundaryField } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/mut b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/nut similarity index 93% rename from tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/mut rename to tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/nut index 7cfeaae133d..41fe074824a 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/mut +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -46,7 +46,7 @@ boundaryField } walls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/omega b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/omega index c1aa352a73f..462084a38f0 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/omega +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/omega @@ -31,14 +31,14 @@ boundaryField } inletCentral { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; } inletSides { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; @@ -50,7 +50,7 @@ boundaryField } walls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/k b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/k index 2a769368937..098b4a6eb05 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/k +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/k @@ -48,7 +48,7 @@ boundaryField } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/mut b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/nut similarity index 93% rename from tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/mut rename to tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/nut index 7cfeaae133d..41fe074824a 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0.org/mut +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -46,7 +46,7 @@ boundaryField } walls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/omega b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/omega index c1aa352a73f..462084a38f0 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/omega +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/omega @@ -31,14 +31,14 @@ boundaryField } inletCentral { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; } inletSides { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; @@ -50,7 +50,7 @@ boundaryField } walls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/RASProperties b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/RASProperties deleted file mode 100644 index 568821b00de..00000000000 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; // kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/turbulenceProperties b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/turbulenceProperties index aaccd5feb0f..89a95c3f03b 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/turbulenceProperties +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/constant/turbulenceProperties @@ -14,7 +14,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/system/fvSchemes b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/system/fvSchemes index 4bef25ebf90..13bfbc31feb 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/system/fvSchemes +++ b/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(phi,omega) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/MPPICFoam/column/constant/RASProperties b/tutorials/lagrangian/MPPICFoam/column/constant/RASProperties deleted file mode 100644 index cc1647b252d..00000000000 --- a/tutorials/lagrangian/MPPICFoam/column/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon index 9fcf588c0c2..5f62ec144f2 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/epsilon @@ -23,17 +23,17 @@ boundaryField { top { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 5390.5; } bottom { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 5390.5; } walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 5390.5; } symmetry diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k index d5f2de2074b..31facc9f6fd 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/k @@ -23,17 +23,17 @@ boundaryField { top { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 37.5; } bottom { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 37.5; } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 37.5; } symmetry diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/mut b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/nut similarity index 86% rename from tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/mut rename to tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/nut index 9622ffefd9d..718743bbcaa 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/mut +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,17 +23,17 @@ boundaryField { top { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } bottom { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } symmetry diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties deleted file mode 100644 index fede44f8c32..00000000000 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs yes; - -// ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties index 3721a46a2ea..c323d93972e 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs yes; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes index 3bcfc65ff8b..dfc51235887 100644 --- a/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes +++ b/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/RASProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/RASProperties deleted file mode 100644 index cc1647b252d..00000000000 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/turbulenceProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/turbulenceProperties index 3721a46a2ea..c2c3b28a1b4 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/turbulenceProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/constant/turbulenceProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/RASProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/RASProperties deleted file mode 100644 index cc1647b252d..00000000000 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/turbulenceProperties b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/turbulenceProperties index 3721a46a2ea..c2c3b28a1b4 100644 --- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/turbulenceProperties +++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/constant/turbulenceProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/fvSchemes b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/fvSchemes index 560f65db18d..f073a5ff5b2 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/epsilon b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/epsilon index b4d9f6fdbd6..e73cabb04b8 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/epsilon +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/epsilon @@ -23,12 +23,12 @@ boundaryField { walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 1e-7; } wallFilm { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 1e-7; } } diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/k b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/k index 9036004c5ad..01d40325b58 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/k +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/k @@ -23,12 +23,12 @@ boundaryField { walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1e-5; } wallFilm { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1e-5; } } diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/mut b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/nut similarity index 88% rename from tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/mut rename to tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/nut index c0cf6eed6cf..e985d6e5f25 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/mut +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 1e-7; @@ -23,12 +23,12 @@ boundaryField { walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } wallFilm { - type mutkFilmWallFunction; + type nutkFilmWallFunction; B 5.5; yPlusCrit 11.05; value uniform 0; diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/RASProperties b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/RASProperties deleted file mode 100644 index 85d8b8af86b..00000000000 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs no; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/turbulenceProperties index fcb13c3557c..eeaaa9205c9 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/turbulenceProperties +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; // laminar; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs no; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/changeDictionaryDict b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/changeDictionaryDict index 9097048a7a6..b7b5130a7e5 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/changeDictionaryDict +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/changeDictionaryDict @@ -46,7 +46,7 @@ dictionaryReplacement } } - "mut" + "nut" { boundaryField { diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/fvSchemes b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/fvSchemes index 906c819b453..cc232dbb081 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/fvSchemes b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/fvSchemes index 7cb27607365..1885c5628c8 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/fvSchemes b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/fvSchemes index 906c819b453..cc232dbb081 100644 --- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/epsilon b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/epsilon index 741efe7ccbb..448a7a08583 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/epsilon +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/epsilon @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.0449; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/k b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/k index 99ad23a21f3..7d79256b2a2 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/k +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/k @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.0938; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/mut b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/nut similarity index 93% rename from tutorials/lagrangian/reactingParcelFoam/filter/0.org/mut rename to tutorials/lagrangian/reactingParcelFoam/filter/0.org/nut index ed047925d49..c0334a14120 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0.org/mut +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "1"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [ 0 2 -1 0 0 0 0 ]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0/epsilon b/tutorials/lagrangian/reactingParcelFoam/filter/0/epsilon index 741efe7ccbb..448a7a08583 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0/epsilon +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0/epsilon @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 0.0449; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0/k b/tutorials/lagrangian/reactingParcelFoam/filter/0/k index 99ad23a21f3..7d79256b2a2 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0/k +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0/k @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0.0938; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/0/mut b/tutorials/lagrangian/reactingParcelFoam/filter/0/nut similarity index 93% rename from tutorials/lagrangian/reactingParcelFoam/filter/0/mut rename to tutorials/lagrangian/reactingParcelFoam/filter/0/nut index ed047925d49..c0334a14120 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/0/mut +++ b/tutorials/lagrangian/reactingParcelFoam/filter/0/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "1"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [ 1 -1 -1 0 0 0 0 ]; +dimensions [ 0 2 -1 0 0 0 0 ]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } inlet diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/RASProperties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/RASProperties deleted file mode 100644 index dffc9c2d5bd..00000000000 --- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFoam/filter/constant/turbulenceProperties index aaccd5feb0f..2939a395ed5 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/constant/turbulenceProperties +++ b/tutorials/lagrangian/reactingParcelFoam/filter/constant/turbulenceProperties @@ -14,7 +14,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/system/changeDictionaryDict b/tutorials/lagrangian/reactingParcelFoam/filter/system/changeDictionaryDict index 217e56ec64c..908f3c60e1f 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/system/changeDictionaryDict +++ b/tutorials/lagrangian/reactingParcelFoam/filter/system/changeDictionaryDict @@ -96,7 +96,7 @@ dictionaryReplacement } } } - mut + nut { boundaryField { diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/filter/system/controlDict index 66667655d7c..51019fc93ef 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/system/controlDict +++ b/tutorials/lagrangian/reactingParcelFoam/filter/system/controlDict @@ -51,12 +51,5 @@ maxCo 1.0; maxDeltaT 1; -libs -( - "libOpenFOAM.so" - "libcompressibleTurbulenceModel.so" - "libcompressibleRASModels.so" - "libradiationModels.so" -); // ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/filter/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/filter/system/fvSchemes index cbdf8c0b4aa..536c43de095 100644 --- a/tutorials/lagrangian/reactingParcelFoam/filter/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFoam/filter/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/system/fvSchemes index e7d730d2f8c..890464255b7 100644 --- a/tutorials/lagrangian/reactingParcelFoam/parcelInBox/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFoam/parcelInBox/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(phi,omega) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/k b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/k index 2a769368937..098b4a6eb05 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/k +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/k @@ -48,7 +48,7 @@ boundaryField } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/mut b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/nut similarity index 93% rename from tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/mut rename to tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/nut index 7cfeaae133d..41fe074824a 100644 --- a/tutorials/lagrangian/LTSReactingParcelFoam/verticalChannel/0/mut +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -46,7 +46,7 @@ boundaryField } walls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/omega b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/omega index c1aa352a73f..462084a38f0 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/omega +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/omega @@ -31,14 +31,14 @@ boundaryField } inletCentral { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; } inletSides { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; @@ -50,7 +50,7 @@ boundaryField } walls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/RASProperties b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/RASProperties deleted file mode 100644 index 568821b00de..00000000000 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; // kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/turbulenceProperties b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/turbulenceProperties index aaccd5feb0f..89a95c3f03b 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/turbulenceProperties +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/constant/turbulenceProperties @@ -14,7 +14,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/system/fvSchemes b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/system/fvSchemes index d3296d43385..fb6d354d17e 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/system/fvSchemes +++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannel/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(phi,omega) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/k b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/k index 2a769368937..098b4a6eb05 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/k +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/k @@ -48,7 +48,7 @@ boundaryField } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/mut b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/nut similarity index 93% rename from tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/mut rename to tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/nut index 7cfeaae133d..41fe074824a 100644 --- a/tutorials/lagrangian/reactingParcelFoam/verticalChannel/0.org/mut +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/nut @@ -11,11 +11,11 @@ FoamFile format ascii; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -46,7 +46,7 @@ boundaryField } walls { - type mutkWallFunction; + type nutkWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/omega b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/omega index c1aa352a73f..462084a38f0 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/omega +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0.org/omega @@ -31,14 +31,14 @@ boundaryField } inletCentral { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; } inletSides { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; @@ -50,7 +50,7 @@ boundaryField } walls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/k b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/k index 2a769368937..098b4a6eb05 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/k +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/k @@ -48,7 +48,7 @@ boundaryField } walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/mut b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/mut deleted file mode 100644 index 7cfeaae133d..00000000000 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/mut +++ /dev/null @@ -1,58 +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 volScalarField; - location "0"; - object mut; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -dimensions [1 -1 -1 0 0 0 0]; - -internalField uniform 0; - -boundaryField -{ - back - { - type symmetryPlane; - } - front - { - type symmetryPlane; - } - inletCentral - { - type calculated; - value uniform 0; - } - inletSides - { - type calculated; - value uniform 0; - } - outlet - { - type calculated; - value uniform 0; - } - walls - { - type mutkWallFunction; - Cmu 0.09; - kappa 0.41; - E 9.8; - value uniform 0; - } -} - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/nut b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/nut new file mode 100644 index 00000000000..41fe074824a --- /dev/null +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/nut @@ -0,0 +1,58 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: dev | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class volScalarField; + location "0"; + object nut; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +dimensions [0 2 -1 0 0 0 0]; + +internalField uniform 0; + +boundaryField +{ + back + { + type symmetryPlane; + } + front + { + type symmetryPlane; + } + inletCentral + { + type calculated; + value uniform 0; + } + inletSides + { + type calculated; + value uniform 0; + } + outlet + { + type calculated; + value uniform 0; + } + walls + { + type nutkWallFunction; + Cmu 0.09; + kappa 0.41; + E 9.8; + value uniform 0; + } +} + + +// ************************************************************************* // diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/omega b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/omega index c1aa352a73f..462084a38f0 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/omega +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/0/omega @@ -31,14 +31,14 @@ boundaryField } inletCentral { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; } inletSides { - type compressible::turbulentMixingLengthFrequencyInlet; + type turbulentMixingLengthFrequencyInlet; mixingLength 0.007; k k; value uniform 4.5e-3; @@ -50,7 +50,7 @@ boundaryField } walls { - type compressible::omegaWallFunction; + type omegaWallFunction; Cmu 0.09; kappa 0.41; E 9.8; diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/RASProperties b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/RASProperties deleted file mode 100644 index 568821b00de..00000000000 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; // kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/turbulenceProperties b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/turbulenceProperties index aaccd5feb0f..87ceaddfd10 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/turbulenceProperties +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/constant/turbulenceProperties @@ -14,7 +14,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; // kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/fvSchemes b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/fvSchemes index d80f5e4e2a5..2091a697594 100644 --- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/fvSchemes +++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(phi,epsilon) bounded Gauss upwind; div(phi,omega) bounded Gauss upwind; div(phi,Yi_h) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/0/epsilon b/tutorials/lagrangian/sprayFoam/aachenBomb/0/epsilon index e38ed02784c..c14d3d7e021 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/0/epsilon +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/0/epsilon @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::epsilonWallFunction; + type epsilonWallFunction; value uniform 90; } } diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/0/k b/tutorials/lagrangian/sprayFoam/aachenBomb/0/k index 6650fed2abf..434499066b6 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/0/k +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/0/k @@ -23,7 +23,7 @@ boundaryField { walls { - type compressible::kqRWallFunction; + type kqRWallFunction; value uniform 1; } } diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/0/mut b/tutorials/lagrangian/sprayFoam/aachenBomb/0/nut similarity index 90% rename from tutorials/lagrangian/sprayFoam/aachenBomb/0/mut rename to tutorials/lagrangian/sprayFoam/aachenBomb/0/nut index ce6dfaf3ee0..455e7463456 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/0/mut +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/0/nut @@ -11,11 +11,11 @@ FoamFile format binary; class volScalarField; location "0"; - object mut; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -dimensions [1 -1 -1 0 0 0 0]; +dimensions [0 2 -1 0 0 0 0]; internalField uniform 0; @@ -23,7 +23,7 @@ boundaryField { walls { - type mutkWallFunction; + type nutkWallFunction; value uniform 0; } } diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/RASProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/RASProperties deleted file mode 100644 index 648ca445386..00000000000 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/RASProperties +++ /dev/null @@ -1,25 +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 binary; - class dictionary; - location "constant"; - object RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/turbulenceProperties b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/turbulenceProperties index 85d799ea5f1..017f5dba9f2 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/constant/turbulenceProperties +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/fvSchemes b/tutorials/lagrangian/sprayFoam/aachenBomb/system/fvSchemes index c4a6d627c3a..d064aca3876 100644 --- a/tutorials/lagrangian/sprayFoam/aachenBomb/system/fvSchemes +++ b/tutorials/lagrangian/sprayFoam/aachenBomb/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(U) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; div(phi,Yi_h) Gauss upwind; } diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/RASProperties b/tutorials/mesh/foamyHexMesh/mixerVessel/constant/RASProperties deleted file mode 100644 index da54fd75a00..00000000000 --- a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs off; - - -// ************************************************************************* // diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/turbulenceProperties b/tutorials/mesh/foamyHexMesh/mixerVessel/constant/turbulenceProperties index e7fa28c74a5..d7309cb8888 100644 --- a/tutorials/mesh/foamyHexMesh/mixerVessel/constant/turbulenceProperties +++ b/tutorials/mesh/foamyHexMesh/mixerVessel/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs off; +} + // ************************************************************************* // diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/system/fvSchemes b/tutorials/mesh/foamyHexMesh/mixerVessel/system/fvSchemes index 6ecda2783ce..59d9365ade1 100644 --- a/tutorials/mesh/foamyHexMesh/mixerVessel/system/fvSchemes +++ b/tutorials/mesh/foamyHexMesh/mixerVessel/system/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(rhoPhi,K) Gauss upwind; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/LTSInterFoam/DTCHull/constant/RASProperties b/tutorials/multiphase/LTSInterFoam/DTCHull/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/multiphase/LTSInterFoam/DTCHull/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/LTSInterFoam/DTCHull/constant/turbulenceProperties b/tutorials/multiphase/LTSInterFoam/DTCHull/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/multiphase/LTSInterFoam/DTCHull/constant/turbulenceProperties +++ b/tutorials/multiphase/LTSInterFoam/DTCHull/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/LTSInterFoam/DTCHull/system/fvSchemes b/tutorials/multiphase/LTSInterFoam/DTCHull/system/fvSchemes index 5dac7138140..66a883a157d 100644 --- a/tutorials/multiphase/LTSInterFoam/DTCHull/system/fvSchemes +++ b/tutorials/multiphase/LTSInterFoam/DTCHull/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss linearUpwind limitedGrad; div(phi,omega) Gauss linearUpwind limitedGrad; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/0/nuSgs b/tutorials/multiphase/cavitatingFoam/les/throttle/0/nut similarity index 98% rename from tutorials/multiphase/cavitatingFoam/les/throttle/0/nuSgs rename to tutorials/multiphase/cavitatingFoam/les/throttle/0/nut index 6d4b26abea7..f56907e7b47 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/0/nuSgs +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/0/nut @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/constant/LESProperties b/tutorials/multiphase/cavitatingFoam/les/throttle/constant/LESProperties deleted file mode 100644 index e6d3db2b5f9..00000000000 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/constant/LESProperties +++ /dev/null @@ -1,84 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta smooth; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/constant/turbulenceProperties b/tutorials/multiphase/cavitatingFoam/les/throttle/constant/turbulenceProperties index a925d3cc2b2..ec7ce02462c 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/constant/turbulenceProperties +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/constant/turbulenceProperties @@ -15,7 +15,79 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta smooth; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle/system/fvSchemes b/tutorials/multiphase/cavitatingFoam/les/throttle/system/fvSchemes index 17346054f62..9072b1b4874 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle/system/fvSchemes +++ b/tutorials/multiphase/cavitatingFoam/les/throttle/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes div(phi,rho) Gauss vanLeer; div(rhoPhi,U) Gauss LUST grad(U); div(phi,k) Gauss LUST grad(k); - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } gradSchemes diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nuSgs b/tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nut similarity index 98% rename from tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nuSgs rename to tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nut index c4d32cf2ff7..f85002726dd 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nuSgs +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/0.org/nut @@ -11,7 +11,7 @@ FoamFile format ascii; class volScalarField; location "0"; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/LESProperties b/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/LESProperties deleted file mode 100644 index e6d3db2b5f9..00000000000 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/LESProperties +++ /dev/null @@ -1,84 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta smooth; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/turbulenceProperties b/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/turbulenceProperties index a925d3cc2b2..ec7ce02462c 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/turbulenceProperties +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/constant/turbulenceProperties @@ -15,7 +15,79 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; + +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta smooth; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/fvSchemes b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/fvSchemes index 64aa6e54b9d..8753ef178c3 100644 --- a/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/fvSchemes +++ b/tutorials/multiphase/cavitatingFoam/les/throttle3D/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,rho) Gauss vanLeer; div(rhoPhi,U) Gauss LUST grad(U); div(phi,k) Gauss LUST grad(k); - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } gradSchemes diff --git a/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/RASProperties b/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/turbulenceProperties b/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/turbulenceProperties +++ b/tutorials/multiphase/cavitatingFoam/ras/throttle/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/cavitatingFoam/ras/throttle/system/fvSchemes b/tutorials/multiphase/cavitatingFoam/ras/throttle/system/fvSchemes index 618d1b4a9c9..0235d8bc0f0 100644 --- a/tutorials/multiphase/cavitatingFoam/ras/throttle/system/fvSchemes +++ b/tutorials/multiphase/cavitatingFoam/ras/throttle/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(rhoPhi,U) Gauss limitedLinearV 1; div(phi,omega) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } gradSchemes diff --git a/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/constant/RASProperties b/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/system/fvSchemes b/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/system/fvSchemes index 045d871d386..c64e1f81078 100644 --- a/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterDyMFoam/ras/sloshingTank2D/system/fvSchemes @@ -37,7 +37,7 @@ divSchemes div(rhoPhi,K) Gauss linear; div((phi+meshPhi),p) Gauss linear; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/LESProperties b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/LESProperties deleted file mode 100644 index b3cfc0ba03a..00000000000 --- a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/LESProperties +++ /dev/null @@ -1,84 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/polyMesh/boundary b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/polyMesh/boundary index 81845d8cb3f..85fa84fac74 100644 --- a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/polyMesh/boundary +++ b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/constant/polyMesh/boundary @@ -20,6 +20,7 @@ FoamFile walls { type wall; + inGroups 1(wall); nFaces 480; startFace 25360; } diff --git a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/system/fvSchemes index 273c37e720d..990fea86e2f 100644 --- a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge2D/system/fvSchemes @@ -38,7 +38,7 @@ divSchemes div(phi,p) Gauss upwind; div(phi,k) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/LESProperties b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/LESProperties deleted file mode 100644 index b3cfc0ba03a..00000000000 --- a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/LESProperties +++ /dev/null @@ -1,84 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/system/fvSchemes b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/system/fvSchemes index 273c37e720d..990fea86e2f 100644 --- a/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/system/fvSchemes +++ b/tutorials/multiphase/compressibleInterFoam/laminar/depthCharge3D/system/fvSchemes @@ -38,7 +38,7 @@ divSchemes div(phi,p) Gauss upwind; div(phi,k) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes b/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes index 0fb6563e2c6..d32c577288f 100644 --- a/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes +++ b/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(rhoPhi,T) Gauss upwind; div(rhoPhi,K) Gauss upwind; div(phi,p) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/RASProperties deleted file mode 100644 index e0e6b776a27..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/turbulenceProperties b/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/turbulenceProperties +++ b/tutorials/multiphase/interDyMFoam/ras/DTCHull/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/DTCHull/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/DTCHull/system/fvSchemes index 84b63931146..44668611dfa 100644 --- a/tutorials/multiphase/interDyMFoam/ras/DTCHull/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/DTCHull/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss linearUpwind limitedGrad; div(phi,omega) Gauss linearUpwind limitedGrad; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/RASProperties deleted file mode 100644 index af7ecd49d2a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs off; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/turbulenceProperties b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/turbulenceProperties index 09c25018c3d..c2c3b28a1b4 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/turbulenceProperties +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/constant/turbulenceProperties @@ -15,7 +15,7 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType laminar; //RASModel; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes index 020384e5e84..06de48abed2 100644 --- a/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/damBreakWithObstacle/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,omega) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/turbulenceProperties b/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/turbulenceProperties index c2021e7271a..cd2daf8229b 100644 --- a/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/turbulenceProperties +++ b/tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} + // ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/floatingObject/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/floatingObject/system/fvSchemes index 88424a730cb..4749335ec9d 100644 --- a/tutorials/multiphase/interDyMFoam/ras/floatingObject/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/floatingObject/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/RASProperties deleted file mode 100644 index da54fd75a00..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs off; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/turbulenceProperties b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/turbulenceProperties index e7fa28c74a5..d7309cb8888 100644 --- a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/turbulenceProperties +++ b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/constant/turbulenceProperties @@ -15,6 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs off; +} + // ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/fvSchemes index bf1d065bcab..59d9365ade1 100644 --- a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/fvSchemes @@ -37,9 +37,7 @@ divSchemes div(rhoPhi,K) Gauss upwind; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev2(T(grad(U))))) Gauss linear; - - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank2D3DoF/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D6DoF/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/constant/RASProperties b/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/constant/RASProperties deleted file mode 100644 index 4773e27a41a..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel laminar; - -turbulence off; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/system/fvSchemes b/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/system/fvSchemes index e9bac3f7107..a956c193826 100644 --- a/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/system/fvSchemes +++ b/tutorials/multiphase/interDyMFoam/ras/testTubeMixer/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss vanLeerV; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss vanLeer; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSchemes index cdfd201c6e3..6f42b083edc 100644 --- a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSchemes +++ b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes index cdd6f1ed153..ba6f492d2ea 100644 --- a/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes +++ b/tutorials/multiphase/interFoam/laminar/damBreak/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss linearUpwind grad(U); div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/fvSchemes b/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/fvSchemes index a90bcae2d34..e4c518a2479 100644 --- a/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/fvSchemes +++ b/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss linear; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nuSgs b/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nut similarity index 98% rename from tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nuSgs rename to tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nut index 95e02c374ea..7b34de6ad32 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nuSgs +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/0/nut @@ -10,7 +10,7 @@ FoamFile version 2.0; format ascii; class volScalarField; - object nuSgs; + object nut; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/LESProperties b/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/LESProperties deleted file mode 100644 index 720e13925e4..00000000000 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/LESProperties +++ /dev/null @@ -1,86 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel oneEqEddy; - -delta smooth; - -printCoeffs on; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -PrandtlCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Cdelta 0.158; -} - -vanDriestCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - smoothCoeffs - { - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; - } - - Aplus 26; - Cdelta 0.158; -} - -smoothCoeffs -{ - delta cubeRootVol; - cubeRootVolCoeffs - { - deltaCoeff 1; - } - - maxDeltaRatio 1.1; -} - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/turbulenceProperties b/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/turbulenceProperties index a925d3cc2b2..b0b4dcee0f3 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/constant/turbulenceProperties @@ -15,7 +15,78 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType LESModel; +simulationType LES; +LES +{ + LESModel kEqn; + + turbulence on; + + printCoeffs on; + + delta smooth; + + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + PrandtlCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Cdelta 0.158; + } + + vanDriestCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } + + Aplus 26; + Cdelta 0.158; + } + + smoothCoeffs + { + delta cubeRootVol; + cubeRootVolCoeffs + { + deltaCoeff 1; + } + + maxDeltaRatio 1.1; + } +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes index 07bd316e0ea..9510ee686d0 100644 --- a/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes +++ b/tutorials/multiphase/interFoam/les/nozzleFlow2D/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phi,B) Gauss limitedLinear 1; div(B) Gauss linear; div(phi,nuTilda) Gauss limitedLinear 1; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/Allclean b/tutorials/multiphase/interFoam/ras/Allclean index 236e233b97e..8b652373baa 100755 --- a/tutorials/multiphase/interFoam/ras/Allclean +++ b/tutorials/multiphase/interFoam/ras/Allclean @@ -4,7 +4,7 @@ cd ${0%/*} || exit 1 # Run from this directory # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions -keepCases="damBreak damBreakPorousBaffle weirOverflow waterChannel" +keepCases="damBreak damBreakPorousBaffle weirOverflow waterChannel angledDuct" loseCases="damBreakFine" for case in $keepCases diff --git a/tutorials/multiphase/interFoam/ras/angledDuct/constant/RASProperties b/tutorials/multiphase/interFoam/ras/angledDuct/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interFoam/ras/angledDuct/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/angledDuct/constant/turbulenceProperties b/tutorials/multiphase/interFoam/ras/angledDuct/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/multiphase/interFoam/ras/angledDuct/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/ras/angledDuct/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/angledDuct/system/fvSchemes b/tutorials/multiphase/interFoam/ras/angledDuct/system/fvSchemes index f44c0bc2a64..749207137df 100644 --- a/tutorials/multiphase/interFoam/ras/angledDuct/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/angledDuct/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/damBreak/constant/RASProperties b/tutorials/multiphase/interFoam/ras/damBreak/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interFoam/ras/damBreak/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/constant/polyMesh/boundary b/tutorials/multiphase/interFoam/ras/damBreak/constant/polyMesh/boundary index 1b4dbb60aae..79ef3a79e11 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/constant/polyMesh/boundary +++ b/tutorials/multiphase/interFoam/ras/damBreak/constant/polyMesh/boundary @@ -20,18 +20,21 @@ FoamFile leftWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4432; } rightWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4482; } lowerWall { type wall; + inGroups 1(wall); nFaces 62; startFace 4532; } diff --git a/tutorials/multiphase/interFoam/ras/damBreak/constant/turbulenceProperties b/tutorials/multiphase/interFoam/ras/damBreak/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/ras/damBreak/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes index 3bc53475986..960ff2562c0 100644 --- a/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/damBreak/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh index 6fe05fbb320..f24e6e1ede3 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/0/p_rgh @@ -59,7 +59,7 @@ boundaryField jump uniform 0; value uniform 0; D 1000; - I 1000; + I 500; length 0.15; } porous_half1 @@ -68,7 +68,7 @@ boundaryField patchType cyclic; value uniform 0; D 1000; - I 1000; + I 500; length 0.15; } } diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/RASProperties b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary index 49282f81f06..45396d40745 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/polyMesh/boundary @@ -20,18 +20,21 @@ FoamFile leftWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4419; } rightWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4469; } lowerWall { type wall; + inGroups 1(wall); nFaces 62; startFace 4519; } @@ -51,7 +54,13 @@ FoamFile porous_half0 { type cyclic; - inGroups 1(cyclic); + inGroups +2 +( +cyclic +cyclicFaces +) +; nFaces 13; startFace 9163; matchTolerance 0.0001; @@ -61,7 +70,13 @@ FoamFile porous_half1 { type cyclic; - inGroups 1(cyclic); + inGroups +2 +( +cyclic +cyclicFaces +) +; nFaces 13; startFace 9176; matchTolerance 0.0001; diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/turbulenceProperties b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/controlDict b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/controlDict index 53bb12ff938..f66e5d7c776 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/controlDict +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/controlDict @@ -52,11 +52,5 @@ maxAlphaCo 0.1; maxDeltaT 1; -libs -( - "libturbulenceDerivedFvPatchFields.so" - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/fvSchemes b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/fvSchemes index 3bc53475986..960ff2562c0 100644 --- a/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/damBreakPorousBaffle/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/waterChannel/LTSInterFoam/system/fvSchemes b/tutorials/multiphase/interFoam/ras/waterChannel/LTSInterFoam/system/fvSchemes index a05ac072d7c..22019100ddb 100644 --- a/tutorials/multiphase/interFoam/ras/waterChannel/LTSInterFoam/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/waterChannel/LTSInterFoam/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phirb,alpha) Gauss linear; div(phi,k) Gauss upwind; div(phi,omega) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/waterChannel/constant/RASProperties b/tutorials/multiphase/interFoam/ras/waterChannel/constant/RASProperties deleted file mode 100644 index 34da39d900e..00000000000 --- a/tutorials/multiphase/interFoam/ras/waterChannel/constant/RASProperties +++ /dev/null @@ -1,24 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kOmegaSST; - -turbulence on; - -printCoeffs on; - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/waterChannel/constant/turbulenceProperties b/tutorials/multiphase/interFoam/ras/waterChannel/constant/turbulenceProperties index 3721a46a2ea..02fa2df1b93 100644 --- a/tutorials/multiphase/interFoam/ras/waterChannel/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/ras/waterChannel/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kOmegaSST; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/waterChannel/system/fvSchemes b/tutorials/multiphase/interFoam/ras/waterChannel/system/fvSchemes index 8774b16c15f..42584c41cb5 100644 --- a/tutorials/multiphase/interFoam/ras/waterChannel/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/waterChannel/system/fvSchemes @@ -34,7 +34,7 @@ divSchemes div(phirb,alpha) Gauss linear; "div\(phi,(k|omega)\)" Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interFoam/ras/weirOverflow/constant/RASProperties b/tutorials/multiphase/interFoam/ras/weirOverflow/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interFoam/ras/weirOverflow/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/weirOverflow/constant/turbulenceProperties b/tutorials/multiphase/interFoam/ras/weirOverflow/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/multiphase/interFoam/ras/weirOverflow/constant/turbulenceProperties +++ b/tutorials/multiphase/interFoam/ras/weirOverflow/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interFoam/ras/weirOverflow/system/fvSchemes b/tutorials/multiphase/interFoam/ras/weirOverflow/system/fvSchemes index 40392f6f90a..ba84fd84f37 100644 --- a/tutorials/multiphase/interFoam/ras/weirOverflow/system/fvSchemes +++ b/tutorials/multiphase/interFoam/ras/weirOverflow/system/fvSchemes @@ -35,7 +35,7 @@ divSchemes div(phi,R) Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSchemes b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSchemes index 31b1e85b563..b0d1f73aac1 100644 --- a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSchemes +++ b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss limitedLinearV 1; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/RASProperties b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/turbulenceProperties b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/turbulenceProperties index 3721a46a2ea..cd2daf8229b 100644 --- a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/turbulenceProperties +++ b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/constant/turbulenceProperties @@ -15,7 +15,16 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -simulationType RASModel; +simulationType RAS; + +RAS +{ + RASModel kEpsilon; + + turbulence on; + + printCoeffs on; +} // ************************************************************************* // diff --git a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/controlDict b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/controlDict index a121b19ddf1..3ff478fa50b 100644 --- a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/controlDict +++ b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/controlDict @@ -15,12 +15,6 @@ FoamFile } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -libs -( - "libincompressibleTurbulenceModel.so" - "libincompressibleRASModels.so" -); - application interPhaseChangeDyMFoam; startFrom startTime; diff --git a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/fvSchemes b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/fvSchemes index 663657c0474..7f42a48fe4f 100644 --- a/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/fvSchemes +++ b/tutorials/multiphase/interPhaseChangeDyMFoam/propeller/system/fvSchemes @@ -36,7 +36,7 @@ divSchemes div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes index 2c2507cfbfb..a61518f6189 100644 --- a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes +++ b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(phi,k) Gauss linearUpwind grad(k); div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } gradSchemes diff --git a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/LESProperties b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/LESProperties deleted file mode 100644 index ec20bc01dc6..00000000000 --- a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/LESProperties +++ /dev/null @@ -1,29 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -printCoeffs on; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -// ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/polyMesh/boundary b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/polyMesh/boundary index bf47f69643c..4564ccc46a6 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/polyMesh/boundary +++ b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/polyMesh/boundary @@ -32,6 +32,7 @@ FoamFile walls { type wall; + inGroups 1(wall); nFaces 150; startFace 3700; } diff --git a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/constant/RASProperties b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/turbulenceProperties similarity index 91% rename from tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/constant/RASProperties rename to tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/turbulenceProperties index 8107da2ca19..c2c3b28a1b4 100644 --- a/tutorials/multiphase/interDyMFoam/ras/sloshingTank3D3DoF/constant/RASProperties +++ b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/constant/turbulenceProperties @@ -11,13 +11,11 @@ FoamFile format ascii; class dictionary; location "constant"; - object RASProperties; + object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel laminar; - -turbulence off; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/LESProperties b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/LESProperties deleted file mode 100644 index ec20bc01dc6..00000000000 --- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/LESProperties +++ /dev/null @@ -1,29 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -printCoeffs on; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -// ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/polyMesh/boundary b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/polyMesh/boundary index 1b4dbb60aae..79ef3a79e11 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/polyMesh/boundary +++ b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/constant/polyMesh/boundary @@ -20,18 +20,21 @@ FoamFile leftWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4432; } rightWall { type wall; + inGroups 1(wall); nFaces 50; startFace 4482; } lowerWall { type wall; + inGroups 1(wall); nFaces 62; startFace 4532; } diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/LESProperties b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/LESProperties deleted file mode 100644 index ec20bc01dc6..00000000000 --- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/LESProperties +++ /dev/null @@ -1,29 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -printCoeffs on; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -// ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/polyMesh/boundary b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/polyMesh/boundary index a477fd3cba1..f1ec545053d 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/polyMesh/boundary +++ b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/constant/polyMesh/boundary @@ -20,18 +20,21 @@ FoamFile leftWall { type wall; + inGroups 1(wall); nFaces 195; startFace 68014; } rightWall { type wall; + inGroups 1(wall); nFaces 195; startFace 68209; } lowerWall { type wall; + inGroups 1(wall); nFaces 206; startFace 68404; } diff --git a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/LESProperties b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/LESProperties deleted file mode 100644 index ec20bc01dc6..00000000000 --- a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/LESProperties +++ /dev/null @@ -1,29 +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 LESProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -LESModel laminar; - -printCoeffs on; - -delta cubeRootVol; - -cubeRootVolCoeffs -{ - deltaCoeff 1; -} - -// ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/polyMesh/boundary b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/polyMesh/boundary index 188a0f0c58b..5c2a6cf99c5 100644 --- a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/polyMesh/boundary +++ b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/polyMesh/boundary @@ -20,12 +20,14 @@ FoamFile rotor { type wall; + inGroups 1(wall); nFaces 192; startFace 5952; } stator { type wall; + inGroups 1(wall); nFaces 192; startFace 6144; } diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomWater/RASProperties b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/turbulenceProperties similarity index 89% rename from tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomWater/RASProperties rename to tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/turbulenceProperties index 09a9a55851d..c2c3b28a1b4 100644 --- a/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater/constant/bottomWater/RASProperties +++ b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/constant/turbulenceProperties @@ -10,15 +10,12 @@ FoamFile version 2.0; format ascii; class dictionary; - object RASProperties; + location "constant"; + object turbulenceProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -RASModel laminar; - -turbulence on; - -printCoeffs on; +simulationType laminar; // ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/RASProperties b/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/RASProperties deleted file mode 100644 index a4937b503a4..00000000000 --- a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/constant/RASProperties +++ /dev/null @@ -1,25 +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 RASProperties; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -RASModel kEpsilon; - -turbulence on; - -printCoeffs on; - - -// ************************************************************************* // diff --git a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/system/fvSchemes b/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/system/fvSchemes index d640b56b899..2234c3afd1c 100644 --- a/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/system/fvSchemes +++ b/tutorials/multiphase/multiphaseInterDyMFoam/laminar/mixerVesselAMI2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss limitedLinearV 1; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes index 69de4bdbcd8..f4c635c895d 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(rhoPhi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSchemes b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSchemes index 69de4bdbcd8..f4c635c895d 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSchemes +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/fvSchemes @@ -32,7 +32,7 @@ divSchemes div(rhoPhi,U) Gauss upwind; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/fvSchemes b/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/fvSchemes index 9f1495f1726..0844c2a1e1e 100644 --- a/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/fvSchemes +++ b/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes div(rhoPhi,U) Gauss limitedLinearV 1; div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/fvSchemes b/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/fvSchemes index 51db9cc4903..a5bdba477d6 100644 --- a/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/fvSchemes +++ b/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/fvSchemes @@ -29,7 +29,7 @@ divSchemes { default none; div(phi,U) Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/fvSchemes b/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/fvSchemes index 9ff435c167a..4f34ad12222 100644 --- a/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/fvSchemes +++ b/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/fvSchemes @@ -31,7 +31,7 @@ divSchemes { default none; div(phi,U) Gauss upwind; - div((nuEff*dev(T(grad(U))))) Gauss linear; + div((nuEff*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes diff --git a/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/fvSchemes b/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/fvSchemes index 84a24f49246..133816f9e5c 100644 --- a/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/fvSchemes +++ b/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/fvSchemes @@ -33,7 +33,7 @@ divSchemes div(rhoPhi,U) Gauss linear; div(phi,alpha) Gauss vanLeer; div(phi,k) Gauss limitedLinear 1; - div((muEff*dev(T(grad(U))))) Gauss linear; + div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } laplacianSchemes -- GitLab