diff --git a/applications/solvers/DNS/DNSSolversDoc.H b/applications/solvers/DNS/DNSSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..307be76cc596653af942b333275334f4540d434b --- /dev/null +++ b/applications/solvers/DNS/DNSSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpDNSSolvers Direct Numerical Simulation solvers +@{ + \ingroup grpSolvers + This group contains Direct Numerical Simulation (DNS) solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/DNS/dnsFoam/dnsFoam.C b/applications/solvers/DNS/dnsFoam/dnsFoam.C index 38c5b7be8f042ec96344564dd73ae7e8b61a14f3..444874c82f963a41e26173ecc7fa6c83444f39ea 100644 --- a/applications/solvers/DNS/dnsFoam/dnsFoam.C +++ b/applications/solvers/DNS/dnsFoam/dnsFoam.C @@ -24,6 +24,9 @@ License Application dnsFoam +Group + grpDNSSolvers + Description Direct numerical simulation solver for boxes of isotropic turbulence diff --git a/applications/solvers/basic/basicSolversDoc.H b/applications/solvers/basic/basicSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..c8bb86db95e29c1c068c6d896a9bf4a8e8082f2f --- /dev/null +++ b/applications/solvers/basic/basicSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpBasicSolvers Basic solvers +@{ + \ingroup grpSolvers + This group contains basic solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/basic/laplacianFoam/laplacianFoam.C b/applications/solvers/basic/laplacianFoam/laplacianFoam.C index 218d91ac447bca7da2114145d2627ccb0baebb99..846a4b00a032e4eb4140af22630e44fa152a26be 100644 --- a/applications/solvers/basic/laplacianFoam/laplacianFoam.C +++ b/applications/solvers/basic/laplacianFoam/laplacianFoam.C @@ -24,8 +24,30 @@ License Application laplacianFoam +Group + grpBasicSolvers + Description - Solves a simple Laplace equation, e.g. for thermal diffusion in a solid. + Laplace equation solver for a scalar quantity. + + \heading Solver details + The solver is applicable to, e.g. for thermal diffusion in a solid. The + equation is given by: + + \f[ + \ddt{T} = \div \left( D_T \grad T \right) + \f] + + Where: + \vartable + T | Scalar field which is solved for, e.g. temperature + D_T | Diffusion coefficient + \endvartable + + \heading Required fields + \plaintable + T | Scalar field which is solved for, e.g. temperature + \endplaintable \*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C b/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C index bef592370055aeaa1ee34286d80cce50f997877e..f98225586fcc4be81aca136a4e17b5dc3c8ed0a2 100644 --- a/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C +++ b/applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C @@ -24,8 +24,32 @@ License Application scalarTransportFoam +Group + grpBasicSolvers + Description - Solves a transport equation for a passive scalar + Passive scalar transport equation solver. + + \heading Solver details + The equation is given by: + + \f[ + \ddt{T} + \div \left(\vec{U} T\right) - \div \left(D_T \grad T \right) + = S_{T} + \f] + + Where: + \vartable + T | Passive scalar + D_T | Diffusion coefficient + S_T | Source + \endvartable + + \heading Required fields + \plaintable + T | Passive scalar + U | Velocity [m/s] + \endplaintable \*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/combustion/PDRFoam/PDRFoam.C b/applications/solvers/combustion/PDRFoam/PDRFoam.C index f2a659ba1e3e32bb0943cb95a4e1fea2ff2375d1..7e2ed0b63e3fd7d91cd73e9146c7a61bc36c8f8f 100644 --- a/applications/solvers/combustion/PDRFoam/PDRFoam.C +++ b/applications/solvers/combustion/PDRFoam/PDRFoam.C @@ -24,6 +24,9 @@ License Application PDRFoam +Group + grpCombustionSolvers + Description Solver for compressible premixed/partially-premixed combustion with turbulence modelling. @@ -54,16 +57,17 @@ Description regions containing blockages which cannot be resolved by the mesh. The fields used by this solver are: - - betav: Volume porosity - Lobs: Average diameter of obstacle in cell (m) - Aw: Obstacle surface area per unit volume (1/m) - CR: Drag tensor (1/m) - CT: Turbulence generation parameter (1/m) - Nv: Number of obstacles in cell per unit volume (m^-2) - nsv: Tensor whose diagonal indicates the number to substract from - Nv to get the number of obstacles crossing the flow in each - direction. + \plaintable + betav | Volume porosity + Lobs | Average diameter of obstacle in cell (m) + Aw | Obstacle surface area per unit volume (1/m) + CR | Drag tensor (1/m) + CT | Turbulence generation parameter (1/m) + Nv | Number of obstacles in cell per unit volume (m^-2) + nsv | Tensor whose diagonal indicates the number to substract from + | Nv to get the number of obstacles crossing the flow in each + | direction. + \endplaintable \*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C b/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C index 0fa0f9618a4dac9c6c73c4caa245deb20f05efdd..0f6f2976f10617b34c652d09a11235975757991d 100644 --- a/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C +++ b/applications/solvers/combustion/XiFoam/XiDyMFoam/XiDyMFoam.C @@ -24,6 +24,9 @@ License Application XiFoam +Group + grpCombustionSolvers grpMovingMeshSolvers + Description Solver for compressible premixed/partially-premixed combustion with turbulence modelling. diff --git a/applications/solvers/combustion/XiFoam/XiFoam.C b/applications/solvers/combustion/XiFoam/XiFoam.C index 0b90884ad10c0391bdb5640a309ed84f7bd1cd32..a336810139a964da9a10cc7aabed66b826c48033 100644 --- a/applications/solvers/combustion/XiFoam/XiFoam.C +++ b/applications/solvers/combustion/XiFoam/XiFoam.C @@ -24,6 +24,9 @@ License Application XiFoam +Group + grpCombustionSolvers + Description Solver for compressible premixed/partially-premixed combustion with turbulence modelling. diff --git a/applications/solvers/combustion/chemFoam/chemFoam.C b/applications/solvers/combustion/chemFoam/chemFoam.C index 7a3f5e0b84552ce621435ffae800ce38f78d4999..388234b67455e7c92f14841164ea95179f6020b1 100644 --- a/applications/solvers/combustion/chemFoam/chemFoam.C +++ b/applications/solvers/combustion/chemFoam/chemFoam.C @@ -24,6 +24,9 @@ License Application chemFoam +Group + grpCombustionSolvers + Description Solver for chemistry problems - designed for use on single cell cases to provide comparison against diff --git a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C index 654c59f1bc12026814f6a885e020fcd9986dbded..14e35856f3847d5602dd144538c71777f68ec6af 100644 --- a/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C +++ b/applications/solvers/combustion/coldEngineFoam/coldEngineFoam.C @@ -22,7 +22,10 @@ License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Application - engineFoam + coldEngineFoam + +Group + grpCombustionSolvers grpMovingMeshSolvers Description Solver for cold-flow in internal combustion engines. diff --git a/applications/solvers/combustion/combustionSolversDoc.H b/applications/solvers/combustion/combustionSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..bc68bdb7fefd4607ace55689d24a3e87ef412d70 --- /dev/null +++ b/applications/solvers/combustion/combustionSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpCombustionSolvers Combustion solvers +@{ + \ingroup grpSolvers + This group contains combustion solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/combustion/engineFoam/engineFoam.C b/applications/solvers/combustion/engineFoam/engineFoam.C index f72e111a2a66bf09b3ae6a9e919960f24598d51f..a13df4cea3aeb3ad95116b76ca074b2c1e5bbe39 100644 --- a/applications/solvers/combustion/engineFoam/engineFoam.C +++ b/applications/solvers/combustion/engineFoam/engineFoam.C @@ -24,6 +24,9 @@ License Application engineFoam +Group + grpCombustionSolvers + Description Solver for internal combustion engines. diff --git a/applications/solvers/combustion/fireFoam/fireFoam.C b/applications/solvers/combustion/fireFoam/fireFoam.C index 34e97b634e382f3ddb62536a0cac87902dedffbe..4d8c59a297e6b31a185afe78d16f85fd38fdf3b7 100644 --- a/applications/solvers/combustion/fireFoam/fireFoam.C +++ b/applications/solvers/combustion/fireFoam/fireFoam.C @@ -24,8 +24,11 @@ License Application fireFoam +Group + grpCombustionSolvers + Description - Transient PIMPLE solver for Fires and turbulent diffusion flames with + Transient PIMPLE solver for fires and turbulent diffusion flames with reacting Lagrangian parcels, surface film and pyrolysis modelling. \*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/combustion/reactingFoam/reactingFoam.C b/applications/solvers/combustion/reactingFoam/reactingFoam.C index 34e4265fc4b04dd1b5873d739c4c6b650eea668f..dab20b2ed6c1d4d9063651201f395c5fb668752c 100644 --- a/applications/solvers/combustion/reactingFoam/reactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/reactingFoam.C @@ -24,6 +24,9 @@ License Application reactingFoam +Group + grpCombustionSolvers + Description Solver for combustion with chemical reactions. diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C index 11c028d166cfe030703142630725f926f5588e57..63b7b8a61ff0c8a5b7ec9ba42045f0e9a1499263 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C +++ b/applications/solvers/combustion/reactingFoam/rhoReactingBuoyantFoam/rhoReactingBuoyantFoam.C @@ -24,6 +24,9 @@ License Application rhoReactingBuoyantFoam +Group + grpCombustionSolvers + Description Solver for combustion with chemical reactions using density based thermodynamics package, using enahanced buoyancy treatment. diff --git a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C index 3db03fc454a5ba833379aac06fd2378475b35bb4..610bf3a136ea7eca973626d4f77168a456553f92 100644 --- a/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C +++ b/applications/solvers/combustion/reactingFoam/rhoReactingFoam/rhoReactingFoam.C @@ -24,6 +24,9 @@ License Application rhoReactingFoam +Group + grpCombustionSolvers + Description Solver for combustion with chemical reactions using density based thermodynamics package. diff --git a/applications/solvers/compressible/compressibleSolvers.H b/applications/solvers/compressible/compressibleSolvers.H new file mode 100644 index 0000000000000000000000000000000000000000..85ab71f517723fc670ef20b0fd0b6bc64ef5f43c --- /dev/null +++ b/applications/solvers/compressible/compressibleSolvers.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpCompressibleSolvers Compressible flow solvers +@{ + \ingroup grpSolvers + This group contains compressible flow solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C index 922aa72a95c13a926aa24e6a35acc204fe6b45f6..dea76502f1bf5f1a6ce539c84b97a2bb32314238 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralDyMFoam/rhoCentralDyMFoam.C @@ -24,6 +24,9 @@ License Application rhoCentralDyMFoam +Group + grpCompressibleSolvers grpMovingMeshSolvers + Description Density-based compressible flow solver based on central-upwind schemes of Kurganov and Tadmor with support for mesh-motion and topology changes diff --git a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C index 7b85b5b11bdc8730e262a6c02cb39a7156e32565..1b71f42b94493a121f92f4c8447530e20811b52e 100644 --- a/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C +++ b/applications/solvers/compressible/rhoCentralFoam/rhoCentralFoam.C @@ -24,6 +24,9 @@ License Application rhoCentralFoam +Group + grpCompressibleSolvers + Description Density-based compressible flow solver based on central-upwind schemes of Kurganov and Tadmor diff --git a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C index dd05b57895742ac732f5152ef34de5c0a6f7ffdd..0ff153263fb498d4c9acd14bfbe2375949af778f 100644 --- a/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C +++ b/applications/solvers/compressible/rhoPimpleFoam/rhoPimpleFoam.C @@ -24,6 +24,9 @@ License Application rhoPimpleFoam +Group + grpCompressibleSolvers + Description Transient solver for laminar or turbulent flow of compressible fluids for HVAC and similar applications. diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C index 38ed77a2bd8320e7085139a4fdb776b8a6af7499..bc9b2d67cd065589f4d617298b8f29eaa33dff49 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoPorousSimpleFoam/rhoPorousSimpleFoam.C @@ -24,6 +24,9 @@ License Application rhoPorousSimpleFoam +Group + grpCompressibleSolvers + Description Steady-state solver for turbulent flow of compressible fluids with RANS turbulence modelling, implicit or explicit porosity treatment diff --git a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C index fc4dc8cee8a352c7b1e52b8727e644fb04b61521..07a4ca7d0fd0dae42ddb90bdf22843a9a6dbc798 100644 --- a/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C +++ b/applications/solvers/compressible/rhoSimpleFoam/rhoSimpleFoam.C @@ -24,6 +24,9 @@ License Application rhoSimpleFoam +Group + grpCompressibleSolvers + Description Steady-state SIMPLE solver for laminar or turbulent RANS flow of compressible fluids. diff --git a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C index c60a331b2d6e117c8873cf74765c6c4bdbb7cf9a..9fda46121184c6ce8e700a8cf5ea17c7e8a38f45 100644 --- a/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C +++ b/applications/solvers/compressible/sonicFoam/sonicLiquidFoam/sonicLiquidFoam.C @@ -21,6 +21,9 @@ License You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. +Group + grpCompressibleSolvers + Application sonicLiquidFoam diff --git a/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H b/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..06c67407aa7fe91c57c12576c0516314bb408b45 --- /dev/null +++ b/applications/solvers/discreteMethods/discreteMethodsSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpDiscreteMethodsSolvers Discrete method solvers +@{ + \ingroup grpSolvers + This group contains discrete method solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C index a5e0562155e53c2d9dcc92b5169dae7fc4831e82..edf3691fb4075fea8fd4a2275b369d680268f3a3 100644 --- a/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C +++ b/applications/solvers/discreteMethods/dsmc/dsmcFoam/dsmcFoam.C @@ -24,6 +24,9 @@ License Application dsmcFoam +Group + grpDiscreteMethodsSolvers + Description Direct simulation Monte Carlo (DSMC) solver for 3D, transient, multi- species flows diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C index 50c7f66085a36bc32ce72e1933a3c60a17ab4734..fa2b04f563b124fc4430d039eb4cb954ac9c2251 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdEquilibrationFoam/mdEquilibrationFoam.C @@ -24,6 +24,9 @@ License Application mdEquilibrationFoam +Group + grpDiscreteMethodsSolvers + Description Equilibrates and/or preconditions molecular dynamics systems diff --git a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C index 68f6530c95f08e3b4f3624b37d7abfb503f490da..f06436c603f4f9163477cebae6cb183a72392765 100644 --- a/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C +++ b/applications/solvers/discreteMethods/molecularDynamics/mdFoam/mdFoam.C @@ -24,6 +24,9 @@ License Application mdFoam +Group + grpDiscreteMethodsSolvers + Description Molecular dynamics solver for fluid dynamics diff --git a/applications/solvers/doc/solver.dox b/applications/solvers/doc/solver.dox new file mode 100644 index 0000000000000000000000000000000000000000..4c829de1624d52d0307283a1009276b5dacc06b3 --- /dev/null +++ b/applications/solvers/doc/solver.dox @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +\page pageSolvers Solvers + +\section secSolvers Overview +The available solvers are grouped into the following categories: + - \ref grpBasicSolvers + - \ref grpCombustionSolvers + - \ref grpCompressibleSolvers + - \ref grpDiscreteMethodsSolvers + - \ref grpDNSSolvers + - \ref grpElectroMagneticsSolvers + - \ref grpFinancialSolvers + - \ref grpHeatTransferSolvers + - \ref grpIncompressibleSolvers + - \ref grpLagrangianSolvers + - \ref grpMultiphaseSolvers + - \ref grpStressAnalysisSolvers + + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/doc/solversDoc.H b/applications/solvers/doc/solversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..da58bc0ce33e8431dec1105e7c61bdeb62bbc3da --- /dev/null +++ b/applications/solvers/doc/solversDoc.H @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +\defgroup grpSolvers Solvers +@{ + This group contains solvers +@} + +\defgroup grpMovingMeshSolvers Moving mesh solvers +@{ + \ingroup grpSolvers + This group contains moving mesh solvers solvers +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/electromagnetics/electromagneticsSolversDoc.H b/applications/solvers/electromagnetics/electromagneticsSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..773733f5bb3581a55628764a721116bd1b6ec747 --- /dev/null +++ b/applications/solvers/electromagnetics/electromagneticsSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpElectroMagneticsSolvers Electro-magnetics solvers +@{ + \ingroup grpSolvers + This group contains electro-magnetics solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C index 94cd1f0ca76d1b282f6e445c556bb2565d076f70..5c4a248df0a6f389351b0956feb56fbb7ff2e035 100644 --- a/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C +++ b/applications/solvers/electromagnetics/electrostaticFoam/electrostaticFoam.C @@ -24,6 +24,9 @@ License Application electrostaticFoam +Group + grpElectroMagneticsSolvers + Description Solver for electrostatics. diff --git a/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C b/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C index 1b7d4f4f948bee2a542e6162a0097f67bb5a0c64..6613d2f206ef088ebb14326de703adbe665d7d80 100644 --- a/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C +++ b/applications/solvers/electromagnetics/magneticFoam/magneticFoam.C @@ -24,6 +24,9 @@ License Application magneticFoam +Group + grpElectroMagneticsSolvers + Description Solver for the magnetic field generated by permanent magnets. diff --git a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C index c9cb0242bd1393b17b1b7787ca9354e9a3d31be2..497e977e85a1bd60f1bd5ccd5cc16d5a58616c01 100644 --- a/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C +++ b/applications/solvers/electromagnetics/mhdFoam/mhdFoam.C @@ -24,6 +24,9 @@ License Application mhdFoam +Group + grpElectroMagneticsSolvers + Description Solver for magnetohydrodynamics (MHD): incompressible, laminar flow of a conducting fluid under the influence of a magnetic field. diff --git a/applications/solvers/financial/financialFoam/financialFoam.C b/applications/solvers/financial/financialFoam/financialFoam.C index 16640d7ce7ed614dff3c54fa757e66facc89ac2c..2c912c7b93c58c0d380f23243922538760d22536 100644 --- a/applications/solvers/financial/financialFoam/financialFoam.C +++ b/applications/solvers/financial/financialFoam/financialFoam.C @@ -24,6 +24,9 @@ License Application financialFoam +Group + grpFinancialSolvers + Description Solves the Black-Scholes equation to price commodities. diff --git a/applications/solvers/financial/financialSolversDoc.H b/applications/solvers/financial/financialSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..02197d5e375bffdb67431385bdafafb1d9b40f50 --- /dev/null +++ b/applications/solvers/financial/financialSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpFinancialSolvers Financial solvers +@{ + \ingroup grpSolvers + This group contains financial solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C index cead654669b9bed65db65d4fb4eee44daa477098..bc348b840e704f619ab162832a1c5af02983d35c 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqPimpleFoam/buoyantBoussinesqPimpleFoam.C @@ -24,6 +24,9 @@ License Application buoyantBoussinesqPimpleFoam +Group + grpHeatTransferSolvers + Description Transient solver for buoyant, turbulent flow of incompressible fluids diff --git a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C index 35b49c8b8b25702bf1075b78f0f74d5b44202eb8..8547f274fa52cb1786f66adf43e3b1e6265f689a 100644 --- a/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantBoussinesqSimpleFoam/buoyantBoussinesqSimpleFoam.C @@ -24,6 +24,9 @@ License Application buoyantBoussinesqSimpleFoam +Group + grpHeatTransferSolvers + Description Steady-state solver for buoyant, turbulent flow of incompressible fluids diff --git a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C index d683e8fbeb2ab40ea70501973c15905b849596c8..5437e7f6259775b787fcc4ebeb8955a9aaaeea29 100644 --- a/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantPimpleFoam/buoyantPimpleFoam.C @@ -24,6 +24,9 @@ License Application buoyantPimpleFoam +Group + grpHeatTransferSolvers + Description Transient solver for buoyant, turbulent flow of compressible fluids for ventilation and heat-transfer. diff --git a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C index 21a9ed95255aa919d45e9f7d12edb3d1f9ca76cc..6aa339f56eab22a5588d386b15313a6636c24adc 100644 --- a/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C +++ b/applications/solvers/heatTransfer/buoyantSimpleFoam/buoyantSimpleFoam.C @@ -24,6 +24,9 @@ License Application buoyantSimpleFoam +Group + grpHeatTransferSolvers + Description Steady-state solver for buoyant, turbulent flow of compressible fluids, including radiation, for ventilation and heat-transfer. diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index ec0532c11bb3c1b6e71f998d9f3a9bb00526a000..620d60cf64626f302643a57d21273ac2c1a5a9c3 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -24,6 +24,9 @@ License Application chtMultiRegionFoam +Group + grpHeatTransferSolvers + Description Combination of heatConductionFoam and buoyantFoam for conjugate heat transfer between solid regions and fluid regions. Both regions include diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index 625737aed17f3f66cef445cde2da2c23879cfa5b..263dae535e2bdb96defd7314cce5569449cbb2de 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -24,6 +24,9 @@ License Application chtMultiRegionSimpleFoam +Group + grpHeatTransferSolvers + Description Steady-state version of chtMultiRegionFoam diff --git a/applications/solvers/heatTransfer/heatTransferSolversDoc.H b/applications/solvers/heatTransfer/heatTransferSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..e85a79b97ce42159aff572a42297b68afd462446 --- /dev/null +++ b/applications/solvers/heatTransfer/heatTransferSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpHeatTransferSolvers Heat transfer solvers +@{ + \ingroup grpSolvers + This group contains heat transfer solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C index a3687213df6556d596a1fa4965e82cc579e7d7bf..a9f906e84cf89b3f72efb5b33ce89a61f6ea8587 100644 --- a/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C +++ b/applications/solvers/heatTransfer/thermoFoam/thermoFoam.C @@ -24,6 +24,9 @@ License Application thermoFoam +Group + grpHeatTransferSolvers + Description Evolves the thermodynamics on a frozen flow field diff --git a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C index baf2518aa15cf924f08bb4d99553a67664b3fe10..74fcec0eb3950a48c53229a59aa6ce07878dcaee 100644 --- a/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C +++ b/applications/solvers/incompressible/adjointShapeOptimizationFoam/adjointShapeOptimizationFoam.C @@ -24,6 +24,9 @@ License Application ajointShapeOptimizationFoam +Group + grpIncompressibleSolvers + Description Steady-state solver for incompressible, turbulent flow of non-Newtonian fluids with optimisation of duct shape by applying "blockage" in regions diff --git a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C index ff72dd93ddf5afb31d9d0fdab3dd472379fa6ea9..fd5f26403aae20739feacc59587e23512384912b 100644 --- a/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C +++ b/applications/solvers/incompressible/boundaryFoam/boundaryFoam.C @@ -24,6 +24,9 @@ License Application boundaryFoam +Group + grpIncompressibleSolvers + Description Steady-state solver for incompressible, 1D turbulent flow, typically to generate boundary layer conditions at an inlet, for use in a simulation. diff --git a/applications/solvers/incompressible/icoFoam/icoFoam.C b/applications/solvers/incompressible/icoFoam/icoFoam.C index 80e13faa8df406eb1ecb7ac1ad9919b6d43f3904..a7d0da4a8a2f5ba4731a2ac8cf2cae05e144efca 100644 --- a/applications/solvers/incompressible/icoFoam/icoFoam.C +++ b/applications/solvers/incompressible/icoFoam/icoFoam.C @@ -24,9 +24,40 @@ License Application icoFoam +Group + grpIncompressibleSolvers + Description Transient solver for incompressible, laminar flow of Newtonian fluids. + \heading Solver details + The solver uses the PISO algorithm to solve the continuity equation: + + \f[ + \div \vec{U} = 0 + \f] + + and momentum equation: + + \f[ + \ddt{\vec{U}} + + \div \left( \vec{U} \vec{U} \right) + - \div \left(\nu \grad \vec{U} \right) + = - \grad p + \f] + + Where: + \vartable + \vec{U} | Velocity + p | Pressure + \endvartable + + \heading Required fields + \plaintable + U | Velocity [m/s] + p | Kinematic pressure, p/rho [m2/s2] + \endplaintable + \*---------------------------------------------------------------------------*/ #include "fvCFD.H" diff --git a/applications/solvers/incompressible/incompressibleSolversDoc.H b/applications/solvers/incompressible/incompressibleSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..1ae50df0346eed555ae6cfe2e8d3961e9d08945a --- /dev/null +++ b/applications/solvers/incompressible/incompressibleSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpIncompressibleSolvers Incompressible flow solvers +@{ + \ingroup grpSolvers + This group contains incompressible flow solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C index 9d3b567d3bffb4221d1fc3e979053d1a13264dc5..e1153a2772a855fa572340e5cd23f56e3af03161 100644 --- a/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C +++ b/applications/solvers/incompressible/nonNewtonianIcoFoam/nonNewtonianIcoFoam.C @@ -24,6 +24,9 @@ License Application nonNewtonianIcoFoam +Group + grpIncompressibleSolvers + Description Transient solver for incompressible, laminar flow of non-Newtonian fluids. diff --git a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C index 94d7657b255278d4b91eb873692702e89f53412b..f31dace8fe934e7889d3f05e360c641aa85cad80 100644 --- a/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/SRFPimpleFoam/SRFPimpleFoam.C @@ -24,6 +24,9 @@ License Application SRFPimpleFoam +Group + grpIncompressibleSolvers + Description Large time-step transient solver for incompressible, flow in a single rotating frame using the PIMPLE (merged PISO-SIMPLE) algorithm. diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C index 54c94d9c7223d3e0abf29a59a5c0968014dced60..deb266dd3d0553a71eadb731b5b8c20dd4b28ef7 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/pimpleDyMFoam/pimpleDyMFoam.C @@ -24,6 +24,9 @@ License Application pimpleDyMFoam.C +Group + grpIncompressibleSolvers grpMovingMeshSolvers + Description Transient solver for incompressible, flow of Newtonian fluids on a moving mesh using the PIMPLE (merged PISO-SIMPLE) algorithm. diff --git a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C index feeeaa000edf195ce4af69b65a92143b62926a5e..5a56b2b0ef0b04b58bc2edf59edcfcac47c1ea72 100644 --- a/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C +++ b/applications/solvers/incompressible/pimpleFoam/pimpleFoam.C @@ -24,14 +24,47 @@ License Application pimpleFoam +Group + grpIncompressibleSolvers + Description Large time-step transient solver for incompressible, flow using the PIMPLE (merged PISO-SIMPLE) algorithm. + \heading Solver details + The solver uses the PIMPLE (merged PISO-SIMPLE) algorithm to solve the + continuity equation: + + \f[ + \div \vec{U} = 0 + \f] + + and momentum equation: + + \f[ + \ddt{\vec{U}} + \div \left( \vec{U} \vec{U} \right) - \div \gvec{R} + = - \grad p + \vec{S}_U + \f] + + Where: + \vartable + \vec{U} | Velocity + p | Pressure + \vec{R} | Stress tensor + \vec{S}_U | Momentum source + \endvartable + Sub-models include: - turbulence modelling, i.e. laminar, RAS or LES - run-time selectable MRF and finite volume options, e.g. explicit porosity + \heading Required fields + \plaintable + U | Velocity [m/s] + p | Kinematic pressure, p/rho [m2/s2] + \<turbulence fields\> | As required by user selection + \endplaintable + \*---------------------------------------------------------------------------*/ #include "fvCFD.H" diff --git a/applications/solvers/incompressible/pisoFoam/pisoFoam.C b/applications/solvers/incompressible/pisoFoam/pisoFoam.C index 7d18261528ee1bf6c373a961c48ea7a9d53cbd6b..24e99aba739a386c5829e7a49aab5f261af34765 100644 --- a/applications/solvers/incompressible/pisoFoam/pisoFoam.C +++ b/applications/solvers/incompressible/pisoFoam/pisoFoam.C @@ -24,13 +24,44 @@ License Application pisoFoam +Group + grpIncompressibleSolvers + Description Transient solver for incompressible flow. + \heading Solver details + The solver uses the PISO algorithm to solve the continuity equation: + + \f[ + \div \vec{U} = 0 + \f] + + and momentum equation: + + \f[ + \ddt{\vec{U}} + \div \left( \vec{U} \vec{U} \right) - \div \gvec{R} + = - \grad p + \f] + + Where: + \vartable + \vec{U} | Velocity + p | Pressure + \vec{R} | Stress tensor + \endvartable + Sub-models include: - turbulence modelling, i.e. laminar, RAS or LES - run-time selectable MRF and finite volume options, e.g. explicit porosity + \heading Required fields + \plaintable + U | Velocity [m/s] + p | Kinematic pressure, p/rho [m2/s2] + \<turbulence fields\> | As required by user selection + \endplaintable + \*---------------------------------------------------------------------------*/ #include "fvCFD.H" diff --git a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C index 47ec8ac9f63448dd1844c5db6311776cba23a95a..e7693a073edd0f184f3c347e653f7b40a295fd6b 100644 --- a/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C +++ b/applications/solvers/incompressible/shallowWaterFoam/shallowWaterFoam.C @@ -24,6 +24,9 @@ License Application shallowWaterFoam +Group + grpIncompressibleSolvers + Description Transient solver for inviscid shallow-water equations with rotation. diff --git a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C index 89e54c378397153e4a267affcb59296e3c779055..ea791c8868a0f567628dbbe3190037cf7fa3aca5 100644 --- a/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/SRFSimpleFoam/SRFSimpleFoam.C @@ -24,6 +24,9 @@ License Application SRFSimpleFoam +Group + grpIncompressibleSolvers + Description Steady-state solver for incompressible, turbulent flow of non-Newtonian fluids in a single rotating frame. diff --git a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C index cfb93bd92b6511a10ea08173c2cf8cbb2151bae8..8010a7325ea0712ed9c362f58e94fa7eaf226734 100644 --- a/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/porousSimpleFoam/porousSimpleFoam.C @@ -24,6 +24,9 @@ License Application porousSimpleFoam +Group + grpIncompressibleSolvers + Description Steady-state solver for incompressible, turbulent flow with implicit or explicit porosity treatment and support for multiple reference diff --git a/applications/solvers/incompressible/simpleFoam/simpleFoam.C b/applications/solvers/incompressible/simpleFoam/simpleFoam.C index f2fc0e8e6edabd63f8b1df28bb70676973ff4f66..1b84b48f7b56469964be5ba14bebb43234a012cd 100644 --- a/applications/solvers/incompressible/simpleFoam/simpleFoam.C +++ b/applications/solvers/incompressible/simpleFoam/simpleFoam.C @@ -24,8 +24,40 @@ License Application simpleFoam +Group + grpIncompressibleSolvers + Description - Steady-state solver for incompressible, turbulent flow + Steady-state solver for incompressible flows with turbulence modelling. + + \heading Solver details + The solver uses the SIMPLE algorithm to solve the continuity equation: + + \f[ + \div \vec{U} = 0 + \f] + + and momentum equation: + + \f[ + \div \left( \vec{U} \vec{U} \right) - \div \gvec{R} + = - \grad p + \vec{S}_U + \f] + + Where: + \vartable + \vec{U} | Velocity + p | Pressure + \vec{R} | Stress tensor + \vec{S}_U | Momentum source + \endvartable + + \heading Required fields + \plaintable + U | Velocity [m/s] + p | Kinematic pressure, p/rho [m2/s2] + \<turbulence fields\> | As required by user selection + \endplaintable \*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C index 8999e03663d6e72a5995b25c07802faac561194e..22c16b4c80e4c88ed8aa0abc21b2b5c346fc5c30 100644 --- a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C +++ b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C @@ -24,6 +24,9 @@ License Application DPMFoam +Group + grpLagrangianSolvers + Description Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the diff --git a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C index 69048cf5a6feffbe10dbe7d94bd2baa658921dbc..4bb369f11b4d110580b059dfca2477d6d4437cc7 100644 --- a/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C +++ b/applications/solvers/lagrangian/DPMFoam/MPPICFoam/MPPICFoam.C @@ -24,6 +24,9 @@ License Application MPPICFoam +Group + grpLagrangianSolvers + Description Transient solver for the coupled transport of a single kinematic particle cloud including the effect of the volume fraction of particles on the diff --git a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C index 7a67cb8cf2d8b65760870d348c4236cdefed1b75..198b3c2a438a4631152790eeecb51a2182847c6b 100644 --- a/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C +++ b/applications/solvers/lagrangian/coalChemistryFoam/coalChemistryFoam.C @@ -24,6 +24,9 @@ License Application coalChemistryFoam +Group + grpLagrangianSolvers + Description Transient solver for: - compressible, diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C index b355148a94c14d78df0c69978a44a063f401a2bf..0110832f2d7083a3430d60d1cfb083758f7456c1 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelDyMFoam/icoUncoupledKinematicParcelDyMFoam.C @@ -24,6 +24,9 @@ License Application uncoupledKinematicParcelDyMFoam +Group + grpLagrangianSolvers grpMovingMeshSolvers + Description Transient solver for the passive transport of a single kinematic particle cloud. diff --git a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C index befcb57d02b84a929d17a1dc8ec30d724c6f4aed..42273c1be5be07a2b4a825cd30aa213396098bf7 100644 --- a/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/icoUncoupledKinematicParcelFoam/icoUncoupledKinematicParcelFoam.C @@ -24,6 +24,9 @@ License Application icoUncoupledKinematicParcelFoam +Group + grpLagrangianSolvers + Description Transient solver for the passive transport of a single kinematic particle cloud. diff --git a/applications/solvers/lagrangian/lagrangianSolversDoc.H b/applications/solvers/lagrangian/lagrangianSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..7eb88c4f3f94c391477b046da142de683e9b89e7 --- /dev/null +++ b/applications/solvers/lagrangian/lagrangianSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpLagrangianSolvers Lagrangian solvers +@{ + \ingroup grpSolvers + This group contains Lagrangian solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C index 220e2f28a846b97bda0e50bfca6438c5d63f68c6..8014596ae6d796e5712977d5129be9ada9e8c883 100644 --- a/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFilmFoam/reactingParcelFilmFoam.C @@ -24,6 +24,9 @@ License Application reactingParcelFilmFoam +Group + grpLagrangianSolvers + Description Transient PIMPLE solver for compressible, laminar or turbulent flow with reacting Lagrangian parcels, and surface film modelling. diff --git a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C index 46a8e0ab93d4672401329880c15f9a2f77d3edda..3b078b4f75d081a80a2deaace7054362208b1829 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/reactingParcelFoam.C @@ -24,6 +24,9 @@ License Application reactingParcelFoam +Group + grpLagrangianSolvers + Description Transient PIMPLE solver for compressible, laminar or turbulent flow with reacting multiphase Lagrangian parcels, including run-time selectable diff --git a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C index a74cbabe6cf41f7cb01fe962b70fc7f2f10fafda..a04bc4aa5ec137b98afc06ce493bc0b5d3b0241f 100644 --- a/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C +++ b/applications/solvers/lagrangian/reactingParcelFoam/simpleReactingParcelFoam/simpleReactingParcelFoam.C @@ -24,6 +24,9 @@ License Application simpleReactingParcelFoam +Group + grpLagrangianSolvers + Description Steady state SIMPLE solver for compressible, laminar or turbulent flow with reacting multiphase Lagrangian parcels, including run-time selectable diff --git a/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C index 0f19b4ecf18c13bd474efd59aa9a05cd6732548a..ff36ee4c4809c6b15d79292c109a8ff03b7aaa09 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C +++ b/applications/solvers/lagrangian/sprayFoam/sprayDyMFoam/sprayDyMFoam.C @@ -24,6 +24,9 @@ License Application sprayDyMFoam +Group + grpLagrangianSolvers grpMovingMeshSolvers + Description Transient PIMPLE solver for compressible, laminar or turbulent flow with spray parcels and support for moving meshes. diff --git a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C index 5b6a75993a0e6d0c1c9635579adbd08c560d1a58..7d2b3b21000e9f294d7013f2729c3d06c771a6e7 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C +++ b/applications/solvers/lagrangian/sprayFoam/sprayEngineFoam/sprayEngineFoam.C @@ -24,6 +24,9 @@ License Application sprayEngineFoam +Group + grpLagrangianSolvers grpMovingMeshSolvers + Description Transient PIMPLE solver for compressible, laminar or turbulent engine flow swith spray parcels. diff --git a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C index f670f388b18aac66dd1df23d6a9ab3e37c37ea16..28e6caa581b1957816dc60b3e65e45fe073dd312 100644 --- a/applications/solvers/lagrangian/sprayFoam/sprayFoam.C +++ b/applications/solvers/lagrangian/sprayFoam/sprayFoam.C @@ -24,6 +24,9 @@ License Application sprayFoam +Group + grpLagrangianSolvers + Description Transient PIMPLE solver for compressible, laminar or turbulent flow with spray parcels. diff --git a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C index 6545c4d72b415ff258cdadbbcb6579ef8d1c9ea9..c6b592fb45fff1d37adb54eb5f96055fcc6ff5c6 100644 --- a/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C +++ b/applications/solvers/lagrangian/uncoupledKinematicParcelFoam/uncoupledKinematicParcelFoam.C @@ -24,6 +24,9 @@ License Application uncoupledKinematicParcelFoam +Group + grpLagrangianSolvers + Description Transient solver for the passive transport of a single kinematic particle cloud. diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C index 58c1483b2409fe3a5ca4c7e28afb1ec7669f4134..e2305c4f708ef385c3ebe719a85f1e0e1cab9ada 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingDyMFoam/cavitatingDyMFoam.C @@ -24,6 +24,9 @@ License Application cavitatingFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Transient cavitation code based on the homogeneous equilibrium model from which the compressibility of the liquid/vapour "mixture" is obtained. diff --git a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C index e40105aab7015527807bd84958ec16d6935c17e1..3fd2ea3780e52b578bf081eeb0754a947c764044 100644 --- a/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C +++ b/applications/solvers/multiphase/cavitatingFoam/cavitatingFoam.C @@ -24,6 +24,9 @@ License Application cavitatingFoam +Group + grpMultiphaseSolvers + Description Transient cavitation code based on the homogeneous equilibrium model from which the compressibility of the liquid/vapour "mixture" is obtained. diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C index 410bb604bbc00d49f0b7c989b06b5c378b860326..0f6bf83172799d819c9aea2816ca8f995e4aadd7 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterDyMFoam/compressibleInterDyMFoam.C @@ -24,6 +24,9 @@ License Application compressibleInterDyMFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Solver for 2 compressible, non-isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, diff --git a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C index 1db6fc06f2f69d28e7fb407815f89a32b63d6d0b..bb7548164b02a44383426f4b67e133d0cda68178 100644 --- a/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C +++ b/applications/solvers/multiphase/compressibleInterFoam/compressibleInterFoam.C @@ -24,6 +24,9 @@ License Application compressibleInterFoam +Group + grpMultiphaseSolvers + Description Solver for 2 compressible, non-isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach. diff --git a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C index c968a4e3130f99a993837847818c79b6454753d5..667941ecc59b12acb030573407ee9d932b481f69 100644 --- a/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C +++ b/applications/solvers/multiphase/compressibleMultiphaseInterFoam/compressibleMultiphaseInterFoam.C @@ -24,6 +24,9 @@ License Application compressibleMultiphaseInterFoam +Group + grpMultiphaseSolvers + Description Solver for n compressible, non-isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach. diff --git a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C index a026a32faf93d8e95f5c690c86a87211a76f33d7..d35c3a262b5eef292cdcbfd2d696fc9f1b8d96ca 100644 --- a/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C +++ b/applications/solvers/multiphase/driftFluxFoam/driftFluxFoam.C @@ -24,6 +24,9 @@ License Application driftFluxFoam +Group + grpMultiphaseSolvers + Description Solver for 2 incompressible fluids using the mixture approach with the drift-flux approximation for relative motion of the phases. diff --git a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C index af6c779a0ce2cc75e8358c0c16baec922e671469..7f3f677349e03e887f680b2df49d8c63d4c1d2cb 100644 --- a/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C +++ b/applications/solvers/multiphase/interFoam/interDyMFoam/interDyMFoam.C @@ -24,6 +24,9 @@ License Application interDyMFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Solver for 2 incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, diff --git a/applications/solvers/multiphase/interFoam/interFoam.C b/applications/solvers/multiphase/interFoam/interFoam.C index 63d9a344e8fcddc3ffb88d30906b6e34d7ebc4b9..c6dc2f47e455151eacee11cff25f94b479f10667 100644 --- a/applications/solvers/multiphase/interFoam/interFoam.C +++ b/applications/solvers/multiphase/interFoam/interFoam.C @@ -24,6 +24,9 @@ License Application interFoam +Group + grpMultiphaseSolvers + Description Solver for 2 incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach. diff --git a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C index 19afacf2e1296a4ae0ac2fc9b9e1abf32671e663..201b6bb926b8c84c383f272f36f101c32d8d7a73 100644 --- a/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C +++ b/applications/solvers/multiphase/interFoam/interMixingFoam/interMixingFoam.C @@ -24,6 +24,9 @@ License Application interMixingFoam +Group + grpMultiphaseSolvers + Description Solver for 3 incompressible fluids, two of which are miscible, using a VOF method to capture the interface. diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C index cf7ffd887415d83a2912458c27bec2f9ce71d368..a3b3e64cbc53f854d26042f2458812a4e31fcde4 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C +++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeDyMFoam/interPhaseChangeDyMFoam.C @@ -24,6 +24,9 @@ License Application interPhaseChangeDyMFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Solver for 2 incompressible, isothermal immiscible fluids with phase-change (e.g. cavitation). Uses a VOF (volume of fluid) phase-fraction based diff --git a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C index 003d9a58a09f6d43212b3e50b2bff2b677f7b9f0..525efbc3aba8eaa9525c758a2e8ad7d82d4446fa 100644 --- a/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C +++ b/applications/solvers/multiphase/interPhaseChangeFoam/interPhaseChangeFoam.C @@ -24,6 +24,9 @@ License Application interPhaseChangeFoam +Group + grpMultiphaseSolvers + Description Solver for 2 incompressible, isothermal immiscible fluids with phase-change (e.g. cavitation). Uses a VOF (volume of fluid) phase-fraction based diff --git a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C index 61cc90547d1360a3f5acfd341163d9fa861f8a87..2ec41b40f87fa200f329a2860935a943d523c336 100644 --- a/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C +++ b/applications/solvers/multiphase/multiphaseEulerFoam/multiphaseEulerFoam.C @@ -24,6 +24,9 @@ License Application multiphaseEulerFoam +Group + grpMultiphaseSolvers + Description Solver for a system of many compressible fluid phases including heat-transfer. diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C index c93056f329f4fb85cb11980bb356ec006dac18ee..a4413f6295726a3edd3a1f61dac7199d806abaf2 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterDyMFoam/multiphaseInterDyMFoam.C @@ -24,6 +24,9 @@ License Application multiphaseInterFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Solver for n incompressible fluids which captures the interfaces and includes surface-tension and contact-angle effects for each phase. diff --git a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C index 4bc2f55c4e7ae5678f549bba45ac2ee11f5ac2a7..130c9f1cb6dece886888a7f21ca3045bd15b293d 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C +++ b/applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C @@ -24,6 +24,9 @@ License Application multiphaseInterFoam +Group + grpMultiphaseSolvers + Description Solver for n incompressible fluids which captures the interfaces and includes surface-tension and contact-angle effects for each phase. diff --git a/applications/solvers/multiphase/multiphaseSolversDoc.H b/applications/solvers/multiphase/multiphaseSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..1efb73e01bf4a8d678334bc0474866af5ebab59d --- /dev/null +++ b/applications/solvers/multiphase/multiphaseSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpMultiphaseSolvers Multiphase solvers +@{ + \ingroup grpSolvers + This group contains multiphase solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C index 9b1a8db083c82e964c993071fd65484cdfef8e3f..7687ba6aab21ffa0b3afd6ad8e619ba1f2365f09 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceDyMFoam/potentialFreeSurfaceDyMFoam.C @@ -24,6 +24,9 @@ License Application potentialFreeSurfaceDyMFoam +Group + grpMultiphaseSolvers grpMovingMeshSolvers + Description Incompressible Navier-Stokes solver with inclusion of a wave height field to enable single-phase free-surface approximations. diff --git a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C index 2db15eb8308aeb0d44e532f8dd9c317ee725f977..0bbb2c18071c9a6eaf6436b778a36426469da0e1 100644 --- a/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C +++ b/applications/solvers/multiphase/potentialFreeSurfaceFoam/potentialFreeSurfaceFoam.C @@ -24,6 +24,9 @@ License Application potentialFreeSurfaceFoam +Group + grpMultiphaseSolvers + Description Incompressible Navier-Stokes solver with inclusion of a wave height field to enable single-phase free-surface approximations diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C index d5c48d47aa1e0e2cb53457c199f9e505e47e4229..f23b5649fcedb2c4830a786d1017602705bbb4c4 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingMultiphaseEulerFoam/reactingMultiphaseEulerFoam.C @@ -24,6 +24,9 @@ License Application reactingMultiphaseEulerFoam +Group + grpMultiphaseSolvers + Description Solver for a system of any number of compressible fluid phases with a common pressure, but otherwise separate properties. The type of phase model diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C index 00672f2f016413e66b2b711b41589c0720dadc65..04c3d2e20635732f833302e2112034867d97715d 100644 --- a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/reactingTwoPhaseEulerFoam.C @@ -24,6 +24,9 @@ License Application reactingTwoPhaseEulerFoam +Group + grpMultiphaseSolvers + Description Solver for a system of 2 compressible fluid phases with a common pressure, but otherwise separate properties. The type of phase model is run time diff --git a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C index 298d5366caa9dd827a20ff2cd82d503a3d7cc597..02b05c03d6a190ebb6f9f1ed483c57d8f218d285 100644 --- a/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C +++ b/applications/solvers/multiphase/twoLiquidMixingFoam/twoLiquidMixingFoam.C @@ -24,6 +24,9 @@ License Application twoLiquidMixingFoam +Group + grpMultiphaseSolvers + Description Solver for mixing 2 incompressible fluids. diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C index 3027ae88b39347666fb47c02478d58dff235414d..b367381a8429f35bf3f74bedd06e7de9d01e5603 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseEulerFoam.C @@ -24,6 +24,9 @@ License Application twoPhaseEulerFoam +Group + grpMultiphaseSolvers + Description Solver for a system of 2 compressible fluid phases with one phase dispersed, e.g. gas bubbles in a liquid including heat-transfer. diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C index f79242dcf03b8947c9133160f4ff543fe1b2cefe..a52d35ae0fe86dceab5cba2035ebdde3f7df0414 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C @@ -24,6 +24,9 @@ License Application solidDisplacementFoam +Group + grpStressAnalysisSolvers + Description Transient segregated finite-volume solver of linear-elastic, small-strain deformation of a solid body, with optional thermal diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C b/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C index 240593d81468da18b81068caccbb9e1dca0f0d05..4abd493e2f41e9d10dbf5b2d3913fd8ef27fd571 100644 --- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C @@ -24,6 +24,9 @@ License Application solidEquilibriumDisplacementFoam +Group + grpStressAnalysisSolvers + Description Steady-state segregated finite-volume solver of linear-elastic, small-strain deformation of a solid body, with optional thermal diff --git a/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H b/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H new file mode 100644 index 0000000000000000000000000000000000000000..fe3e73b0d4d34baf358f05d09bd4ee057f84bf07 --- /dev/null +++ b/applications/solvers/stressAnalysis/stressAnalysisSolversDoc.H @@ -0,0 +1,30 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\defgroup grpStressAnalysisSolvers Stress analysis solvers +@{ + \ingroup grpSolvers + This group contains stress analysis solvers. +@} + +\*---------------------------------------------------------------------------*/ diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C index e6df9ed9d4c87a78be5fa4c4412a9591bcaba3db..ea342de863c1fb3c00fe0bed3264a759c5f9452d 100644 --- a/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C +++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMesh.C @@ -34,7 +34,8 @@ Description NOTE: To avoid exposing wrong fields values faceSets should include faces contained in the blockedCells cellset. - - coupledFaces reads coupledFacesSet to introduces mixe-coupled baffles + - coupledFaces reads coupledFacesSet to introduces mixed-coupled + duplicate baffles Subsets out the blocked cells and splits the blockedFaces and updates fields. diff --git a/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict b/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict index 94fb1d6b8cc50e15a1859586453f4fa9620545ff..62471e0ec6fbf5042983d5c7758e4563facf4af7 100644 --- a/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict +++ b/applications/utilities/mesh/advanced/PDRMesh/PDRMeshDict @@ -17,7 +17,8 @@ FoamFile //- Per faceSet the patch the faces should go into blocked baffles blockedFaces ((blockedFacesSet blockedFaces)); -//- Per faceSet the patch the faces should go into coupled baffles +//- Per faceSet the duplicate baffles to generate (one 'normal', wall baffle, +// one cyclic baffle). For use with active baffle boundary conditions. coupledFaces { coupledFacesSet diff --git a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C index b53d29c836f430896a73074269527224678dd082..d0d1439b852e10e34f5ffdb9c83016dbf00a3662 100644 --- a/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C +++ b/applications/utilities/mesh/manipulation/createBaffles/createBaffles.C @@ -525,7 +525,7 @@ int main(int argc, char *argv[]) Info<< "Created zone " << name << " at index " << zoneID - << " with " << n << " faces" << endl; + << " with " << returnReduce(n, sumOp<label>()) << " faces" << endl; mesh.faceZones().set ( diff --git a/applications/utilities/mesh/manipulation/createPatch/createPatch.C b/applications/utilities/mesh/manipulation/createPatch/createPatch.C index da6b2ec09c676a73a5a095ddac8eee382d5d9646..eb89288a30327a2f0b0e41f09960b00997fe4b9d 100644 --- a/applications/utilities/mesh/manipulation/createPatch/createPatch.C +++ b/applications/utilities/mesh/manipulation/createPatch/createPatch.C @@ -504,6 +504,11 @@ int main(int argc, char *argv[]) #include "addOverwriteOption.H" #include "addRegionOption.H" #include "addDictOption.H" + Foam::argList::addBoolOption + ( + "writeObj", + "write obj files showing the cyclic matching process" + ); #include "setRootCase.H" #include "createTime.H" runTime.functionObjects().off(); @@ -515,12 +520,13 @@ int main(int argc, char *argv[]) #include "createNamedPolyMesh.H" + const bool writeObj = args.optionFound("writeObj"); + const word oldInstance = mesh.pointsInstance(); const word dictName("createPatchDict"); #include "setSystemMeshDictionaryIO.H" - - Info<< "Reading " << dictName << nl << endl; + Info<< "Reading " << dictIO.instance()/dictIO.name() << nl << endl; IOdictionary dict(dictIO); @@ -534,7 +540,10 @@ int main(int argc, char *argv[]) patches.checkParallelSync(true); - dumpCyclicMatch("initial_", mesh); + if (writeObj) + { + dumpCyclicMatch("initial_", mesh); + } // Read patch construct info from dictionary PtrList<dictionary> patchSources(dict.lookup("patches")); @@ -753,7 +762,10 @@ int main(int argc, char *argv[]) autoPtr<mapPolyMesh> map = meshMod.changeMesh(mesh, true); mesh.movePoints(map().preMotionPoints()); - dumpCyclicMatch("coupled_", mesh); + if (writeObj) + { + dumpCyclicMatch("coupled_", mesh); + } // Synchronise points. if (!pointSync) @@ -864,7 +876,10 @@ int main(int argc, char *argv[]) filterPatches(mesh, addedPatchNames); - dumpCyclicMatch("final_", mesh); + if (writeObj) + { + dumpCyclicMatch("final_", mesh); + } // Set the precision of the points data to 10 diff --git a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C index 6aed660ed8b9359b1ab8877ba8b23d964e48594e..1f9480a5c45ee071061c85b96a31d32b744b6598 100644 --- a/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C +++ b/applications/utilities/mesh/manipulation/flattenMesh/flattenMesh.C @@ -96,6 +96,8 @@ int main(int argc, char *argv[]) Info<< "Writing points into directory " << points.path() << nl << endl; points.write(); + Info<< nl << "End" << nl << endl; + return 0; } diff --git a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C index 46f59e91e8e63ac669a7d72d33776eebd0a61bed..62ef9e13fde805a7b5262e9b72cb707709bef4d1 100644 --- a/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.C +++ b/applications/utilities/mesh/manipulation/mergeMeshes/mergeMeshes.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 @@ -62,7 +62,6 @@ int main(int argc, char *argv[]) "merge two meshes" ); - argList::noParallel(); #include "addOverwriteOption.H" argList::validArgs.append("masterCase"); @@ -97,6 +96,18 @@ int main(int argc, char *argv[]) word addRegion = polyMesh::defaultRegion; args.optionReadIfPresent("addRegion", addRegion); + // Since we don't use argList processor directory detection, add it to + // the casename ourselves so it triggers the logic inside TimePath. + const fileName& cName = args.caseName(); + std::string::size_type pos = cName.find("processor"); + if (pos != string::npos && pos != 0) + { + fileName processorName = cName.substr(pos, cName.size()-pos); + masterCase += '/' + processorName; + addCase += '/' + processorName; + } + + getRootCase(masterCase); getRootCase(addCase); diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C index c52953e196f01544d87c8741b3bdb917920e349b..ffbcf01cf1feea07b5eadd3d19d9598ef36438d6 100644 --- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C +++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorFvMesh.C @@ -242,8 +242,6 @@ Foam::mirrorFvMesh::mirrorFvMesh(const IOobject& io) } // Mirror boundary faces patch by patch - - labelList newToOldPatch(boundary().size(), -1); labelList newPatchSizes(boundary().size(), -1); labelList newPatchStarts(boundary().size(), -1); diff --git a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C index f90ed99eef87a9c0af81444ad529e51044d51ec7..f7383289cb8bfa8fd58c89c8777abc33ba3a60d7 100644 --- a/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C +++ b/applications/utilities/mesh/manipulation/mirrorMesh/mirrorMesh.C @@ -67,7 +67,7 @@ int main(int argc, char *argv[]) Info<< "Writing mirrored mesh" << endl; mesh.mirrorMesh().write(); - Info<< "End" << endl; + Info<< "End" << nl << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 65f1f25b45792f9b52997da7434e54ff033706f5..7fcfa3b59b587cfaaa0d21669d904f122f2868e3 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C @@ -877,6 +877,55 @@ int main(int argc, char *argv[]) ReadFields(pointMesh::New(mesh), objects, ptFlds); + // Read sets + PtrList<cellSet> cellSets; + PtrList<faceSet> faceSets; + PtrList<pointSet> pointSets; + if (renumberSets) + { + // Read sets + IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); + { + IOobjectList cSets(objects.lookupClass(cellSet::typeName)); + if (cSets.size()) + { + Info<< "Reading cellSets:" << endl; + forAllConstIter(IOobjectList, cSets, iter) + { + cellSets.append(new cellSet(*iter())); + Info<< " " << cellSets.last().name() << endl; + } + } + } + { + IOobjectList fSets(objects.lookupClass(faceSet::typeName)); + if (fSets.size()) + { + Info<< "Reading faceSets:" << endl; + forAllConstIter(IOobjectList, fSets, iter) + { + faceSets.append(new faceSet(*iter())); + Info<< " " << faceSets.last().name() << endl; + } + } + } + { + IOobjectList pSets(objects.lookupClass(pointSet::typeName)); + if (pSets.size()) + { + Info<< "Reading pointSets:" << endl; + forAllConstIter(IOobjectList, pSets, iter) + { + pointSets.append(new pointSet(*iter())); + Info<< " " << pointSets.last().name() << endl; + } + } + } + } + + +>>>>>>> develop + Info<< endl; // From renumbering: @@ -1387,61 +1436,25 @@ int main(int argc, char *argv[]) ).write(); } - - // Renumber sets if required if (renumberSets) { - Info<< endl; - - // Read sets - IOobjectList objects(mesh, mesh.facesInstance(), "polyMesh/sets"); - + forAll(cellSets, i) { - IOobjectList cSets(objects.lookupClass(cellSet::typeName)); - if (cSets.size()) - { - Info<< "Renumbering cellSets:" << endl; - forAllConstIter(IOobjectList, cSets, iter) - { - cellSet cs(*iter()); - Info<< " " << cs.name() << endl; - cs.updateMesh(map()); - cs.instance() = mesh.facesInstance(); - cs.write(); - } - } + cellSets[i].updateMesh(map()); + cellSets[i].instance() = mesh.facesInstance(); + cellSets[i].write(); } - + forAll(faceSets, i) { - IOobjectList fSets(objects.lookupClass(faceSet::typeName)); - if (fSets.size()) - { - Info<< "Renumbering faceSets:" << endl; - forAllConstIter(IOobjectList, fSets, iter) - { - faceSet fs(*iter()); - Info<< " " << fs.name() << endl; - fs.updateMesh(map()); - fs.instance() = mesh.facesInstance(); - fs.write(); - } - } + faceSets[i].updateMesh(map()); + faceSets[i].instance() = mesh.facesInstance(); + faceSets[i].write(); } - + forAll(pointSets, i) { - IOobjectList pSets(objects.lookupClass(pointSet::typeName)); - if (pSets.size()) - { - Info<< "Renumbering pointSets:" << endl; - forAllConstIter(IOobjectList, pSets, iter) - { - pointSet ps(*iter()); - Info<< " " << ps.name() << endl; - ps.updateMesh(map()); - ps.instance() = mesh.facesInstance(); - ps.write(); - } - } + pointSets[i].updateMesh(map()); + pointSets[i].instance() = mesh.facesInstance(); + pointSets[i].write(); } } diff --git a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C index 7d40e2449a671d96fb546a9f15281e888838c593..3171ed5e8610919a7001cd1d67e0701a2b121c82 100644 --- a/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C +++ b/applications/utilities/mesh/manipulation/splitMesh/splitMesh.C @@ -285,7 +285,8 @@ int main(int argc, char *argv[]) << exit(FatalError); } - Info<< nl << "end" << endl; + Info<< nl << "End" << nl << endl; + return 0; } diff --git a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C index c6409dbf9880b0a6ca8a089b03de047a389e41c9..2e1fc21747efeef21ee0f72514a80a4bf767e6cb 100644 --- a/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C +++ b/applications/utilities/mesh/manipulation/stitchMesh/stitchMesh.C @@ -499,7 +499,7 @@ int main(int argc, char *argv[]) // Write fields runTime.write(); - Info<< nl << "end" << endl; + Info<< nl << "End" << nl << endl; return 0; } diff --git a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C index 180c736b92d50c84b94bcc1b8ef9baa933292746..25435828546712037d93014ee7c91170d71a2db5 100644 --- a/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C +++ b/applications/utilities/mesh/manipulation/subsetMesh/subsetMesh.C @@ -41,11 +41,86 @@ Description #include "cellSet.H" #include "IOobjectList.H" #include "volFields.H" +#include "topoDistanceData.H" +#include "FaceCellWave.H" using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +labelList nearestPatch(const polyMesh& mesh, const labelList& patchIDs) +{ + const polyBoundaryMesh& pbm = mesh.boundaryMesh(); + + // Count number of faces in exposedPatchIDs + label nFaces = 0; + forAll(patchIDs, i) + { + const polyPatch& pp = pbm[patchIDs[i]]; + nFaces += pp.size(); + } + + // Field on cells and faces. + List<topoDistanceData> cellData(mesh.nCells()); + List<topoDistanceData> faceData(mesh.nFaces()); + + // Start of changes + labelList patchFaces(nFaces); + List<topoDistanceData> patchData(nFaces); + nFaces = 0; + forAll(patchIDs, i) + { + label patchI = patchIDs[i]; + const polyPatch& pp = pbm[patchI]; + + forAll(pp, i) + { + patchFaces[nFaces] = pp.start()+i; + patchData[nFaces] = topoDistanceData(patchI, 0); + nFaces++; + } + } + + // Propagate information inwards + FaceCellWave<topoDistanceData> deltaCalc + ( + mesh, + patchFaces, + patchData, + faceData, + cellData, + mesh.globalData().nTotalCells()+1 + ); + + // And extract + + labelList nearest(mesh.nFaces()); + + bool haveWarned = false; + forAll(faceData, faceI) + { + if (!faceData[faceI].valid(deltaCalc.data())) + { + if (!haveWarned) + { + WarningIn("meshRefinement::nearestPatch(..)") + << "Did not visit some faces, e.g. face " << faceI + << " at " << mesh.faceCentres()[faceI] << endl + << "Using patch " << patchIDs[0] << " as nearest" + << endl; + haveWarned = true; + } + nearest[faceI] = patchIDs[0]; + } + else + { + nearest[faceI] = faceData[faceI].data(); + } + } + + return nearest; +} + template<class Type> void subsetVolFields @@ -150,6 +225,40 @@ void subsetPointFields } +template<class Type> +void subsetDimensionedFields +( + const fvMeshSubset& subsetter, + const wordList& fieldNames, + PtrList<DimensionedField<Type, volMesh> >& subFields +) +{ + const fvMesh& baseMesh = subsetter.baseMesh(); + + forAll(fieldNames, i) + { + const word& fieldName = fieldNames[i]; + + Info<< "Subsetting field " << fieldName << endl; + + DimensionedField<Type, volMesh> fld + ( + IOobject + ( + fieldName, + baseMesh.time().timeName(), + baseMesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + baseMesh + ); + + subFields.set(i, subsetter.interpolate(fld)); + } +} + + int main(int argc, char *argv[]) { @@ -169,6 +278,13 @@ int main(int argc, char *argv[]) "'oldInternalFaces'" ); argList::addOption + ( + "patches", + "names", + "add exposed internal faces to nearest of specified patches" + " instead of to 'oldInternalFaces'" + ); + argList::addOption ( "resultTime", "time", @@ -207,15 +323,19 @@ int main(int argc, char *argv[]) // Create mesh subsetting engine fvMeshSubset subsetter(mesh); - label patchI = -1; + labelList exposedPatchIDs; if (args.optionFound("patch")) { const word patchName = args["patch"]; - patchI = mesh.boundaryMesh().findPatchID(patchName); + exposedPatchIDs = labelList + ( + 1, + mesh.boundaryMesh().findPatchID(patchName) + ); - if (patchI == -1) + if (exposedPatchIDs[0] == -1) { FatalErrorInFunction << nl << "Valid patches are " << mesh.boundaryMesh().names() @@ -225,17 +345,53 @@ int main(int argc, char *argv[]) Info<< "Adding exposed internal faces to patch " << patchName << endl << endl; } + else if (args.optionFound("patches")) + { + const wordReList patchNames(args.optionRead<wordReList>("patches")); + + exposedPatchIDs = mesh.boundaryMesh().patchSet(patchNames).sortedToc(); + + Info<< "Adding exposed internal faces to nearest of patches " + << patchNames << endl << endl; + } else { Info<< "Adding exposed internal faces to a patch called" << " \"oldInternalFaces\" (created if necessary)" << endl << endl; + exposedPatchIDs = labelList(1, label(-1)); } cellSet currentSet(mesh, setName); - subsetter.setLargeCellSubset(currentSet, patchI, true); + if (exposedPatchIDs.size() == 1) + { + subsetter.setLargeCellSubset(currentSet, exposedPatchIDs[0], true); + } + else + { + + // Find per face the nearest patch + labelList nearestExposedPatch(nearestPatch(mesh, exposedPatchIDs)); + + labelList region(mesh.nCells(), 0); + forAllConstIter(cellSet, currentSet, iter) + { + region[iter.key()] = 1; + } + + labelList exposedFaces(subsetter.getExposedFaces(region, 1, true)); + subsetter.setLargeCellSubset + ( + region, + 1, + exposedFaces, + UIndirectList<label>(nearestExposedPatch, exposedFaces)(), + true + ); + } + IOobjectList objects(mesh, runTime.timeName()); @@ -361,6 +517,42 @@ int main(int argc, char *argv[]) subsetPointFields(subsetter, pMesh, pointTensorNames, pointTensorFlds); + // Read dimensioned fields and subset + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + typedef volScalarField::DimensionedInternalField dimScalType; + wordList scalarDimNames(objects.names(dimScalType::typeName)); + PtrList<dimScalType> scalarDimFlds(scalarDimNames.size()); + subsetDimensionedFields(subsetter, scalarDimNames, scalarDimFlds); + + typedef volVectorField::DimensionedInternalField dimVecType; + wordList vectorDimNames(objects.names(dimVecType::typeName)); + PtrList<dimVecType> vectorDimFlds(vectorDimNames.size()); + subsetDimensionedFields(subsetter, vectorDimNames, vectorDimFlds); + + typedef volSphericalTensorField::DimensionedInternalField dimSphereType; + wordList sphericalTensorDimNames(objects.names(dimSphereType::typeName)); + PtrList<dimSphereType> sphericalTensorDimFlds + ( + sphericalTensorDimNames.size() + ); + subsetDimensionedFields + ( + subsetter, + sphericalTensorDimNames, + sphericalTensorDimFlds + ); + + typedef volSymmTensorField::DimensionedInternalField dimSymmTensorType; + wordList symmTensorDimNames(objects.names(dimSymmTensorType::typeName)); + PtrList<dimSymmTensorType> symmTensorDimFlds(symmTensorDimNames.size()); + subsetDimensionedFields(subsetter, symmTensorDimNames, symmTensorDimFlds); + + typedef volTensorField::DimensionedInternalField dimTensorType; + wordList tensorDimNames(objects.names(dimTensorType::typeName)); + PtrList<dimTensorType> tensorDimFlds(tensorDimNames.size()); + subsetDimensionedFields(subsetter, tensorDimNames, tensorDimFlds); + // Write mesh and fields to new time // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -461,6 +653,33 @@ int main(int argc, char *argv[]) pointTensorFlds[i].write(); } + // DimensionedFields + forAll(scalarDimFlds, i) + { + scalarDimFlds[i].rename(scalarDimNames[i]); + scalarDimFlds[i].write(); + } + forAll(vectorDimFlds, i) + { + vectorDimFlds[i].rename(vectorDimNames[i]); + vectorDimFlds[i].write(); + } + forAll(sphericalTensorDimFlds, i) + { + sphericalTensorDimFlds[i].rename(sphericalTensorDimNames[i]); + sphericalTensorDimFlds[i].write(); + } + forAll(symmTensorDimFlds, i) + { + symmTensorDimFlds[i].rename(symmTensorDimNames[i]); + symmTensorDimFlds[i].write(); + } + forAll(tensorDimFlds, i) + { + tensorDimFlds[i].rename(tensorDimNames[i]); + tensorDimFlds[i].write(); + } + Info<< "\nEnd\n" << endl; diff --git a/applications/utilities/mesh/manipulation/topoSet/topoSetDict b/applications/utilities/mesh/manipulation/topoSet/topoSetDict index 5f0e5c0b39df3b00054a35303fab1e9bad40f819..045486fc217a1af988242d40a4ac5e4a53372eb5 100644 --- a/applications/utilities/mesh/manipulation/topoSet/topoSetDict +++ b/applications/utilities/mesh/manipulation/topoSet/topoSetDict @@ -372,19 +372,22 @@ FoamFile // // is the master side) // } // +// // Select based on faceSet, using supplied normal to determine orientation +// source setAndNormalToFaceZone; +// sourceInfo +// { +// faceSet f0; // name of faceSet +// normal (1 0 0); // normal orientation +// } +// // // Select based on surface. Orientation from normals on surface +// source searchableSurfaceToFaceZone; +// sourceInfo // { -// name fz0; -// type faceZoneSet; -// action new; -// source searchableSurfaceToFaceZone; -// sourceInfo -// { -// surface searchableSphere; -// centre (0.05 0.05 0.005); -// radius 0.025; -// //name sphere.stl; // Optional name if surface triSurfaceMesh -// } +// surface searchableSphere; +// centre (0.05 0.05 0.005); +// radius 0.025; +// //name sphere.stl; // Optional name if surface triSurfaceMesh // } // // @@ -413,7 +416,7 @@ actions name c0; type cellSet; action new; - source labelToCell; + source labelToCell; sourceInfo { value (12 13 56); diff --git a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C index aa946b1e562828304c34ad53645d95c4600853ce..21d4770b4998799be5b129001e8f80505d7ca6ee 100644 --- a/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C +++ b/applications/utilities/mesh/manipulation/transformPoints/transformPoints.C @@ -308,6 +308,8 @@ int main(int argc, char *argv[]) Info<< "Writing points into directory " << points.path() << nl << endl; points.write(); + Info<< nl << "End" << nl << endl; + return 0; } diff --git a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C index 1943b7d631b49ce7503f7429c5238b96e2e5ece1..1b5670fc83cd767d22cf7b4dec189333e8b11c3f 100644 --- a/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.C +++ b/applications/utilities/miscellaneous/foamDebugSwitches/foamDebugSwitches.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -158,9 +158,7 @@ int main(int argc, char *argv[]) Info<< "OptimisationSwitches: " << currOpt << endl; } - - - Info<< "done" << endl; + Info<< nl << "End" << nl << endl; return 0; } diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index b11a5c9c68544ed092816953b1c3a032cd8382ee..1b747f5498ba08e54d211649ba3a6f2b1dfe8752 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -429,7 +429,7 @@ int main(int argc, char *argv[]) mkDir(fvPath); - // mesh wrapper; does subsetting and decomposition + // Mesh wrapper; does subsetting and decomposition vtkMesh vMesh(mesh, cellSetName); @@ -601,6 +601,53 @@ int main(int argc, char *argv[]) + vtf.size(); + // Construct dimensioned fields + PtrList<volScalarField::DimensionedInternalField> dsf; + PtrList<volVectorField::DimensionedInternalField> dvf; + PtrList<volSphericalTensorField::DimensionedInternalField> dSpheretf; + PtrList<volSymmTensorField::DimensionedInternalField> dSymmtf; + PtrList<volTensorField::DimensionedInternalField> dtf; + + if (!specifiedFields || selectedFields.size()) + { + readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dsf); + print(" volScalarFields::Internal :", Info, dsf); + + readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dvf); + print(" volVectorFields::Internal :", Info, dvf); + + readFields + ( + vMesh, + vMesh.baseMesh(), + objects, + selectedFields, + dSpheretf + ); + print(" volSphericalTensorFields::Internal :", Info, dSpheretf); + + readFields + ( + vMesh, + vMesh.baseMesh(), + objects, + selectedFields, + dSymmtf + ); + print(" volSymmTensorFields::Internal :", Info, dSymmtf); + + readFields(vMesh, vMesh.baseMesh(), objects, selectedFields, dtf); + print(" volTensorFields::Internal :", Info, dtf); + } + + label nDimFields = + dsf.size() + + dvf.size() + + dSpheretf.size() + + dSymmtf.size() + + dtf.size(); + + // Construct pointMesh only if nessecary since constructs edge // addressing (expensive on polyhedral meshes) if (noPointValues) @@ -701,7 +748,7 @@ int main(int argc, char *argv[]) ( writer.os(), vMesh.nFieldCells(), - 1+nVolFields + 1 + nVolFields + nDimFields ); // Write cellID field @@ -714,13 +761,20 @@ int main(int argc, char *argv[]) writer.write(vSymmtf); writer.write(vtf); + // Write dimensionedFields + writer.write<scalar, volMesh>(dsf); + writer.write<vector, volMesh>(dvf); + writer.write<sphericalTensor, volMesh>(dSpheretf); + writer.write<symmTensor, volMesh>(dSymmtf); + writer.write<tensor, volMesh>(dtf); + if (!noPointValues) { writeFuns::writePointDataHeader ( writer.os(), vMesh.nFieldPoints(), - nVolFields+nPointFields + nVolFields + nDimFields + nPointFields ); // pointFields @@ -737,6 +791,12 @@ int main(int argc, char *argv[]) writer.write(pInterp, vSpheretf); writer.write(pInterp, vSymmtf); writer.write(pInterp, vtf); + + writer.write<scalar, volMesh>(pInterp, dsf); + writer.write<vector, volMesh>(pInterp, dvf); + writer.write<sphericalTensor, volMesh>(pInterp, dSpheretf); + writer.write<symmTensor, volMesh>(pInterp, dSymmtf); + writer.write<tensor, volMesh>(pInterp, dtf); } } diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H index 9c456f843c7920d70d92d02aebe6027bbdac94c3..fa805c37b7cdbc5b6cf45b0fc6ed953694e93b60 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriter.H @@ -94,6 +94,13 @@ public: const PtrList<GeometricField<Type, PatchField, GeoMesh> >& ); + //- Write generic internal fields + template<class Type, class GeoMesh> + void write + ( + const PtrList<DimensionedField<Type, volMesh> >& flds + ); + //- Interpolate and write volFields template<class Type> void write @@ -101,6 +108,14 @@ public: const volPointInterpolation&, const PtrList<GeometricField<Type, fvPatchField, volMesh> >& ); + + //- Interpolate and internal fields + template<class Type, class GeoMesh> + void write + ( + const volPointInterpolation&, + const PtrList<DimensionedField<Type, volMesh> >& + ); }; diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C index 853caca75bad51e58b8c369efc7454e40f33c45f..797f2d5661bcf36e85d073ab57a1554011a69aab 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/internalWriterTemplates.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -41,6 +41,19 @@ void Foam::internalWriter::write } +template<class Type, class GeoMesh> +void Foam::internalWriter::write +( + const PtrList<DimensionedField<Type, volMesh> >& flds +) +{ + forAll(flds, i) + { + writeFuns::write(os_, binary_, flds[i], vMesh_); + } +} + + template<class Type> void Foam::internalWriter::write ( @@ -62,4 +75,25 @@ void Foam::internalWriter::write } +template<class Type, class GeoMesh> +void Foam::internalWriter::write +( + const volPointInterpolation& pInterp, + const PtrList<DimensionedField<Type, volMesh> >& flds +) +{ + forAll(flds, i) + { + writeFuns::write + ( + os_, + binary_, + flds[i], + pInterp.interpolate(flds[i])(), + vMesh_ + ); + } +} + + // ************************************************************************* // diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H index 11f18b3d764cab397493cb5e5a18e4a6514f1529..56df1d5237d3690611c62c9046b76a3fc8375390 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFuns.H @@ -113,7 +113,7 @@ public: ( std::ostream&, const bool binary, - const GeometricField<Type, fvPatchField, volMesh>&, + const DimensionedField<Type, volMesh>&, const vtkMesh& ); @@ -135,8 +135,8 @@ public: ( std::ostream&, const bool binary, - const GeometricField<Type, fvPatchField, volMesh>&, - const GeometricField<Type, pointPatchField, pointMesh>&, + const DimensionedField<Type, volMesh>&, + const DimensionedField<Type, pointMesh>&, const vtkMesh& ); @@ -150,6 +150,16 @@ public: const vtkMesh& ); + //- Write generic dimensioned internal fields + template<class Type> + static void write + ( + std::ostream&, + const bool binary, + const PtrList<DimensionedField<Type, volMesh> >&, + const vtkMesh& + ); + //- Interpolate and write volFields template<class Type> static void write diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C index 5fe5d076dd03668b9be15251598d1ba84dae236e..3082da1e6199bc454e75c848049c937e1724d613 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/writeFunsTemplates.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -64,7 +64,7 @@ void Foam::writeFuns::write ( std::ostream& os, const bool binary, - const GeometricField<Type, fvPatchField, volMesh>& vvf, + const DimensionedField<Type, volMesh>& vvf, const vtkMesh& vMesh ) { @@ -79,7 +79,7 @@ void Foam::writeFuns::write DynamicList<floatScalar> fField(pTraits<Type>::nComponents*nValues); - insert(vvf.internalField(), fField); + insert(vvf, fField); forAll(superCells, superCellI) { @@ -128,8 +128,8 @@ void Foam::writeFuns::write ( std::ostream& os, const bool binary, - const GeometricField<Type, fvPatchField, volMesh>& vvf, - const GeometricField<Type, pointPatchField, pointMesh>& pvf, + const DimensionedField<Type, volMesh>& vvf, + const DimensionedField<Type, pointMesh>& pvf, const vtkMesh& vMesh ) { @@ -164,6 +164,22 @@ void Foam::writeFuns::write const PtrList<GeometricField<Type, PatchField, GeoMesh> >& flds, const vtkMesh& vMesh ) +{ + forAll(flds, i) + { + write(os, binary, flds[i].dimensionedInternalField(), vMesh); + } +} + + +template<class Type> +void Foam::writeFuns::write +( + std::ostream& os, + const bool binary, + const PtrList<DimensionedField<Type, volMesh> >& flds, + const vtkMesh& vMesh +) { forAll(flds, i) { diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H index 0bd35573e1d9a0b14caf09034c4d618742366f41..78e4496f176dfc6692e7aa0f1143dd25563a0c39 100644 --- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H +++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4Foam.H @@ -390,15 +390,6 @@ class vtkPV4Foam //- Reduce memory footprint after conversion void reduceMemory(); - //- Volume fields - void updateVolFields(vtkMultiBlockDataSet*); - - //- Point fields - void updatePointFields(vtkMultiBlockDataSet*); - - //- Lagrangian fields - void updateLagrangianFields(vtkMultiBlockDataSet*); - // Mesh conversion functions @@ -492,6 +483,16 @@ class vtkPV4Foam // Convert OpenFOAM fields + //- Volume field - all types + template<class Type> + void convertVolField + ( + const PtrList<PrimitivePatchInterpolation<primitivePatch> >&, + const GeometricField<Type, fvPatchField, volMesh>&, + const bool interpFields, + vtkMultiBlockDataSet* output + ); + //- Volume fields - all types template<class Type> void convertVolFields @@ -503,6 +504,17 @@ class vtkPV4Foam vtkMultiBlockDataSet* output ); + //- Volume internal fields (DimensionedField)- all types + template<class Type> + void convertDimFields + ( + const fvMesh&, + const PtrList<PrimitivePatchInterpolation<primitivePatch> >&, + const IOobjectList&, + const bool interpFields, + vtkMultiBlockDataSet* output + ); + //- Volume field - all selected parts template<class Type> void convertVolFieldBlock diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C index 127f49d30614c8b62fa288b40c5a1cc78c3b2cbe..ec28f4dfe85d98de20951c62774d82177eca3e4d 100644 --- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.C +++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamFields.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -143,6 +143,27 @@ void Foam::vtkPV4Foam::convertVolFields mesh, ppInterpList, objects, interpFields, output ); + convertDimFields<scalar> + ( + mesh, ppInterpList, objects, interpFields, output + ); + convertDimFields<vector> + ( + mesh, ppInterpList, objects, interpFields, output + ); + convertDimFields<sphericalTensor> + ( + mesh, ppInterpList, objects, interpFields, output + ); + convertDimFields<symmTensor> + ( + mesh, ppInterpList, objects, interpFields, output + ); + convertDimFields<tensor> + ( + mesh, ppInterpList, objects, interpFields, output + ); + if (debug) { Info<< "<end> Foam::vtkPV4Foam::convertVolFields" << endl; diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H index b191e1c52bc5e969e87ea260f3ab3f1c69e649eb..784432ea4b1d1801d8500ffb57826d86902242c3 100644 --- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H +++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamUpdateInfoFields.H @@ -99,6 +99,34 @@ void Foam::vtkPV4Foam::updateInfoFields objects ); + //- Add dimensioned fields to GUI + addToSelection<DimensionedField<scalar, meshType> > + ( + select, + objects + ); + addToSelection<DimensionedField<vector, meshType> > + ( + select, + objects + ); + addToSelection<DimensionedField<sphericalTensor, meshType> > + ( + select, + objects + ); + addToSelection<DimensionedField<symmTensor, meshType> > + ( + select, + objects + ); + addToSelection<DimensionedField<tensor, meshType> > + ( + select, + objects + ); + + // restore the enabled selections setSelectedArrayEntries(select, enabledEntries); diff --git a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H index f4757a613732a9c38d14f46c9b18b21bfa28c6ab..fbc51aeaa1c159759f83dc9d28a697126d18705c 100644 --- a/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.H +++ b/applications/utilities/postProcessing/graphics/PV4Readers/PV4FoamReader/vtkPV4Foam/vtkPV4FoamVolFields.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -34,6 +34,7 @@ InClass #include "wallPolyPatch.H" #include "faceSet.H" #include "volPointInterpolation.H" +#include "zeroGradientFvPatchField.H" #include "vtkPV4FoamFaceField.H" #include "vtkPV4FoamPatchField.H" @@ -43,239 +44,315 @@ InClass // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // template<class Type> -void Foam::vtkPV4Foam::convertVolFields +void Foam::vtkPV4Foam::convertVolField ( - const fvMesh& mesh, const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList, - const IOobjectList& objects, + const GeometricField<Type, fvPatchField, volMesh>& tf, const bool interpFields, vtkMultiBlockDataSet* output ) { + const fvMesh& mesh = tf.mesh(); const polyBoundaryMesh& patches = mesh.boundaryMesh(); - forAllConstIter(IOobjectList, objects, iter) + // Interpolated field (demand driven) + autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr; + if (interpFields) { - // restrict to GeometricField<Type, ...> - if - ( - iter()->headerClassName() - != GeometricField<Type, fvPatchField, volMesh>::typeName - ) + if (debug) { - continue; + Info<< "convertVolFieldBlock interpolating:" << tf.name() + << endl; } - // Load field - GeometricField<Type, fvPatchField, volMesh> tf + ptfPtr.reset ( - *iter(), - mesh + volPointInterpolation::New(mesh).interpolate(tf).ptr() ); - - // Interpolated field (demand driven) - autoPtr<GeometricField<Type, pointPatchField, pointMesh> > ptfPtr; - if (interpFields) - { - if (debug) - { - Info<< "convertVolFieldBlock interpolating:" << tf.name() - << endl; - } - - ptfPtr.reset - ( - volPointInterpolation::New(tf.mesh()).interpolate(tf).ptr() - ); - } + } - // Convert activated internalMesh regions - convertVolFieldBlock - ( - tf, - ptfPtr, - output, - arrayRangeVolume_, - regionPolyDecomp_ - ); - - // Convert activated cellZones - convertVolFieldBlock - ( - tf, - ptfPtr, - output, - arrayRangeCellZones_, - zonePolyDecomp_ - ); + // Convert activated internalMesh regions + convertVolFieldBlock + ( + tf, + ptfPtr, + output, + arrayRangeVolume_, + regionPolyDecomp_ + ); + + // Convert activated cellZones + convertVolFieldBlock + ( + tf, + ptfPtr, + output, + arrayRangeCellZones_, + zonePolyDecomp_ + ); + + // Convert activated cellSets + convertVolFieldBlock + ( + tf, + ptfPtr, + output, + arrayRangeCellSets_, + csetPolyDecomp_ + ); + + + // + // Convert patches - if activated + // + for + ( + int partId = arrayRangePatches_.start(); + partId < arrayRangePatches_.end(); + ++partId + ) + { + const word patchName = getPartName(partId); + const label datasetNo = partDataset_[partId]; + const label patchId = patches.findPatchID(patchName); - // Convert activated cellSets - convertVolFieldBlock - ( - tf, - ptfPtr, - output, - arrayRangeCellSets_, - csetPolyDecomp_ - ); + if (!partStatus_[partId] || datasetNo < 0 || patchId < 0) + { + continue; + } + const fvPatchField<Type>& ptf = tf.boundaryField()[patchId]; - // - // Convert patches - if activated - // - for + if ( - int partId = arrayRangePatches_.start(); - partId < arrayRangePatches_.end(); - ++partId + isType<emptyFvPatchField<Type> >(ptf) + || + ( + reader_->GetExtrapolatePatches() + && !polyPatch::constraintType(patches[patchId].type()) + ) ) { - const word patchName = getPartName(partId); - const label datasetNo = partDataset_[partId]; - const label patchId = patches.findPatchID(patchName); + fvPatch p(ptf.patch().patch(), mesh.boundary()); - if (!partStatus_[partId] || datasetNo < 0 || patchId < 0) - { - continue; - } - - const fvPatchField<Type>& ptf = tf.boundaryField()[patchId]; - - if + tmp<Field<Type> > tpptf ( - isType<emptyFvPatchField<Type> >(ptf) - || - ( - reader_->GetExtrapolatePatches() - && !polyPatch::constraintType(patches[patchId].type()) - ) - ) - { - fvPatch p(ptf.patch().patch(), tf.mesh().boundary()); + fvPatchField<Type>(p, tf).patchInternalField() + ); - tmp<Field<Type> > tpptf - ( - fvPatchField<Type>(p, tf).patchInternalField() - ); + convertPatchField + ( + tf.name(), + tpptf(), + output, + arrayRangePatches_, + datasetNo + ); - convertPatchField + if (interpFields) + { + convertPatchPointField ( tf.name(), - tpptf(), + ppInterpList[patchId].faceToPointInterpolate(tpptf)(), output, arrayRangePatches_, datasetNo ); - - if (interpFields) - { - convertPatchPointField - ( - tf.name(), - ppInterpList[patchId].faceToPointInterpolate(tpptf)(), - output, - arrayRangePatches_, - datasetNo - ); - } } - else + } + else + { + convertPatchField + ( + tf.name(), + ptf, + output, + arrayRangePatches_, + datasetNo + ); + + if (interpFields) { - convertPatchField + convertPatchPointField ( tf.name(), - ptf, + ppInterpList[patchId].faceToPointInterpolate(ptf)(), output, arrayRangePatches_, datasetNo ); - - if (interpFields) - { - convertPatchPointField - ( - tf.name(), - ppInterpList[patchId].faceToPointInterpolate(ptf)(), - output, - arrayRangePatches_, - datasetNo - ); - } } } + } + + // + // Convert face zones - if activated + // + for + ( + int partId = arrayRangeFaceZones_.start(); + partId < arrayRangeFaceZones_.end(); + ++partId + ) + { + const word zoneName = getPartName(partId); + const label datasetNo = partDataset_[partId]; + + if (!partStatus_[partId] || datasetNo < 0) + { + continue; + } + + const faceZoneMesh& zMesh = mesh.faceZones(); + const label zoneId = zMesh.findZoneID(zoneName); - // - // Convert face zones - if activated - // - for + if (zoneId < 0) + { + continue; + } + + convertFaceField ( - int partId = arrayRangeFaceZones_.start(); - partId < arrayRangeFaceZones_.end(); - ++partId - ) + tf, + output, + arrayRangeFaceZones_, + datasetNo, + mesh, + zMesh[zoneId] + ); + + // TODO: points + } + + // + // Convert face sets - if activated + // + for + ( + int partId = arrayRangeFaceSets_.start(); + partId < arrayRangeFaceSets_.end(); + ++partId + ) + { + const word selectName = getPartName(partId); + const label datasetNo = partDataset_[partId]; + + if (!partStatus_[partId] || datasetNo < 0) { - const word zoneName = getPartName(partId); - const label datasetNo = partDataset_[partId]; + continue; + } - if (!partStatus_[partId] || datasetNo < 0) - { - continue; - } + const faceSet fSet(mesh, selectName); - const faceZoneMesh& zMesh = mesh.faceZones(); - const label zoneId = zMesh.findZoneID(zoneName); + convertFaceField + ( + tf, + output, + arrayRangeFaceSets_, + datasetNo, + mesh, + fSet.toc() + ); - if (zoneId < 0) - { - continue; - } + // TODO: points + } +} - convertFaceField - ( - tf, - output, - arrayRangeFaceZones_, - datasetNo, - mesh, - zMesh[zoneId] - ); - // TODO: points +template<class Type> +void Foam::vtkPV4Foam::convertVolFields +( + const fvMesh& mesh, + const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList, + const IOobjectList& objects, + const bool interpFields, + vtkMultiBlockDataSet* output +) +{ + forAllConstIter(IOobjectList, objects, iter) + { + // restrict to GeometricField<Type, ...> + if + ( + iter()->headerClassName() + != GeometricField<Type, fvPatchField, volMesh>::typeName + ) + { + continue; } - // - // Convert face sets - if activated - // - for + // Load field + GeometricField<Type, fvPatchField, volMesh> tf + ( + *iter(), + mesh + ); + + // Convert + convertVolField(ppInterpList, tf, interpFields, output); + } +} + + +template<class Type> +void Foam::vtkPV4Foam::convertDimFields +( + const fvMesh& mesh, + const PtrList<PrimitivePatchInterpolation<primitivePatch> >& ppInterpList, + const IOobjectList& objects, + const bool interpFields, + vtkMultiBlockDataSet* output +) +{ + forAllConstIter(IOobjectList, objects, iter) + { + // restrict to DimensionedField<Type, ...> + if ( - int partId = arrayRangeFaceSets_.start(); - partId < arrayRangeFaceSets_.end(); - ++partId + iter()->headerClassName() + != DimensionedField<Type, volMesh>::typeName ) { - const word selectName = getPartName(partId); - const label datasetNo = partDataset_[partId]; + continue; + } - if (!partStatus_[partId] || datasetNo < 0) - { - continue; - } + // Load field + DimensionedField<Type, volMesh> dimFld(*iter(), mesh); + + + // Construct volField with zero-gradient patch fields - const faceSet fSet(mesh, selectName); + IOobject io(dimFld); + io.readOpt() = IOobject::NO_READ; - convertFaceField + PtrList<fvPatchField<Type> > patchFields(mesh.boundary().size()); + forAll(patchFields, patchI) + { + patchFields.set ( - tf, - output, - arrayRangeFaceSets_, - datasetNo, - mesh, - fSet.toc() + patchI, + fvPatchField<Type>::New + ( + zeroGradientFvPatchField<scalar>::typeName, + mesh.boundary()[patchI], + dimFld + ) ); - - // TODO: points } + + GeometricField<Type, fvPatchField, volMesh> volFld + ( + io, + dimFld.mesh(), + dimFld.dimensions(), + dimFld, + patchFields + ); + volFld.correctBoundaryConditions(); + + convertVolField(ppInterpList, volFld, interpFields, output); } } diff --git a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C index 4988fc969f871553df55c3e3f5c36ab1ba092845..83f9bc2ebb92a5c33e650e7dd43f189ee41856a5 100644 --- a/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.C +++ b/applications/utilities/postProcessing/lagrangian/particleTracks/particleTracks.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -247,6 +247,8 @@ int main(int argc, char *argv[]) ); } + Info<< "End\n" << endl; + return 0; } diff --git a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C index 4d2ab943acab92eacfedb38d57d1bb1c0e472c28..2941df5d5a0c2166bbf55c01dbbb0e5893e67d33 100644 --- a/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.C +++ b/applications/utilities/postProcessing/lagrangian/steadyParticleTracks/steadyParticleTracks.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -331,7 +331,7 @@ int main(int argc, char *argv[]) Info<< endl; } - Info<< "\ndone" << endl; + Info<< "End" << nl << endl; return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C index 9f2f03dc54f2a38e151087fdf0a82a35a4737415..6882b0f7eebc9e023177274164acadb9fbf1904a 100644 --- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C +++ b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C @@ -148,7 +148,11 @@ void calc functionObjectList& fol ) { - if (args.optionFound("noFlow")) + if (args.optionFound("noRead")) + { + fol.execute(true); + } + else if (args.optionFound("noFlow")) { Info<< " Operating in no-flow mode; no models will be loaded." << " All vol, surface and point fields will be loaded." << endl; diff --git a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C index 41ca2101798370bdb5957412309acb2a9725b529..3f3213cd3e46bf13c6daf2961788651a0a1a2549 100644 --- a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C +++ b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C @@ -138,6 +138,8 @@ int main(int argc, char *argv[]) Info<< endl; } + Info<< "End" << nl << endl; + return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C index e670d9150f9a9b681c784192af0a19c86dc9e306..873bb53a72ce1cdb2fe5710de453e94da21e0d12 100644 --- a/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C +++ b/applications/utilities/postProcessing/miscellaneous/wdot/wdot.C @@ -49,6 +49,8 @@ int main(int argc, char *argv[]) { runTime.setTime(timeDirs[timeI], timeI); + Info<< "Time = " << runTime.timeName() << endl; + mesh.readUpdate(); volScalarField mgb @@ -114,8 +116,12 @@ int main(int argc, char *argv[]) ); wdot.write(); + + Info<< endl; } + Info<< "End" << nl << endl; + return 0; } diff --git a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C index 7848679a25bac75289980a2776971957e883129d..f03ed13570035c3016eb024c7400406c71c6e66e 100644 --- a/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C +++ b/applications/utilities/postProcessing/scalarField/pPrime2/pPrime2.C @@ -105,6 +105,8 @@ int main(int argc, char *argv[]) Info<< endl; } + Info<< nl << "End" << nl << endl; + return 0; } diff --git a/applications/utilities/postProcessing/velocityField/Mach/Mach.C b/applications/utilities/postProcessing/velocityField/Mach/Mach.C index 39136a389b2547360a721adffad3f6b5e4a6da4d..a65eb0a07ccb22e0b92c206ecf0d40128a9b6845 100644 --- a/applications/utilities/postProcessing/velocityField/Mach/Mach.C +++ b/applications/utilities/postProcessing/velocityField/Mach/Mach.C @@ -144,7 +144,7 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) Info<< " Missing U or T" << endl; } - Info<< "\nEnd\n" << endl; + Info<< nl << "End" << nl << endl; } diff --git a/applications/utilities/postProcessing/velocityField/Pe/Pe.C b/applications/utilities/postProcessing/velocityField/Pe/Pe.C index 999e287d946bd46586466cb2f259f2b8603e6945..9c115c078d21c4b7a97e7c199eeb0fa06eaf2eda 100644 --- a/applications/utilities/postProcessing/velocityField/Pe/Pe.C +++ b/applications/utilities/postProcessing/velocityField/Pe/Pe.C @@ -274,6 +274,8 @@ void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { Info<< " No phi" << endl; } + + Info<< "End" << nl << endl; } diff --git a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C index d9ec3ef4630b5781f0865211fa4262c913c7aba9..94c7f53f840a00cb15a964bf0a96b66089ba0a84 100644 --- a/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C +++ b/applications/utilities/preProcessing/applyBoundaryLayer/applyBoundaryLayer.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -33,6 +33,10 @@ Description the thickness coefficient supplied via the option -Cbl. If both options are provided -ybl is used. + Compressible modes is automatically selected based on the existence of the + "thermophysicalProperties" dictionary required to construct the + thermodynamics package. + \*---------------------------------------------------------------------------*/ #include "fvCFD.H" @@ -331,11 +335,6 @@ int main(int argc, char *argv[]) "scalar", "boundary-layer thickness as Cbl * mean distance to wall" ); - argList::addBoolOption - ( - "compressible", - "apply to compressible case" - ); #include "setRootCase.H" @@ -360,8 +359,6 @@ int main(int argc, char *argv[]) #include "createNamedMesh.H" #include "createFields.H" - const bool compressible = args.optionFound("compressible"); - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Modify velocity by applying a 1/7th power law boundary-layer @@ -384,7 +381,15 @@ int main(int argc, char *argv[]) U.write(); - if (compressible) + if + ( + IOobject + ( + basicThermo::dictName, + runTime.constant(), + mesh + ).headerOk() + ) { calcCompressible(mesh, mask, U, y, ybl); } diff --git a/applications/utilities/preProcessing/boxTurb/boxTurb.C b/applications/utilities/preProcessing/boxTurb/boxTurb.C index 55a35322abad886d8ba68dea721168ca2027fe8e..4ed0356e1cc1976078d4d7c8c7a2931c1ff49322 100644 --- a/applications/utilities/preProcessing/boxTurb/boxTurb.C +++ b/applications/utilities/preProcessing/boxTurb/boxTurb.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -74,7 +74,7 @@ int main(int argc, char *argv[]) runTime.graphFormat() ); - Info<< "end" << endl; + Info<< "End" << nl << endl; return 0; } diff --git a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C index 98906f927d1a4d16b1b08757bb6e6dc4fe536a36..849ef9e7792363740e051c242b8b90074f95cbfa 100644 --- a/applications/utilities/preProcessing/changeDictionary/changeDictionary.C +++ b/applications/utilities/preProcessing/changeDictionary/changeDictionary.C @@ -612,41 +612,51 @@ int main(int argc, char *argv[]) } else { - // Read dictionary. (disable class type checking so we can load - // field) + // Read dictionary + // Note: disable class type checking so we can load field Info<< "Loading dictionary " << fieldName << endl; const word oldTypeName = IOdictionary::typeName; const_cast<word&>(IOdictionary::typeName) = word::null; - IOdictionary fieldDict + IOobject fieldHeader ( - IOobject - ( - fieldName, - instance, - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE, - false - ) + fieldName, + instance, + mesh, + IOobject::MUST_READ_IF_MODIFIED, + IOobject::NO_WRITE, + false ); - const_cast<word&>(IOdictionary::typeName) = oldTypeName; - // Fake type back to what was in field - const_cast<word&>(fieldDict.type()) = fieldDict.headerClassName(); + if (fieldHeader.headerOk()) + { + IOdictionary fieldDict(fieldHeader); - Info<< "Loaded dictionary " << fieldName - << " with entries " << fieldDict.toc() << endl; + const_cast<word&>(IOdictionary::typeName) = oldTypeName; - // Get the replacement dictionary for the field - const dictionary& replaceDict = fieldIter().dict(); - Info<< "Merging entries from " << replaceDict.toc() << endl; + // Fake type back to what was in field + const_cast<word&>(fieldDict.type()) = + fieldDict.headerClassName(); - // Merge the replacements in - merge(fieldDict, replaceDict, literalRE, patchGroups); + Info<< "Loaded dictionary " << fieldName + << " with entries " << fieldDict.toc() << endl; + + // Get the replacement dictionary for the field + const dictionary& replaceDict = fieldIter().dict(); + Info<< "Merging entries from " << replaceDict.toc() << endl; - Info<< "Writing modified fieldDict " << fieldName << endl; - fieldDict.regIOobject::write(); + // Merge the replacements in + merge(fieldDict, replaceDict, literalRE, patchGroups); + + Info<< "Writing modified fieldDict " << fieldName << endl; + fieldDict.regIOobject::write(); + } + else + { + WarningIn(args.executable()) + << "Requested field to change " << fieldName + << " does not exist in " << fieldHeader.path() << endl; + } } } diff --git a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C index 43e86814c39bb039d56185b8db3cf16d0ee01ac5..4652cb2afd9c5f6a54b43dc10e32c757d688b592 100644 --- a/applications/utilities/preProcessing/engineSwirl/engineSwirl.C +++ b/applications/utilities/preProcessing/engineSwirl/engineSwirl.C @@ -72,7 +72,7 @@ int main(int argc, char *argv[]) U.write(); - Info<< "\n end\n"; + Info<< nl << "End" << nl << endl; return 0; } diff --git a/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H b/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H index e753060ce0f161ee68bdc4e2c5fd29eb53ada8ea..7fda691d056ad88b3ec156aadf77217e4e461126 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H +++ b/applications/utilities/surface/surfaceBooleanFeatures/CGAL3DKernel.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H b/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H index 0eba1bee2f3511207ae228de722e73f686e9c78b..e17039cd03407bad863e3ff2ad513ebbf46d20da 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H +++ b/applications/utilities/surface/surfaceBooleanFeatures/CGALIndexedPolyhedron.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C index 462b9a6f05ab278d1cc76188cf930b6bb6a94bda..693237a7eafcca9dfa5bdff001c7916f41f1cf0c 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C +++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H index ef3e88a0ac3ecce27e3e27306807c80754d411df..bf1abc1e2aa4932797d2a58c4a3e68a500cd8b64 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H +++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReader.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C index 53ea3b1b87b5349f578cb7f622121ad1404e0ac6..76a192c10863b859a8b56918b008a5ef105e27bd 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C +++ b/applications/utilities/surface/surfaceBooleanFeatures/PolyhedronReader/PolyhedronReaderTemplates.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C index 7c3fa7eeb12ee6fe9c92005cfafc4889e4d898e5..ee587c503c4270f99b7378ddd150c4ae5640c1c3 100644 --- a/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C +++ b/applications/utilities/surface/surfaceBooleanFeatures/surfaceBooleanFeatures.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index 4a2a4a372d4b3a6dec77fef8f30c6454d436fc03..16989e477150fc943b8823dc5f67121cf3d143c3 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C index a28efdf7dbf9f865fc2b1bdf2fb626d6e00f5396..1263b7813a510f27a18c3d728399c6e3952a14cf 100644 --- a/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C +++ b/applications/utilities/surface/surfaceFeatureConvert/surfaceFeatureConvert.C @@ -61,7 +61,7 @@ int main(int argc, char *argv[]) const fileName importName = args[1]; const fileName exportName = args[2]; - // disable inplace editing + // Disable inplace editing if (importName == exportName) { FatalErrorInFunction @@ -69,7 +69,7 @@ int main(int argc, char *argv[]) << exit(FatalError); } - // check that reading/writing is supported + // Check that reading/writing is supported if ( !edgeMesh::canReadType(importName.ext(), true) diff --git a/applications/utilities/surface/surfaceInflate/surfaceInflate.C b/applications/utilities/surface/surfaceInflate/surfaceInflate.C index 008e6789a23047546a6b9434f8cf677820638739..aeb9b87d1c42548bd987871ad5cbd394e4bf6a8f 100644 --- a/applications/utilities/surface/surfaceInflate/surfaceInflate.C +++ b/applications/utilities/surface/surfaceInflate/surfaceInflate.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C index e8ca9a0125c5906bb12e58053eedab8fd8f2cc2e..5ff45cecc0b1b92b0b300b1e96cf536259ac9e6a 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H index 92c376611f3a6792714b4c8f4379a194ff24c5c4..6c27cc1e1003bedbd051ec0de8d3581e5071cc25 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/autoPatch.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C index 944c2465557ead274ad210e440cb6d91f32bb0e4..39e3a2e29affe4e5d350f0010869431990a27580 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H index fdc7ed1bd7a4c5f00e05fdc010280cf7d71b3450..f794d5e87bda74f0f6bcdb5bf256a1570ecbac3d 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/cut.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C index dab502db72d18844bf918d01b24e1ea5bee9e284..d62fb05927eb1f62420f8f73894da37d9ec51e98 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H index c53eab8ac0f28c2005ee5517b513b4a2c5ca3e3f..effe81d2a8878d31e3cee1ac4f307059acee0d47 100644 --- a/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H +++ b/applications/utilities/surface/surfacePatch/searchableSurfaceModifier/searchableSurfaceModifier.H @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014 OpenFOAM Foundation - \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. diff --git a/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C b/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C index 7af84242b9c3f5490c9187baa8d7eb5ec956dd28..7f7994bdf1ee9254092488033f3bfdc08afcdfd5 100644 --- a/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.C +++ b/applications/utilities/thermophysical/equilibriumCO/equilibriumCO.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -127,7 +127,7 @@ int main(int argc, char *argv[]) Info<< "Kc(EQreactions) = " << iter().Kc(P, T) << endl; } - Info<< nl << "end" << endl; + Info<< nl << "End" << nl << endl; return 0; } diff --git a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C index 4642bde45f519387963b1cb27ec3228533dc2148..424cdc629e63c9c6745bcfa40116ba08eba5e1b4 100644 --- a/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C +++ b/applications/utilities/thermophysical/equilibriumFlameT/equilibriumFlameT.C @@ -273,7 +273,7 @@ int main(int argc, char *argv[]) } } - Info<< nl << "end" << endl; + Info<< nl << "End" << nl << endl; return 0; } diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C index da9a9807c376d7f5efea7246e151fe60ac4fadf2..c0a867c01f8530bb3b5ebafaab162da0ad9cffca 100644 --- a/src/OpenFOAM/db/Time/Time.C +++ b/src/OpenFOAM/db/Time/Time.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -891,7 +891,10 @@ bool Foam::Time::run() const // ie, when exiting the control loop if (!running && timeIndex_ != startTimeIndex_) { - // Note, end() also calls an indirect start() as required + // Ensure functionObjects execute on last time step + // (and hence write uptodate functionObjectProperties) + functionObjects_.execute(); + functionObjects_.end(); } } diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C index 9590eb153c5849beffc8d21c3dd317a5c8862452..35ad1428d0b0e55f2ea46f34afc70f211c1b1db4 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -207,14 +207,6 @@ bool Foam::OutputFilterFunctionObject<OutputFilter>::end() ptr_->end(); - // Only write if - // - time within timeStart_ and timeEnd_ - // - it is an output time - if (active() && outputControl_.output()) - { - ptr_->write(); - } - if (!storeFilter_) { destroyFilter(); diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C index 716717c387c6b247bfc12cc52c74c7f567087895..b592d7f7ee3f08dde7f3f7018fd63628ae22506e 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C @@ -195,21 +195,9 @@ Foam::label Foam::objectRegistry::getEvent() const curEvent = 1; event_ = 2; - for (const_iterator iter = begin(); iter != end(); ++iter) - { - const regIOobject& io = *iter(); - - if (objectRegistry::debug) - { - Pout<< "objectRegistry::getEvent() : " - << "resetting count on " << iter.key() << endl; - } - if (io.eventNo() != 0) - { - const_cast<regIOobject&>(io).eventNo() = curEvent; - } - } + // No need to reset dependent objects; overflow is now handled + // in regIOobject::upToDate } return curEvent; diff --git a/src/OpenFOAM/db/regIOobject/regIOobject.C b/src/OpenFOAM/db/regIOobject/regIOobject.C index c3f86da318f75627c74c3ca236a23dcbc6f9399c..3b3f8a7f17d15e23dca5777fdd5be085c24e0e22 100644 --- a/src/OpenFOAM/db/regIOobject/regIOobject.C +++ b/src/OpenFOAM/db/regIOobject/regIOobject.C @@ -325,14 +325,42 @@ bool Foam::regIOobject::checkOut() bool Foam::regIOobject::upToDate(const regIOobject& a) const { - if (a.eventNo() >= eventNo_) + label da = a.eventNo()-eventNo_; + + // In case of overflow *this.event() might be 2G but a.event() might + // have overflowed to 0. + // Detect this by detecting a massive difference (labelMax/2) between + // the two events. + // + // a *this return + // - ----- ------ + // normal operation: + // 11 10 false + // 11 11 false + // 10 11 true + // overflow situation: + // 0 big false + // big 0 true + + if (da > labelMax/2) { + // *this.event overflowed but a.event not yet + return true; + } + else if (da < -labelMax/2) + { + // a.event overflowed but *this not yet return false; } - else + else if (da < 0) { + // My event number higher than a return true; } + else + { + return false; + } } @@ -342,18 +370,7 @@ bool Foam::regIOobject::upToDate const regIOobject& b ) const { - if - ( - a.eventNo() >= eventNo_ - || b.eventNo() >= eventNo_ - ) - { - return false; - } - else - { - return true; - } + return upToDate(a) && upToDate(b); } @@ -364,19 +381,7 @@ bool Foam::regIOobject::upToDate const regIOobject& c ) const { - if - ( - a.eventNo() >= eventNo_ - || b.eventNo() >= eventNo_ - || c.eventNo() >= eventNo_ - ) - { - return false; - } - else - { - return true; - } + return upToDate(a) && upToDate(b) && upToDate(c); } @@ -388,20 +393,7 @@ bool Foam::regIOobject::upToDate const regIOobject& d ) const { - if - ( - a.eventNo() >= eventNo_ - || b.eventNo() >= eventNo_ - || c.eventNo() >= eventNo_ - || d.eventNo() >= eventNo_ - ) - { - return false; - } - else - { - return true; - } + return upToDate(a) && upToDate(b) && upToDate(c) && upToDate(d); } diff --git a/src/combustionModels/FSD/FSD.C b/src/combustionModels/FSD/FSD.C index 6d846b3d95e07d811ed4d1e539bc6a44f8749e94..ed3cdb602c4c42d51ae33d4042cbe1681e3f879f 100644 --- a/src/combustionModels/FSD/FSD.C +++ b/src/combustionModels/FSD/FSD.C @@ -56,7 +56,7 @@ FSD<CombThermoType, ThermoType>::FSD ( this->coeffs(), this->mesh(), - *this + *this ) ), ft_ @@ -188,21 +188,17 @@ void FSD<CombThermoType, ThermoType>::calculateSourceNorm() volScalarField& omegaFuelBar = tomegaFuel(); // Calculation of the mixture fraction variance (ftVar) - const compressible::LESModel& lesModel = - YO2.db().lookupObject<compressible::LESModel> - ( - turbulenceModel::propertiesName - ); + // TODO: generalize delta for RAS and LES. + const volScalarField& delta = + refCast<const compressible::LESModel>(this->turbulence()).delta(); - const volScalarField& delta = lesModel.delta(); const volScalarField ftVar(Cv_*sqr(delta)*sqr(mgft)); // Thickened flame (average flame thickness for counterflow configuration // is 1.5 mm) - volScalarField deltaF ( - lesModel.delta()/dimensionedScalar("flame", dimLength, 1.5e-3) + delta/dimensionedScalar("flame", dimLength, 1.5e-3) ); // Linear correlation between delta and flame thickness diff --git a/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C b/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C index f26b698b6fec6614f95ea27a700a1dca1ce252fe..2da8036f4443262203904f43aeee13339d6fb898 100644 --- a/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C +++ b/src/combustionModels/FSD/reactionRateFlameAreaModels/relaxation/relaxation.C @@ -123,20 +123,20 @@ void Foam::reactionRateFlameAreaModels::relaxation::correct /(sqr(omega0 - omegaInf) + sqr(omegaMin)) ); - const volScalarField rho(combModel_.rho()); - const surfaceScalarField phi(combModel_.phi()); + tmp<surfaceScalarField> phi(combModel_.phi()); solve ( - fvm::ddt(rho, omega_) + fvm::ddt(omega_) + fvm::div(phi, omega_, "div(phi,omega)") == - rho*Rc*omega0 - - fvm::SuSp(rho*(tau + Rc), omega_) + Rc*omega0 + - fvm::SuSp((tau + Rc), omega_) ); omega_.min(omega0); omega_.max(0.0); + } diff --git a/src/combustionModels/Make/files b/src/combustionModels/Make/files index b68fbb742f273498a2ad7a76f0436b7d665aa45e..f1f87e9cfbb9bb203a494940844d9c250ef49208 100644 --- a/src/combustionModels/Make/files +++ b/src/combustionModels/Make/files @@ -17,12 +17,15 @@ PaSR/PaSRs.C laminar/laminars.C +/* FSD/reactionRateFlameAreaModels/consumptionSpeed/consumptionSpeed.C FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameArea.C FSD/reactionRateFlameAreaModels/reactionRateFlameArea/reactionRateFlameAreaNew.C FSD/reactionRateFlameAreaModels/relaxation/relaxation.C - FSD/FSDs.C +*/ + +diffusionMulticomponent/diffusionMulticomponents.C noCombustion/noCombustions.C diff --git a/src/combustionModels/combustionModel/combustionModel.H b/src/combustionModels/combustionModel/combustionModel.H index 5368d1af801c6111f22e0580fd87eeac42c482c2..badd4848294db278c4d07cfd8f7f01a5c882d010 100644 --- a/src/combustionModels/combustionModel/combustionModel.H +++ b/src/combustionModels/combustionModel/combustionModel.H @@ -112,9 +112,9 @@ public: inline const fvMesh& mesh() const; //- Return const access to phi - inline const surfaceScalarField& phi() const; + inline tmp<surfaceScalarField> phi() const; - //- Return const access to rho + //- Returns rho virtual tmp<volScalarField> rho() const = 0; //- Return access to turbulence diff --git a/src/combustionModels/combustionModel/combustionModelI.H b/src/combustionModels/combustionModel/combustionModelI.H index e095c5f7e04baef8494ee541edf4c29490bc9f81..140f8c9bb5ed9b8e66ceead09630d4405ca88817 100644 --- a/src/combustionModels/combustionModel/combustionModelI.H +++ b/src/combustionModels/combustionModel/combustionModelI.H @@ -31,7 +31,7 @@ inline const Foam::fvMesh& Foam::combustionModel::mesh() const } -inline const Foam::surfaceScalarField& Foam::combustionModel::phi() const +inline Foam::tmp<Foam::surfaceScalarField> Foam::combustionModel::phi() const { if (turbulencePtr_) { @@ -42,7 +42,7 @@ inline const Foam::surfaceScalarField& Foam::combustionModel::phi() const FatalErrorInFunction << "turbulencePtr_ is empty. Please use " << "combustionModel::setTurbulence " - << "(compressibleTurbulenceModel& )" + << "(compressibleTurbulenceModel&)" << abort(FatalError); return turbulencePtr_->phi(); diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C new file mode 100644 index 0000000000000000000000000000000000000000..bc60afe054adb6a1fcbd64e49871e2532dd0a9f3 --- /dev/null +++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.C @@ -0,0 +1,515 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "diffusionMulticomponent.H" +#include "fvcGrad.H" +#include "reactingMixture.H" +#include "fvCFD.H" +#include "mathematicalConstants.H" + +// * * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * // + +template<class CombThermoType, class ThermoType> +void Foam::combustionModels:: +diffusionMulticomponent<CombThermoType, ThermoType>::init() +{ + // Load default values + if (this->coeffs().found("Ci")) + { + this->coeffs().lookup("Ci") >> Ci_; + } + + if (this->coeffs().found("YoxStream")) + { + this->coeffs().lookup("YoxStream") >> YoxStream_; + } + + if (this->coeffs().found("YfStream")) + { + this->coeffs().lookup("YfStream") >> YfStream_; + } + + if (this->coeffs().found("sigma")) + { + this->coeffs().lookup("sigma") >> sigma_; + } + + if (this->coeffs().found("ftCorr")) + { + this->coeffs().lookup("ftCorr") >> ftCorr_; + } + + if (this->coeffs().found("alpha")) + { + alpha_ = readScalar(this->coeffs().lookup("alpha")); + } + + if (this->coeffs().found("laminarIgn")) + { + this->coeffs().lookup("laminarIgn") >> laminarIgn_; + } + + typedef typename Reaction<ThermoType>::specieCoeffs specieCoeffs; + + const speciesTable& species = this->thermo().composition().species(); + + scalarList specieStoichCoeffs(species.size()); + const label nReactions = reactions_.size(); + + for (label k=0; k < nReactions; k++) + { + RijPtr_.set + ( + k, + new volScalarField + ( + IOobject + ( + "Rijk" + name(k), + this->mesh_.time().timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->mesh_, + dimensionedScalar("Rij", dimMass/dimTime/dimVolume, 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + RijPtr_[k].storePrevIter(); + + const List<specieCoeffs>& lhs = reactions_[k].lhs(); + const List<specieCoeffs>& rhs = reactions_[k].rhs(); + + const label fuelIndex = species[fuelNames_[k]]; + const label oxydantIndex = species[oxydantNames_[k]]; + + const scalar Wu = specieThermo_[fuelIndex].W(); + const scalar Wox = specieThermo_[oxydantIndex].W(); + + forAll(lhs, i) + { + const label specieI = lhs[i].index; + specieStoichCoeffs[specieI] = -lhs[i].stoichCoeff; + qFuel_[k] += + specieThermo_[specieI].hc()*lhs[i].stoichCoeff/Wu; + } + + forAll(rhs, i) + { + const label specieI = rhs[i].index; + specieStoichCoeffs[specieI] = rhs[i].stoichCoeff; + qFuel_[k] -= + specieThermo_[specieI].hc()*rhs[i].stoichCoeff/Wu; + } + + Info << "Fuel heat of combustion : " << qFuel_[k] << endl; + + s_[k] = + (Wox*mag(specieStoichCoeffs[oxydantIndex])) + / (Wu*mag(specieStoichCoeffs[fuelIndex])); + + Info << "stoichiometric oxygen-fuel ratio : " << s_[k] << endl; + + stoicRatio_[k] = s_[k]*YfStream_[k]/YoxStream_[k]; + + Info << "stoichiometric air-fuel ratio : " << stoicRatio_[k] << endl; + + const scalar fStoich = 1.0/(1.0 + stoicRatio_[k]); + + Info << "stoichiometric mixture fraction : " << fStoich << endl; + + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CombThermoType, class ThermoType> +Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: +diffusionMulticomponent +( + const word& modelType, const fvMesh& mesh, const word& phaseName +) +: + CombThermoType(modelType, mesh, phaseName), + reactions_ + ( + dynamic_cast<const reactingMixture<ThermoType>&>(this->thermo()) + ), + specieThermo_ + ( + dynamic_cast<const reactingMixture<ThermoType>&> + (this->thermo()).speciesData() + ), + RijPtr_(reactions_.size()), + Ci_(reactions_.size(), 1.0), + fuelNames_(this->coeffs().lookup("fuels")), + oxydantNames_(this->coeffs().lookup("oxydants")), + qFuel_(reactions_.size()), + stoicRatio_(reactions_.size()), + s_(reactions_.size()), + YoxStream_(reactions_.size(), 0.23), + YfStream_(reactions_.size(), 1.0), + sigma_(reactions_.size(), 0.02), + oxydantRes_(this->coeffs().lookup("oxydantRes")), + ftCorr_(reactions_.size(), 0.0), + alpha_(1), + laminarIgn_(false) +{ + init(); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CombThermoType, class ThermoType> +Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: +~diffusionMulticomponent() +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +template<class CombThermoType, class ThermoType> +Foam::tmp<Foam::volScalarField> Foam::combustionModels:: +diffusionMulticomponent<CombThermoType, ThermoType>::tc() const +{ + return this->chemistryPtr_->tc(); +} + + +template<class CombThermoType, class ThermoType> +void Foam::combustionModels:: +diffusionMulticomponent<CombThermoType, ThermoType>::correct() +{ + if (this->active()) + { + typedef typename Reaction<ThermoType>::specieCoeffs specieCoeffs; + const speciesTable& species = this->thermo().composition().species(); + + const label nReactions = reactions_.size(); + + PtrList<volScalarField> RijlPtr(nReactions); + + for (label k=0; k < nReactions; k++) + { + + RijlPtr.set + ( + k, + new volScalarField + ( + IOobject + ( + "Rijl" + word(k), + this->mesh_.time().timeName(), + this->mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->mesh_, + dimensionedScalar("Rijl", dimMass/dimTime/dimVolume, 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + volScalarField& Rijl = RijlPtr[k]; + + // Obtain individual reaction rates for each reaction + const label fuelIndex = species[fuelNames_[k]]; + + if (laminarIgn_) + { + Rijl.dimensionedInternalField() = + -this->chemistryPtr_->calculateRR(k, fuelIndex); + } + + + // Look for the fuelStoic + const List<specieCoeffs>& rhs = reactions_[k].rhs(); + const List<specieCoeffs>& lhs = reactions_[k].lhs(); + + // Set to zero RR's + forAll (lhs, l) + { + const label lIndex = lhs[l].index; + this->chemistryPtr_->RR(lIndex) = + dimensionedScalar("zero", dimMass/dimTime/dimVolume, 0.0); + } + + forAll (rhs, l) + { + const label rIndex = rhs[l].index; + this->chemistryPtr_->RR(rIndex) = + dimensionedScalar("zero", dimMass/dimTime/dimVolume, 0.0); + } + } + + + for (label k=0; k < nReactions; k++) + { + const label fuelIndex = species[fuelNames_[k]]; + const label oxydantIndex = species[oxydantNames_[k]]; + + const volScalarField& Yfuel = + this->thermo().composition().Y(fuelIndex); + + const volScalarField& Yox = + this->thermo().composition().Y(oxydantIndex); + + const volScalarField ft + ( + "ft" + name(k), + ( + s_[k]*Yfuel + - (Yox - YoxStream_[k]) + ) + / + ( + s_[k]*YfStream_[k] + YoxStream_[k] + ) + ); + + const scalar sigma = sigma_[k]; + + const scalar fStoich = 1.0/(1.0 + stoicRatio_[k]) + ftCorr_[k]; + + const volScalarField OAvailScaled + ( + "OAvailScaled", + Yox/max(oxydantRes_[k], 1e-3) + ); + + const volScalarField preExp + ( + "preExp" + name(k), + 1.0 + sqr(OAvailScaled) + ); + + const volScalarField filter + ( + (1.0/(sigma*sqrt(2.0*constant::mathematical::pi))) + * exp(-sqr(ft - fStoich)/(2*sqr(sigma))) + ); + + const volScalarField topHatFilter + ( + pos(filter - 1e-3) + ); + + const volScalarField prob + ( + "prob" + name(k), preExp*filter + ); + + const volScalarField RijkDiff + ( + "RijkDiff", + Ci_[k]*this->turbulence().muEff()*prob* + ( + mag(fvc::grad(Yfuel) & fvc::grad(Yox)) + ) + *pos(Yox)*pos(Yfuel) + ); + + volScalarField& Rijk = RijPtr_[k]; + + if (laminarIgn_) + { + Rijk = + min(RijkDiff, topHatFilter*RijlPtr[k]*pos(Yox)*pos(Yfuel)); + } + else + { + Rijk = RijkDiff; + } + + Rijk.relax(alpha_); + + if (this->mesh_.time().outputTime() && debug) + { + Rijk.write(); + ft.write(); + } + + // Look for the fuelStoic + const List<specieCoeffs>& rhs = reactions_[k].rhs(); + const List<specieCoeffs>& lhs = reactions_[k].lhs(); + + scalar fuelStoic = 1.0; + forAll (lhs, l) + { + const label lIndex = lhs[l].index; + if (lIndex == fuelIndex) + { + fuelStoic = lhs[l].stoichCoeff; + break; + } + } + + const scalar MwFuel = specieThermo_[fuelIndex].W(); + + // Update left hand side species + forAll (lhs, l) + { + const label lIndex = lhs[l].index; + + const scalar stoichCoeff = lhs[l].stoichCoeff; + + this->chemistryPtr_->RR(lIndex) += + -Rijk*stoichCoeff*specieThermo_[lIndex].W() + /fuelStoic/MwFuel; + + } + + // Update right hand side species + forAll (rhs, r) + { + const label rIndex = rhs[r].index; + + const scalar stoichCoeff = rhs[r].stoichCoeff; + + this->chemistryPtr_->RR(rIndex) += + Rijk*stoichCoeff*specieThermo_[rIndex].W() + /fuelStoic/MwFuel; + } + } + } +} + + +template<class CombThermoType, class ThermoType> +Foam::tmp<Foam::fvScalarMatrix> +Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: +R(volScalarField& Y) const +{ + tmp<fvScalarMatrix> tSu(new fvScalarMatrix(Y, dimMass/dimTime)); + + fvScalarMatrix& Su = tSu(); + + if (this->active()) + { + const label specieI = this->thermo().composition().species()[Y.name()]; + Su += this->chemistryPtr_->RR(specieI); + } + + return tSu; +} + + +template<class CombThermoType, class ThermoType> +Foam::tmp<Foam::volScalarField> +Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: +dQ() const +{ + tmp<volScalarField> tdQ + ( + new volScalarField + ( + IOobject + ( + "dQ", + this->mesh().time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->mesh(), + dimensionedScalar("dQ", dimEnergy/dimTime, 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + if (this->active()) + { + volScalarField& dQ = tdQ(); + dQ = this->chemistryPtr_->dQ(); + } + + return tdQ; +} + + +template<class CombThermoType, class ThermoType> +Foam::tmp<Foam::volScalarField> +Foam::combustionModels::diffusionMulticomponent<CombThermoType, ThermoType>:: +Sh() const +{ + tmp<volScalarField> tSh + ( + new volScalarField + ( + IOobject + ( + "Sh", + this->mesh().time().timeName(), + this->mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false + ), + this->mesh(), + dimensionedScalar("zero", dimEnergy/dimTime/dimVolume, 0.0), + zeroGradientFvPatchScalarField::typeName + ) + ); + + if (this->active()) + { + scalarField& Sh = tSh(); + Sh = this->chemistryPtr_->Sh(); + } + + return tSh; +} + + +template<class CombThermoType, class ThermoType> +bool Foam::combustionModels:: +diffusionMulticomponent<CombThermoType, ThermoType>::read() +{ + if (CombThermoType::read()) + { + this->coeffs().readIfPresent("Ci", Ci_); + this->coeffs().readIfPresent("sigma", sigma_); + this->coeffs().readIfPresent("oxydantRes", oxydantRes_); + this->coeffs().readIfPresent("ftCorr", ftCorr_); + this->coeffs().readIfPresent("alpha", alpha_); + this->coeffs().readIfPresent("laminarIgn", laminarIgn_); + return true; + } + else + { + return false; + } +} + + +// ************************************************************************* // diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H new file mode 100644 index 0000000000000000000000000000000000000000..2d6b9531f74f1b4c282e9c6d09e39165273c9af0 --- /dev/null +++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponent.H @@ -0,0 +1,224 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 OpenCFD Ltd + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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::combustionModels::diffusionMulticomponent + +Description + + Diffusion based turbulent combustion model for multicomponent species. + + The model calculates the laminar finite rate source terms based on + the kinetic for each reaction in order to begin the combustion and + evaluates the minimum between this and the cross diffusion rate term + defined as D*prob*muEff*mag(grad(Yi)*grad(Yj)) if laminarIgn is true. + + where: + + D : is a model constant. + muEff : is the effective turbulent diffusivity + prob : is a Gaussian shaped distribution around the stoichiometric value + of each reaction. The distribtion has the input parameter 'sigma' + for standard deviation. + + The variable prob is multiplied by the factor: 1 + pow2(O2/oxydantRes), + where oxydantRes is the residual oxydant specified for each reaction. + + In the combustion properties dictionary: + + diffusionMulticomponentCoeffs + { + Ci (1.0 1.0); // Default to 1 + fuels (CH4 CO); + oxydants (O2 O2); + YoxStream (0.23 0.23); // Default to 0.23 + YfStream (1.0 1.0); // Default to 1.0 + sigma (0.02 0.02); // Default to 0.02 + oxydantRes (0.025 0.005); + ftCorr (0.0 0.0); // Default to 0.0 + laminarIgn false; // Default false + } + + ftCorr is used to shift the location of the flame and corrects the + stochimetric mixture value when the mesh resolution is not enough + to resolve the combustion zone. + + NOTE: Optionally the switch 'laminarIgn' can be used to ignite the mixture + using laminar combustion. + + +SourceFiles + diffusionMulticomponent.C + +\*---------------------------------------------------------------------------*/ + +#ifndef diffusionMulticomponent_H +#define diffusionMulticomponent_H + +#include "scalarList.H" +#include "tmp.H" +#include "Reaction.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace combustionModels +{ + +/*---------------------------------------------------------------------------*\ + Class diffusionMulticomponent Declaration +\*---------------------------------------------------------------------------*/ + +template<class CombThermoType, class ThermoType> +class diffusionMulticomponent +: + public CombThermoType +{ + // Private data + + //- Reactions + const PtrList<Reaction<ThermoType> >& reactions_; + + //- Thermodynamic data of the species + const PtrList<ThermoType>& specieThermo_; + + //- Pointer list of source terms + PtrList<volScalarField> RijPtr_; + + //- Model constants + scalarList Ci_; + + //- List of fuels for each reaction + wordList fuelNames_; + + //- List of oxydants for each reaction + wordList oxydantNames_; + + //- Heat of combustion [J/Kg] + scalarList qFuel_; + + //- Stoichiometric air-fuel mass ratio + scalarList stoicRatio_; + + //- Stoichiometric oxygen-fuel mass ratio + scalarList s_; + + //- Oxydaser sream mass concentrations + scalarList YoxStream_; + + //- Fuel stream mass concentrations + scalarList YfStream_; + + //- Mean distribution for gaussian probabililty + scalarList sigma_; + + //- Residual oxydaser + scalarList oxydantRes_; + + //- ft stochiometric correction + scalarList ftCorr_; + + //- Relaxatnio factor on total source + scalar alpha_; + + //- Switch on to laminar combustion for ignition + bool laminarIgn_; + + + // Private Member Functions + + //- Return the chemical time scale + tmp<volScalarField> tc() const; + + //- Initialize + void init(); + + //- Disallow copy construct + diffusionMulticomponent(const diffusionMulticomponent&); + + //- Disallow default bitwise assignment + void operator=(const diffusionMulticomponent&); + + +public: + + //- Runtime type information + TypeName("diffusionMulticomponent"); + + + // Constructors + + //- Construct from components + diffusionMulticomponent + ( + const word& modelType, + const fvMesh& mesh, + const word& phaseName + ); + + + //- Destructor + virtual ~diffusionMulticomponent(); + + + // Member Functions + + // Evolution + + //- Correct combustion rate + virtual void correct(); + + //- Fuel consumption rate matrix. + virtual tmp<fvScalarMatrix> R(volScalarField& Y) const; + + //- Heat release rate calculated from fuel consumption rate matrix + virtual tmp<volScalarField> dQ() const; + + //- Return source for enthalpy equation [kg/m/s3] + virtual tmp<volScalarField> Sh() const; + + + // IO + + //- Update properties from given dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace combustionModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "diffusionMulticomponent.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C new file mode 100644 index 0000000000000000000000000000000000000000..3aa6b7940190776c1192832212d44dd9cc589244 --- /dev/null +++ b/src/combustionModels/diffusionMulticomponent/diffusionMulticomponents.C @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 "makeCombustionTypes.H" + +#include "thermoPhysicsTypes.H" +#include "psiChemistryCombustion.H" +#include "rhoChemistryCombustion.H" +#include "diffusionMulticomponent.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Combustion models based on sensibleEnthalpy + +makeCombustionTypesThermo +( + diffusionMulticomponent, + psiChemistryCombustion, + gasHThermoPhysics, + psiCombustionModel +); + +makeCombustionTypesThermo +( + diffusionMulticomponent, + rhoChemistryCombustion, + gasHThermoPhysics, + rhoCombustionModel +); + +makeCombustionTypesThermo +( + diffusionMulticomponent, + rhoChemistryCombustion, + incompressibleGasHThermoPhysics, + rhoCombustionModel +); + +// ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C index 9eac00835fdba3bb5292a79f2d2b10df04d74470..9b5e347fbd20ab75f8ccf01673f037b193ae8657 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.C @@ -68,54 +68,6 @@ Foam::pressurePIDControlInletVelocityFvPatchVectorField::facePressure() const } -template <class Type> -void Foam::pressurePIDControlInletVelocityFvPatchVectorField::faceZoneAverage -( - const word& name, - const GeometricField<Type, fvsPatchField, surfaceMesh>& field, - scalar& area, - Type& average -) const -{ - const fvMesh& mesh(patch().boundaryMesh().mesh()); - - PackedBoolList isMasterFace(syncTools::getInternalOrMasterFaces(mesh)); - - const faceZone& zone = mesh.faceZones()[name]; - - area = 0; - average = pTraits<Type>::zero; - - forAll(zone, faceI) - { - const label f(zone[faceI]); - - if (mesh.isInternalFace(f)) - { - const scalar da(mesh.magSf()[f]); - - area += da; - average += da*field[f]; - } - else if (isMasterFace[f]) - { - const label bf(f-mesh.nInternalFaces()); - const label patchID = mesh.boundaryMesh().patchID()[bf]; - const label lf(mesh.boundaryMesh()[patchID].whichFace(f)); - const scalar da(mesh.magSf().boundaryField()[patchID][lf]); - - area += da; - average += da*field.boundaryField()[patchID][lf]; - } - } - - reduce(area, sumOp<scalar>()); - reduce(average, sumOp<Type>()); - - average /= area; -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::pressurePIDControlInletVelocityFvPatchVectorField:: diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H index d6f6cf765e5137971cece89b50c19c6f7734401d..dac45b242d9daa2d963f5fe353b2a4e231820a99 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H +++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorField.H @@ -274,6 +274,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository +# include "pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..6bd1d95bc561de129300c6460059e6c178b69f0a --- /dev/null +++ b/src/finiteVolume/fields/fvPatchFields/derived/pressurePIDControlInletVelocity/pressurePIDControlInletVelocityFvPatchVectorFieldTemplates.C @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 "surfaceFields.H" +#include "syncTools.H" + +// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // + +template <class Type> +void Foam::pressurePIDControlInletVelocityFvPatchVectorField::faceZoneAverage +( + const word& name, + const GeometricField<Type, fvsPatchField, surfaceMesh>& field, + scalar& area, + Type& average +) const +{ + const fvMesh& mesh(patch().boundaryMesh().mesh()); + + PackedBoolList isMasterFace(syncTools::getInternalOrMasterFaces(mesh)); + + const faceZone& zone = mesh.faceZones()[name]; + + area = 0; + average = pTraits<Type>::zero; + + forAll(zone, faceI) + { + const label f(zone[faceI]); + + if (mesh.isInternalFace(f)) + { + const scalar da(mesh.magSf()[f]); + + area += da; + average += da*field[f]; + } + else if (isMasterFace[f]) + { + const label bf(f-mesh.nInternalFaces()); + const label patchID = mesh.boundaryMesh().patchID()[bf]; + const label lf(mesh.boundaryMesh()[patchID].whichFace(f)); + const scalar da(mesh.magSf().boundaryField()[patchID][lf]); + + area += da; + average += da*field.boundaryField()[patchID][lf]; + } + } + + reduce(area, sumOp<scalar>()); + reduce(average, sumOp<Type>()); + + average /= area; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/coalCombustion/Make/options b/src/lagrangian/coalCombustion/Make/options index 04b133ba05321d3e8e29079eba7602c5e8744ccc..87e1d6a7102e0b872d994a0be3c72aaa803a6bb6 100644 --- a/src/lagrangian/coalCombustion/Make/options +++ b/src/lagrangian/coalCombustion/Make/options @@ -18,6 +18,7 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude @@ -43,6 +44,7 @@ LIB_LIBS = \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ + -ldynamicMesh \ -ldynamicFvMesh \ -lfiniteVolume \ -lmeshTools diff --git a/src/lagrangian/intermediate/Make/files b/src/lagrangian/intermediate/Make/files index 9cadf55117b49ed1c79380a9e37e213b68a2acf7..3abb93961e19dfed3be4b533676d62cd5f79e2e6 100644 --- a/src/lagrangian/intermediate/Make/files +++ b/src/lagrangian/intermediate/Make/files @@ -1,3 +1,5 @@ +submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C + PARCELS=parcels BASEPARCELS=$(PARCELS)/baseClasses DERIVEDPARCELS=$(PARCELS)/derived diff --git a/src/lagrangian/intermediate/Make/options b/src/lagrangian/intermediate/Make/options index a5a3b3c8ebdb14fa2fd410aabc9fe451f0e84b4c..dc893c1148def8bdc4d1b3388691a6ed4cb48a56 100644 --- a/src/lagrangian/intermediate/Make/options +++ b/src/lagrangian/intermediate/Make/options @@ -14,6 +14,7 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -35,6 +36,7 @@ LIB_LIBS = \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ + -ldynamicMesh \ -ldynamicFvMesh \ -lsampling \ -lfiniteVolume \ diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C index d761e5f17a56a657ce18042d47a07320934a4d5f..c609b2d27261f2bea0a0ed1b7f2b9007ef6b7f2b 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.C @@ -28,11 +28,7 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // -Foam::cloudSolution::cloudSolution -( - const fvMesh& mesh, - const dictionary& dict -) +Foam::cloudSolution::cloudSolution(const fvMesh& mesh, const dictionary& dict) : mesh_(mesh), dict_(dict), @@ -42,6 +38,7 @@ Foam::cloudSolution::cloudSolution maxCo_(0.3), iter_(1), trackTime_(0.0), + deltaTMax_(GREAT), coupled_(false), cellValueSourceCorrection_(false), maxTrackTime_(0.0), @@ -52,13 +49,25 @@ Foam::cloudSolution::cloudSolution { read(); } + else + { + // see if existing source terms should be reset + const dictionary sourceTerms(dict_.subOrEmptyDict("sourceTerms")); + sourceTerms.readIfPresent("resetOnStartup", resetSourcesOnStartup_); + + if (resetSourcesOnStartup_) + { + Info<< "Cloud source terms will be reset" << endl; + } + else + { + Info<< "Cloud source terms will be held constant" << endl; + } + } } -Foam::cloudSolution::cloudSolution -( - const cloudSolution& cs -) +Foam::cloudSolution::cloudSolution(const cloudSolution& cs) : mesh_(cs.mesh_), dict_(cs.dict_), @@ -68,6 +77,7 @@ Foam::cloudSolution::cloudSolution maxCo_(cs.maxCo_), iter_(cs.iter_), trackTime_(cs.trackTime_), + deltaTMax_(cs.deltaTMax_), coupled_(cs.coupled_), cellValueSourceCorrection_(cs.cellValueSourceCorrection_), maxTrackTime_(cs.maxTrackTime_), @@ -76,10 +86,7 @@ Foam::cloudSolution::cloudSolution {} -Foam::cloudSolution::cloudSolution -( - const fvMesh& mesh -) +Foam::cloudSolution::cloudSolution(const fvMesh& mesh) : mesh_(mesh), dict_(dictionary::null), @@ -89,6 +96,7 @@ Foam::cloudSolution::cloudSolution maxCo_(GREAT), iter_(0), trackTime_(0.0), + deltaTMax_(GREAT), coupled_(false), cellValueSourceCorrection_(false), maxTrackTime_(0.0), @@ -111,6 +119,7 @@ void Foam::cloudSolution::read() dict_.lookup("coupled") >> coupled_; dict_.lookup("cellValueSourceCorrection") >> cellValueSourceCorrection_; dict_.readIfPresent("maxCo", maxCo_); + dict_.readIfPresent("deltaTMax", deltaTMax_); if (steadyState()) { @@ -229,4 +238,23 @@ bool Foam::cloudSolution::output() const } +Foam::scalar Foam::cloudSolution::deltaTMax(const scalar trackTime) const +{ + if (transient_) + { + return min(deltaTMax_, maxCo_*trackTime); + } + else + { + return min(deltaTMax_, trackTime); + } +} + + +Foam::scalar Foam::cloudSolution::deltaLMax(const scalar lRef) const +{ + return maxCo_*lRef; +} + + // ************************************************************************* // diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H index e155abc375b3250e3e7ee5620eb6d363df559dcf..01e5c880253441b132131e7569315cf9f7cbbc89 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolution.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 @@ -80,6 +80,9 @@ class cloudSolution //- Particle track time scalar trackTime_; + //- Maximum integration time step (optional) + scalar deltaTMax_; + // Run-time options @@ -171,6 +174,9 @@ public: //- Return the particle track time inline scalar trackTime() const; + //- Return the maximum integation time step + inline scalar deltaTMax() const; + //- Return const access to the coupled flag inline const Switch coupled() const; @@ -207,6 +213,12 @@ public: //- Returns true if writing this step bool output() const; + + //- Return the maximum integration time + scalar deltaTMax(const scalar trackTime) const; + + //- Return the maximum integration length + scalar deltaLMax(const scalar lRef) const; }; diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H index 6280b97837d77c6cf841a77a411daa69e15d9319..27b0b38fde894d877687569709ddcb3b3a385ecb 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/cloudSolution/cloudSolutionI.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 @@ -101,6 +101,12 @@ inline Foam::scalar Foam::cloudSolution::trackTime() const } +inline Foam::scalar Foam::cloudSolution::deltaTMax() const +{ + return deltaTMax_; +} + + inline Foam::Switch& Foam::cloudSolution::coupled() { return coupled_; diff --git a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C index db56ae68fcbafbb7a2f22aeac889b422778aa5fe..b5715726b4ad9013c6cdd08122e95af896042249 100644 --- a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C @@ -80,15 +80,15 @@ Foam::MPPICCloud<CloudType>::MPPICCloud dampingModel_(NULL), isotropyModel_(NULL) { - if (this->solution().steadyState()) - { - FatalErrorInFunction - << "MPPIC modelling not available for steady state calculations" - << exit(FatalError); - } - if (this->solution().active()) { + if (this->solution().steadyState()) + { + FatalErrorInFunction + << "MPPIC modelling not available for steady state calculations" + << exit(FatalError); + } + setModels(); if (readFields) diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 69666feddec17c4599cd8c726d3f7763688c2d68..24c9cc1b9d04cb1e871e5d3713ef53f634ccee19 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -51,10 +51,7 @@ void Foam::ThermoCloud<CloudType>::setModels() ).ptr() ); - if (this->solution().coupled()) - { - this->subModelProperties().lookup("radiation") >> radiation_; - } + this->subModelProperties().lookup("radiation") >> radiation_; if (radiation_) { diff --git a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C index e7471bbd68412bd625040d8ba88bbdb3c4f5b1f9..500ac6fb3eb7ba984e05e372631c11fb48f1ce68 100644 --- a/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/CollidingParcel/CollidingParcel.C @@ -69,6 +69,8 @@ bool Foam::CollidingParcel<ParcelType>::move typename TrackData::cloudType::parcelType& p = static_cast<typename TrackData::cloudType::parcelType&>(*this); + td.keepParticle = true; + switch (td.part()) { case TrackData::tpVelocityHalfStep: diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C index b7a2d9cf7c80cdca0d471cfefdc049b1a63a713c..8595876eb41f22ce1c9ca4feb581dedeecce3015 100644 --- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.C @@ -27,6 +27,7 @@ License #include "forceSuSp.H" #include "IntegrationScheme.H" #include "meshTools.H" +#include "cloudSolution.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // @@ -264,15 +265,11 @@ bool Foam::KinematicParcel<ParcelType>::move const polyMesh& mesh = td.cloud().pMesh(); const polyBoundaryMesh& pbMesh = mesh.boundaryMesh(); + const cloudSolution& solution = td.cloud().solution(); const scalarField& cellLengthScale = td.cloud().cellLengthScale(); - const scalar maxCo = td.cloud().solution().maxCo(); scalar tEnd = (1.0 - p.stepFraction())*trackTime; - scalar dtMax = trackTime; - if (td.cloud().solution().transient()) - { - dtMax *= maxCo; - } + scalar dtMax = solution.deltaTMax(trackTime); bool tracking = true; label nTrackingStalled = 0; @@ -294,7 +291,8 @@ bool Foam::KinematicParcel<ParcelType>::move if (p.active() && tracking && (magU > ROOTVSMALL)) { const scalar d = dt*magU; - const scalar dCorr = min(d, maxCo*cellLengthScale[cellI]); + const scalar deltaLMax = solution.deltaLMax(cellLengthScale[cellI]); + const scalar dCorr = min(d, deltaLMax); dt *= dCorr/d *p.trackToFace(p.position() + dCorr*U_/magU, td); @@ -302,7 +300,7 @@ bool Foam::KinematicParcel<ParcelType>::move tEnd -= dt; - scalar newStepFraction = 1.0 - tEnd/trackTime; + const scalar newStepFraction = 1.0 - tEnd/trackTime; if (tracking) { @@ -328,7 +326,7 @@ bool Foam::KinematicParcel<ParcelType>::move p.stepFraction() = newStepFraction; bool calcParcel = true; - if (!tracking && td.cloud().solution().steadyState()) + if (!tracking && solution.steadyState()) { calcParcel = false; } @@ -339,7 +337,7 @@ bool Foam::KinematicParcel<ParcelType>::move // Update cell based properties p.setCellValues(td, dt, cellI); - if (td.cloud().solution().cellValueSourceCorrection()) + if (solution.cellValueSourceCorrection()) { p.cellValueSourceCorrection(td, dt, cellI); } @@ -459,6 +457,8 @@ void Foam::KinematicParcel<ParcelType>::hitPatch ) { td.keepParticle = false; + + td.cloud().patchInteraction().addToEscapedParcels(nParticle_*mass()); } diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index 289127b18bd3632fffc40b52aebe1e2d0ef135e3..2f050e26ae5f2fa35dddde19d3290b070aaae51a 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -121,7 +121,13 @@ Foam::scalar Foam::ReactingMultiphaseParcel<ParcelType>::updateMassFractions YMix[GAS] = massGas/massNew; YMix[LIQ] = massLiquid/massNew; - YMix[SLD] = 1.0 - YMix[GAS] - YMix[LIQ]; + YMix[SLD] = massSolid/massNew; + + scalar Ytotal = sum(YMix); + + YMix[GAS] /= Ytotal; + YMix[LIQ] /= Ytotal; + YMix[SLD] /= Ytotal; return massNew; } diff --git a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C index cbbf563fa4aaf508c0a67c18384b87f4b22779bc..98e0c16756fb069908f84eea22e689effee66f1d 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ThermoParcel/ThermoParcel.C @@ -73,6 +73,9 @@ void Foam::ThermoParcel<ParcelType>::cellValueSourceCorrection this->Uc_ += td.cloud().UTrans()[cellI]/this->massCell(cellI); const scalar CpMean = td.CpInterp().psi()[cellI]; + + tetIndices tetIs = this->currentTetIndices(); + Tc_ = td.TInterp().interpolate(this->position(), tetIs); Tc_ += td.cloud().hsTrans()[cellI]/(CpMean*this->massCell(cellI)); if (Tc_ < td.cloud().constProps().TMin()) diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H index 783878f4800683e15a785d2dddc3b2f69ff4b6ba..a181ae19b15e223e4f1d9402cbcb5b40a16d1ef4 100644 --- a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H +++ b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.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-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -28,6 +28,7 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#include "CloudToVTK.H" #include "FacePostProcessing.H" #include "ParticleCollector.H" #include "ParticleErosion.H" @@ -42,6 +43,7 @@ License \ makeCloudFunctionObject(CloudType); \ \ + makeCloudFunctionObjectType(CloudToVTK, CloudType); \ makeCloudFunctionObjectType(FacePostProcessing, CloudType); \ makeCloudFunctionObjectType(ParticleCollector, CloudType); \ makeCloudFunctionObjectType(ParticleErosion, CloudType); \ diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C new file mode 100644 index 0000000000000000000000000000000000000000..240154edf3e02c9b86f85700f3507ab664f66b98 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.C @@ -0,0 +1,164 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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 "CloudToVTK.H" +#include "vtkTools.H" +#include "floatScalar.H" + +// * * * * * * * * * * * * * Protectd Member Functions * * * * * * * * * * * // + +template<class CloudType> +void Foam::CloudToVTK<CloudType>::writeData +( + std::ostream& vtkOs, + const bool binary, + const List<floatScalar>& data +) const +{ + const label procI = Pstream::myProcNo(); + + List<List<floatScalar> > allProcData(Pstream::nProcs()); + allProcData[procI] = data; + Pstream::gatherList(allProcData); + List<floatScalar> allData = + ListListOps::combine<List<floatScalar> > + ( + allProcData, + accessOp<List<floatScalar> >() + ); + + vtkTools::write(vtkOs, binary, allData); +} + + +template<class CloudType> +template<class Type> +void Foam::CloudToVTK<CloudType>::writeFieldData +( + std::ostream& vtkOs, + const bool binary, + const List<floatScalar>& data, + const word& title, + const label nParcels +) const +{ + vtkOs + << title << ' ' << pTraits<Type>::nComponents << ' ' + << nParcels << " float" << std::endl; + writeData(vtkOs, binary, data); +} + + +template<class CloudType> +void Foam::CloudToVTK<CloudType>::write() +{ + label nParcels = this->owner().size(); + DynamicList<floatScalar> position(3*nParcels); + DynamicList<floatScalar> U(3*nParcels); + DynamicList<floatScalar> d(nParcels); + DynamicList<floatScalar> age(nParcels); + DynamicList<floatScalar> rho(nParcels); + + forAllConstIter(typename CloudType, this->owner(), iter) + { + vtkTools::insert(iter().position(), position); + vtkTools::insert(iter().U(), U); + vtkTools::insert(iter().d(), d); + vtkTools::insert(iter().age(), age); + vtkTools::insert(iter().rho(), rho); + } + + reduce(nParcels, sumOp<label>()); + + +binary_ = false; + if (Pstream::master()) + { + // Create directory if does not exist + mkDir(this->outputTimeDir()); + + // Open new file at start up + + const fileName fName = this->outputTimeDir()/(type() + ".vtk"); + this->setModelProperty("file", fName); + + OFstream os(fName, binary_ ? IOstream::BINARY : IOstream::ASCII); + std::ostream& vtkOs = os.stdStream(); + + + vtkTools::writeHeader(vtkOs, binary_, this->modelName().c_str()); + vtkOs + << "DATASET POLYDATA" << std::endl + << "POINTS " << nParcels << " float" << std::endl; + + writeData(vtkOs, binary_, position); + + vtkOs + << "POINT_DATA " << nParcels << std::endl + << "FIELD attributes " << 4 + << std::endl; + + writeFieldData<vector>(vtkOs, binary_, U, "U", nParcels); + writeFieldData<scalar>(vtkOs, binary_, d, "d", nParcels); + writeFieldData<scalar>(vtkOs, binary_, age, "age", nParcels); + writeFieldData<scalar>(vtkOs, binary_, rho, "rho", nParcels); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::CloudToVTK<CloudType>::CloudToVTK +( + const dictionary& dict, + CloudType& owner, + const word& modelName +) +: + CloudFunctionObject<CloudType>(dict, owner, modelName, typeName), + binary_(dict.lookupOrDefault<bool>("binary", true)) +{} + + +template<class CloudType> +Foam::CloudToVTK<CloudType>::CloudToVTK +( + const CloudToVTK<CloudType>& c +) +: + CloudFunctionObject<CloudType>(c), + binary_(c.binary_) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<class CloudType> +Foam::CloudToVTK<CloudType>::~CloudToVTK() +{} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H new file mode 100644 index 0000000000000000000000000000000000000000..13a68f1879d87f725fb9c6db75bba8d5296a1f6e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/CloudToVTK.H @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can 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::CloudToVTK + +Description + Write cloud data in VTK format + +SourceFiles + CloudToVTK.C + +\*---------------------------------------------------------------------------*/ + +#ifndef CloudToVTK_H +#define CloudToVTK_H + +#include "CloudFunctionObject.H" +#include "volFields.H" +#include "OFstream.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CloudToVTK Declaration +\*---------------------------------------------------------------------------*/ + +template<class CloudType> +class CloudToVTK +: + public CloudFunctionObject<CloudType> +{ + +protected: + + // Protected data + + //- Ascii/binary output flag + bool binary_; + + + // Protected Member Functions + + //- Write post-processing info + virtual void write(); + + //- Helper function to write VTK data + void writeData + ( + std::ostream& vtkOs, + const bool binary, + const List<floatScalar>& data + ) const; + + //- Helper function to write VTK field data + template<class Type> + void writeFieldData + ( + std::ostream& vtkOs, + const bool binary, + const List<floatScalar>& data, + const word& title, + const label nParcels + ) const; + + +public: + + //- Runtime type information + TypeName("cloudToVTK"); + + + // Constructors + + //- Construct from dictionary + CloudToVTK + ( + const dictionary& dict, + CloudType& owner, + const word& modelName + ); + + //- Construct copy + CloudToVTK(const CloudToVTK<CloudType>& c); + + //- Construct and return a clone + virtual autoPtr<CloudFunctionObject<CloudType> > clone() const + { + return autoPtr<CloudFunctionObject<CloudType> > + ( + new CloudToVTK<CloudType>(*this) + ); + } + + + //- Destructor + virtual ~CloudToVTK(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "CloudToVTK.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C new file mode 100644 index 0000000000000000000000000000000000000000..71de62552669d9452cb5ea132d984f6f1ff7bd6e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.C @@ -0,0 +1,287 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 "vtkTools.H" + +#if defined(__mips) +#include <standards.h> +#include <sys/endian.h> +#endif + +// MacOSX +#ifdef __DARWIN_BYTE_ORDER +#if __DARWIN_BYTE_ORDER==__DARWIN_BIG_ENDIAN +#undef LITTLE_ENDIAN +#else +#undef BIG_ENDIAN +#endif +#endif + +#if defined(LITTLE_ENDIAN) \ + || defined(_LITTLE_ENDIAN) \ + || defined(__LITTLE_ENDIAN) +# define LITTLEENDIAN 1 +#elif defined(BIG_ENDIAN) || defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN) +# undef LITTLEENDIAN +#else +# error "Cannot find LITTLE_ENDIAN or BIG_ENDIAN symbol defined." +# error "Please add to compilation options" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +void Foam::vtkTools::swapWord(label& word32) +{ + char* mem = reinterpret_cast<char*>(&word32); + + char a = mem[0]; + mem[0] = mem[3]; + mem[3] = a; + + a = mem[1]; + mem[1] = mem[2]; + mem[2] = a; +} + + +void Foam::vtkTools::swapWords(const label nWords, label* words32) +{ + for (label i = 0; i < nWords; i++) + { + swapWord(words32[i]); + } +} + + +void Foam::vtkTools::write +( + std::ostream& os, + const bool binary, + List<floatScalar>& fField +) +{ + if (binary) + { +# ifdef LITTLEENDIAN + swapWords(fField.size(), reinterpret_cast<label*>(fField.begin())); +# endif + os.write + ( + reinterpret_cast<char*>(fField.begin()), + fField.size()*sizeof(float) + ); + + os << std::endl; + } + else + { + forAll(fField, i) + { + os << fField[i]; + + if (i > 0 && (i % 10) == 0) + { + os << std::endl; + } + else + { + os << ' '; + } + } + os << std::endl; + } +} + + +void Foam::vtkTools::write +( + std::ostream& os, + const bool binary, + DynamicList<floatScalar>& fField +) +{ + List<floatScalar>& fld = fField.shrink(); + + write(os, binary, fld); +} + + +void Foam::vtkTools::write +( + std::ostream& os, + const bool binary, + labelList& elems +) +{ + if (binary) + { +# ifdef LITTLEENDIAN + swapWords(elems.size(), reinterpret_cast<label*>(elems.begin())); +# endif + os.write + ( + reinterpret_cast<char*>(elems.begin()), + elems.size()*sizeof(label) + ); + + os << std::endl; + } + else + { + forAll(elems, i) + { + os << elems[i]; + + if (i > 0 && (i % 10) == 0) + { + os << std::endl; + } + else + { + os << ' '; + } + } + os << std::endl; + } +} + + +void Foam::vtkTools::write +( + std::ostream& os, + const bool binary, + DynamicList<label>& elems +) +{ + labelList& fld = elems.shrink(); + + write(os, binary, fld); +} + + +void Foam::vtkTools::writeHeader +( + std::ostream& os, + const bool binary, + const std::string& title +) +{ + os << "# vtk DataFile Version 2.0" << std::endl + << title << std::endl; + + if (binary) + { + os << "BINARY" << std::endl; + } + else + { + os << "ASCII" << std::endl; + } +} + + +void Foam::vtkTools::writeCellDataHeader +( + std::ostream& os, + const label nCells, + const label nFields +) +{ + os << "CELL_DATA " << nCells << std::endl + << "FIELD attributes " << nFields << std::endl; +} + + +void Foam::vtkTools::writePointDataHeader +( + std::ostream& os, + const label nPoints, + const label nFields +) +{ + os << "POINT_DATA " << nPoints << std::endl + << "FIELD attributes " << nFields << std::endl; +} + + +void Foam::vtkTools::insert(const scalar src, DynamicList<floatScalar>& dest) +{ + dest.append(float(src)); +} + + +void Foam::vtkTools::insert(const vector& src, DynamicList<floatScalar>& dest) +{ + for (direction cmpt = 0; cmpt < vector::nComponents; ++cmpt) + { + dest.append(float(src[cmpt])); + } +} + + +void Foam::vtkTools::insert +( + const sphericalTensor& src, + DynamicList<floatScalar>& dest +) +{ + for (direction cmpt = 0; cmpt < sphericalTensor::nComponents; ++cmpt) + { + dest.append(float(src[cmpt])); + } +} + + +void Foam::vtkTools::insert +( + const symmTensor& src, + DynamicList<floatScalar>& dest +) +{ + dest.append(float(src.xx())); + dest.append(float(src.yy())); + dest.append(float(src.zz())); + dest.append(float(src.xy())); + dest.append(float(src.yz())); + dest.append(float(src.xz())); +} + + +void Foam::vtkTools::insert(const tensor& src, DynamicList<floatScalar>& dest) +{ + for (direction cmpt = 0; cmpt < tensor::nComponents; ++cmpt) + { + dest.append(float(src[cmpt])); + } +} + + +void Foam::vtkTools::insert(const labelList& src, DynamicList<label>& dest) +{ + dest.append(src); +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H new file mode 100644 index 0000000000000000000000000000000000000000..12bdda1f3801122a0f228de7723ebbe3e27cc29e --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkTools.H @@ -0,0 +1,126 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::vtkTools + +Description + Various functions for collecting and writing binary data. + +SourceFiles + vtkTools.C + +\*---------------------------------------------------------------------------*/ + +#ifndef vtkTools_H +#define vtkTools_H + +#include "floatScalar.H" +#include "DynamicList.H" +#include "volFieldsFwd.H" +#include "pointFieldsFwd.H" +#include "volPointInterpolation.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class vtkTools Declaration +\*---------------------------------------------------------------------------*/ + +class vtkTools +{ + // Private Member Functions + + // Swap halves of word. + + static void swapWord(label& word32); + static void swapWords(const label nWords, label* words32); + + +public: + + // Write ascii or binary. If binary optionally in-place swaps argument + + static void write(std::ostream&, const bool, List<floatScalar>&); + static void write(std::ostream&, const bool, DynamicList<floatScalar>&); + static void write(std::ostream&, const bool, labelList&); + static void write(std::ostream&, const bool, DynamicList<label>&); + + + // Write header + + static void writeHeader + ( + std::ostream&, + const bool isBinary, + const std::string& title + ); + static void writeCellDataHeader + ( + std::ostream&, + const label nCells, + const label nFields + ); + static void writePointDataHeader + ( + std::ostream&, + const label nPoints, + const label nFields + ); + + + // Convert to VTK and store + + static void insert(const scalar, DynamicList<floatScalar>&); + static void insert(const point&, DynamicList<floatScalar>&); + static void insert(const sphericalTensor&, DynamicList<floatScalar>&); + static void insert(const symmTensor&, DynamicList<floatScalar>&); + static void insert(const tensor&, DynamicList<floatScalar>&); + + + //- Append elements to DynamicList + static void insert(const labelList&, DynamicList<label>&); + + template<class Type> + static void insert(const List<Type>&, DynamicList<floatScalar>&); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "vtkToolsTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C new file mode 100644 index 0000000000000000000000000000000000000000..53ea67e398e4b84ec5f5ca0723803ee823a94e62 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/CloudToVTK/vtkToolsTemplates.C @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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 "vtkTools.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +template<class Type> +void Foam::vtkTools::insert +( + const List<Type>& source, + DynamicList<floatScalar>& dest +) +{ + forAll(source, i) + { + insert(source[i], dest); + } +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C index 10cb1d3c544a0d7785a3324f27bf09e04f7f05a6..42d4c7a33d7ea9b7f8fb5329afbd62e991ffb4d6 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleCollector/ParticleCollector.C @@ -453,7 +453,15 @@ void Foam::ParticleCollector<CloudType>::write() { if (Pstream::master()) { - autoPtr<surfaceWriter> writer(surfaceWriter::New(surfaceFormat_)); + autoPtr<surfaceWriter> writer + ( + surfaceWriter::New + ( + surfaceFormat_, + this->coeffDict().subOrEmptyDict("formatOptions"). + subOrEmptyDict(surfaceFormat_) + ) + ); writer->write ( diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H index f5e4b31ff9d323a5d5d308e644520fa409a5b460..01336c85185515e2648951ed4ea8943636742a13 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.H @@ -41,7 +41,7 @@ Description namespace Foam { /*---------------------------------------------------------------------------*\ - Class PairSpringSliderDashpot Declaration + Class PairSpringSliderDashpot Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> @@ -71,7 +71,7 @@ class PairSpringSliderDashpot //- Cohesion energy density [J/m^3] scalar cohesionEnergyDensity_; - // Switch cohesion on and off + //- Switch cohesion on and off bool cohesion_; //- The number of steps over which to resolve the minimum @@ -104,7 +104,7 @@ class PairSpringSliderDashpot // Private Member Functions //- Find the appropriate properties for determining the minimum - //- Allowable timestep + // allowable timestep void findMinMaxProperties ( scalar& RMin, @@ -136,8 +136,8 @@ public: return volumeFactor_; } - // Return the area of overlap between two spheres of radii rA and rB, - // centres separated by a distance rAB. Assumes rAB < (rA + rB). + //- Return the area of overlap between two spheres of radii rA and rB, + // centres separated by a distance rAB. Assumes rAB < (rA + rB). inline scalar overlapArea(scalar rA, scalar rB, scalar rAB) const { // From: diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H index e48e949f57388cea7f7c9b17be743c89060fb746..699c9cda2c871493109cd0ee6756ce83f6552c90 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallLocalSpringSliderDashpot/WallLocalSpringSliderDashpot.H @@ -68,7 +68,7 @@ class WallLocalSpringSliderDashpot //- Cohesion energy density [J/m^3] scalarList cohesionEnergyDensity_; - // Switch cohesion on and off + //- Switch cohesion on and off boolList cohesion_; //- Mapping the patch index to the model data @@ -107,7 +107,7 @@ class WallLocalSpringSliderDashpot // Private Member Functions //- Find the appropriate properties for determining the minimum - //- Allowable timestep + // allowable timestep void findMinMaxProperties ( scalar& rMin, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H index 88dca9b66c45a3b1d5dbd341e938e946a1295a44..0087d011978773c003e394ad77c248e672380f0e 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/WallModel/WallSpringSliderDashpot/WallSpringSliderDashpot.H @@ -101,7 +101,7 @@ class WallSpringSliderDashpot // Private Member Functions //- Find the appropriate properties for determining the minimum - //- Allowable timestep + // allowable timestep void findMinMaxProperties ( scalar& rMin, diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H index 9edd88736e7cbc8ea9d390173d3ca3bc92fb6aa4..ece119404dce6e58bd5d403be8a783d2a335d439 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/CellZoneInjection/CellZoneInjection.H @@ -27,10 +27,12 @@ Class Description Injection positions specified by a particle number density within a cell set - - User specifies - - Number density of particles in cell set (effective) - - Total mass to inject - - Initial parcel velocity + User specifies + - Number density of particles in cell set (effective) + - Total mass to inject + - Initial parcel velocity + + Additional - Parcel diameters obtained by PDF model - All parcels introduced at SOI diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C index 338897117876eb6e1a67c0966fe2e06f83eb13cd..0cca8f321ecc3d079aca76b9e01ac58ccebe8113 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.C @@ -203,8 +203,6 @@ Foam::label Foam::ConeInjection<CloudType>::parcelsToInject const label nToInject = targetParcels - nInjected_; - nInjected_ += nToInject; - return positionAxis_.size()*nToInject; } else @@ -264,7 +262,7 @@ void Foam::ConeInjection<CloudType>::setProperties { cachedRandom& rnd = this->owner().rndGen(); - // set particle velocity + // Set particle velocity const label i = parcelI % positionAxis_.size(); scalar t = time - this->SOI_; @@ -283,8 +281,11 @@ void Foam::ConeInjection<CloudType>::setProperties parcel.U() = Umag_.value(t)*dirVec; - // set particle diameter + // Set particle diameter parcel.d() = sizeDistribution_().sample(); + + // Increment number of particles injected + nInjected_++; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H index f45fd4a4f0f8a866a41a161a59adb9ca2c32f8c8..56519243e4822b0ab89f94931e9d4f191a375da8 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeInjection/ConeInjection.H @@ -26,12 +26,15 @@ Class Description Multi-point cone injection model - - User specifies - - time of start of injection - - list of injector positions and directions (along injection axes) - - number of parcels to inject per injector - - parcel velocities - - inner and outer half-cone angles + + User specifies + - time of start of injection + - list of injector positions and directions (along injection axes) + - number of parcels to inject per injector + - parcel velocities + - inner and outer half-cone angles + + Additional - Parcel diameters obtained by distribution model SourceFiles diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C index abe80140fc69e0e8a8fe18528f64b1d9992f79ce..c748a8684b13f124756795040b33e3eb87cc3718 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C @@ -163,8 +163,10 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection if (innerDiameter_ >= outerDiameter_) { FatalErrorInFunction - << "innerNozzleDiameter >= outerNozzleDiameter" << nl - << exit(FatalError); + << "Inner diameter must be less than the outer diameter:" << nl + << " innerDiameter: " << innerDiameter_ << nl + << " outerDiameter: " << outerDiameter_ + << exit(FatalError); } duration_ = owner.db().time().userTimeToTime(duration_); @@ -258,7 +260,7 @@ void Foam::ConeNozzleInjection<CloudType>::updateMesh() } default: { - // do nothing + // Do nothing } } } @@ -337,9 +339,10 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell } case imDisc: { - scalar frac = rndGen.sample01<scalar>(); + scalar frac = rndGen.globalSample01<scalar>(); scalar dr = outerDiameter_ - innerDiameter_; scalar r = 0.5*(innerDiameter_ + frac*dr); + position = position_ + r*normal_; this->findCellAtPosition @@ -347,8 +350,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell cellOwner, tetFaceI, tetPtI, - position, - false + position ); break; } @@ -373,7 +375,7 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties { cachedRandom& rndGen = this->owner().rndGen(); - // set particle velocity + // Set particle velocity const scalar deg2Rad = mathematical::pi/180.0; scalar t = time - this->SOI_; @@ -423,7 +425,7 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties } } - // set particle diameter + // Set particle diameter parcel.d() = sizeDistribution_->sample(); } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H index 1d32db5f7284ec3197957125d929b2dfe3bc6efd..9490c31128a252c6248d4c562b746293e2295127 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H @@ -27,17 +27,16 @@ Class Description Cone injection - - User specifies - - time of start of injection - - injector position - - direction (along injection axis) - - parcel flow rate - - inner and outer half-cone angles - + User specifies + - time of start of injection + - injector position + - direction (along injection axis) + - parcel flow rate + - inner and outer half-cone angles + + Additional - Parcel diameters obtained by size distribution model - - Parcel velocity is calculated as: - - Constant velocity U = \<specified by user\> - Pressure driven velocity diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H index 704345d8f536b3740f308de30f6079cc1387486d..8e7c7d682d5ac6a9c4eda23b9eb3c114e6926e9d 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/FieldActivatedInjection/FieldActivatedInjection.H @@ -25,18 +25,19 @@ Class Foam::FieldActivatedInjection Description - Injection at specified positions, with the conditions: + Conditional injection at specified positions. - - for injection to be allowed + For injection to be allowed, the equality must be satisfied: factor*referenceField[cellI] >= thresholdField[cellI] - where: - - referenceField is the field used to supply the look-up values - - thresholdField supplies the values beyond which the injection is + Where: + - referenceField is the field used to supply the look-up values + - thresholdField supplies the values beyond which the injection is permitted - - limited to a user-supllied number of injections per injector location + Note: + - Limited to a user-supplied number of injections per injector location SourceFiles FieldActivatedInjection.C @@ -56,7 +57,7 @@ namespace Foam { /*---------------------------------------------------------------------------*\ - Class FieldActivatedInjection Declaration + Class FieldActivatedInjection Declaration \*---------------------------------------------------------------------------*/ template<class CloudType> diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 18a3c22a99f12f088fac53372418b18e1f128dfc..c1ea66b90c0dbb487e6391f4c9b1e93bf7fbd8b7 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -267,7 +267,8 @@ Foam::InjectionModel<CloudType>::InjectionModel(CloudType& owner) nParticleFixed_(0.0), time0_(0.0), timeStep0_(this->template getModelProperty<scalar>("timeStep0")), - delayedVolume_(0.0) + delayedVolume_(0.0), + injectorID_(-1) {} @@ -295,7 +296,8 @@ Foam::InjectionModel<CloudType>::InjectionModel nParticleFixed_(0.0), time0_(owner.db().time().value()), timeStep0_(this->template getModelProperty<scalar>("timeStep0")), - delayedVolume_(0.0) + delayedVolume_(0.0), + injectorID_(this->coeffDict().lookupOrDefault("injectorID", -1)) { // Provide some info // - also serves to initialise mesh dimensions - needed for parallel runs @@ -303,18 +305,25 @@ Foam::InjectionModel<CloudType>::InjectionModel Info<< " Constructing " << owner.mesh().nGeometricD() << "-D injection" << endl; + if (injectorID_ != -1) + { + Info<< " injector ID: " << injectorID_ << endl; + } + if (owner.solution().transient()) { this->coeffDict().lookup("massTotal") >> massTotal_; this->coeffDict().lookup("SOI") >> SOI_; - SOI_ = owner.db().time().userTimeToTime(SOI_); } else { massFlowRate_.reset(this->coeffDict()); massTotal_ = massFlowRate_.value(owner.db().time().value()); + this->coeffDict().readIfPresent("SOI", SOI_); } + SOI_ = owner.db().time().userTimeToTime(SOI_); + const word parcelBasisType = this->coeffDict().lookup("parcelBasisType"); if (parcelBasisType == "mass") @@ -362,7 +371,8 @@ Foam::InjectionModel<CloudType>::InjectionModel nParticleFixed_(im.nParticleFixed_), time0_(im.time0_), timeStep0_(im.timeStep0_), - delayedVolume_(im.delayedVolume_) + delayedVolume_(im.delayedVolume_), + injectorID_(im.injectorID_) {} @@ -415,10 +425,10 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) scalar massAdded = 0.0; label newParcels = 0; scalar newVolumeFraction = 0.0; + scalar delayedVolume = 0; if (prepareForNextTimeStep(time, newParcels, newVolumeFraction)) { - scalar delayedVolume = 0; const scalar trackTime = this->owner().solution().trackTime(); const polyMesh& mesh = this->owner().mesh(); @@ -504,7 +514,8 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) if (pPtr->move(td, dt)) { - td.cloud().addParticle(pPtr); + pPtr->typeId() = injectorID_; + cloud.addParticle(pPtr); } else { @@ -519,10 +530,10 @@ void Foam::InjectionModel<CloudType>::inject(TrackData& td) } } } - - delayedVolume_ = delayedVolume; } + delayedVolume_ = returnReduce(delayedVolume, sumOp<scalar>()); + postInjectCheck(parcelsAdded, massAdded); } @@ -540,6 +551,13 @@ void Foam::InjectionModel<CloudType>::injectSteadyState return; } + const scalar time = this->owner().db().time().value(); + + if (time < SOI_) + { + return; + } + const polyMesh& mesh = this->owner().mesh(); typename TrackData::cloudType& cloud = td.cloud(); @@ -609,8 +627,10 @@ void Foam::InjectionModel<CloudType>::injectSteadyState pPtr->rho() ); + pPtr->typeId() = injectorID_; + // Add the new parcel - td.cloud().addParticle(pPtr); + cloud.addParticle(pPtr); massAdded += pPtr->nParticle()*pPtr->mass(); parcelsAdded++; @@ -624,9 +644,9 @@ void Foam::InjectionModel<CloudType>::injectSteadyState template<class CloudType> void Foam::InjectionModel<CloudType>::info(Ostream& os) { - os << " " << this->modelName() << ":" << nl - << " number of parcels added = " << parcelsAddedTotal_ << nl - << " mass introduced = " << massInjected_ << nl; + os << " Injector " << this->modelName() << ":" << nl + << " - parcels added = " << parcelsAddedTotal_ << nl + << " - mass introduced = " << massInjected_ << nl; if (this->outputTime()) { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index b570a6bf4ab5080201b4fe68fef246df7a9c555e..fc0e285608c3835b4e24d4d2dfeeb7c44ef493b7 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -138,6 +138,9 @@ protected: // less than 1 particle per parcel scalar delayedVolume_; + //- Optional injector ID + label injectorID_; + // Protected Member Functions diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H index bbadab5409cf4c059298a9cc0a0cfd1cf25cc4f0..c9a91e8be6357014570478596aa9c4d3ef0864da 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.H @@ -26,10 +26,13 @@ Class Description Manual injection - - User specifies - - Total mass to inject - - Parcel positions in file \c positionsFile - - Initial parcel velocity + + User specifies + - Total mass to inject + - Parcel positions in file \c positionsFile + - Initial parcel velocity + + Additional - Parcel diameters obtained by distribution model - All parcels introduced at SOI diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C index cee8eaa3dbd5555c5c7b9ae22a92a900ff56b24d..57c8f915375e75c86e5cb6ab6831854657645a97 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.C @@ -121,9 +121,8 @@ Foam::label Foam::PatchInjection<CloudType>::parcelsToInject if ((time0 >= 0.0) && (time0 < duration_)) { scalar nParcels = (time1 - time0)*parcelsPerSecond_; - cachedRandom& rnd = this->owner().rndGen(); - + scalar rndPos = rnd.globalPosition(scalar(0), scalar(1)); label nParcelsToInject = floor(nParcels); // Inject an additional parcel with a probability based on the @@ -131,10 +130,7 @@ Foam::label Foam::PatchInjection<CloudType>::parcelsToInject if ( nParcelsToInject > 0 - && ( - nParcels - scalar(nParcelsToInject) - > rnd.globalPosition(scalar(0), scalar(1)) - ) + && (nParcels - scalar(nParcelsToInject) > rndPos) ) { ++nParcelsToInject; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H index c782ad860d8024c95b28f09d10966e1f5d851d41..e32b2918513b5591f8ad12bbb4fb3888bd503250 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/PatchInjection.H @@ -26,12 +26,15 @@ Class Description Patch injection - - User specifies - - Total mass to inject - - Name of patch - - Injection duration - - Initial parcel velocity - - Injection volume flow rate + + User specifies + - Total mass to inject + - Name of patch + - Injection duration + - Initial parcel velocity + - Injection volume flow rate + + Additional - Parcel diameters obtained by distribution model - Parcels injected randomly across the patch diff --git a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C index 970dee90f9614e4fb7192d47fe360775e2f1a6e3..0dd49b7f0ae47c9f6a332ec4a39d046429457853 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/ParticleForces/Drag/PlessisMasliyahDrag/PlessisMasliyahDragForce.C @@ -104,7 +104,7 @@ Foam::forceSuSp Foam::PlessisMasliyahDragForce<CloudType>::calcCoupled { scalar alphac(alphac_[p.cell()]); - scalar cbrtAlphap(pow(1.0 - alphac, 1.0/3.0)); + scalar cbrtAlphap(cbrt(1.0 - alphac)); scalar A = 26.8*pow3(alphac) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C index 5ccaf9bc02814807724b6b929d960628aa7a5461..d21917710735f22cefa9f820b216cb64e35cab41 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.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 @@ -123,7 +123,9 @@ Foam::PatchInteractionModel<CloudType>::PatchInteractionModel ) : CloudSubModelBase<CloudType>(owner, dict, typeName, type), - UName_(this->coeffDict().lookupOrDefault("UName", word("U"))) + UName_(this->coeffDict().lookupOrDefault("UName", word("U"))), + escapedParcels_(0), + escapedMass_(0.0) {} @@ -134,7 +136,9 @@ Foam::PatchInteractionModel<CloudType>::PatchInteractionModel ) : CloudSubModelBase<CloudType>(pim), - UName_(pim.UName_) + UName_(pim.UName_), + escapedParcels_(pim.escapedParcels_), + escapedMass_(pim.escapedMass_) {} @@ -154,10 +158,42 @@ const Foam::word& Foam::PatchInteractionModel<CloudType>::UName() const } +template<class CloudType> +void Foam::PatchInteractionModel<CloudType>::addToEscapedParcels +( + const scalar mass +) +{ + escapedMass_ += mass; + escapedParcels_++; +} + + template<class CloudType> void Foam::PatchInteractionModel<CloudType>::info(Ostream& os) { - // do nothing + const label escapedParcels0 = + this->template getBaseProperty<label>("escapedParcels"); + const label escapedParcelsTotal = + escapedParcels0 + returnReduce(escapedParcels_, sumOp<label>()); + + const scalar escapedMass0 = + this->template getBaseProperty<scalar>("escapedMass"); + const scalar escapedMassTotal = + escapedMass0 + returnReduce(escapedMass_, sumOp<scalar>()); + + os << " Parcel fate: system (number, mass)" << nl + << " - escape = " << escapedParcelsTotal + << ", " << escapedMassTotal << endl; + + if (this->outputTime()) + { + this->setBaseProperty("escapedParcels", escapedParcelsTotal); + escapedParcels_ = 0; + + this->setBaseProperty("escapedMass", escapedMassTotal); + escapedMass_ = 0.0; + } } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H index bfc4ae277b13a0690086fb94f8b649347bf980c6..66fc753f07ab375b72eec774b7c77726962b2180 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/PatchInteractionModel/PatchInteractionModel/PatchInteractionModel.H @@ -74,7 +74,7 @@ public: static wordList interactionTypeNames_; -private: +protected: // Private data @@ -82,6 +82,16 @@ private: const word UName_; + // Counters + + //- Number of parcels escaped + label escapedParcels_; + + //- Mass of parcels escaped + scalar escapedMass_; + + + public: //- Runtime type information @@ -158,6 +168,9 @@ public: const tetIndices& tetIs ) = 0; + //- Add to escaped parcels + void addToEscapedParcels(const scalar mass); + // I-O diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C index d2dbb92d6c5a401956d6f49affb97d0b3a9f0135..3f3d9974033928570bee89322c82f1c508ed6713 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/SurfaceFilmModel/SurfaceFilmModel.C @@ -266,8 +266,9 @@ void Foam::SurfaceFilmModel<CloudType>::info(Ostream& os) label nInjectTotal = nInject0 + returnReduce(nParcelsInjected_, sumOp<label>()); - os << " Parcels absorbed into film = " << nTransTotal << nl - << " New film detached parcels = " << nInjectTotal << endl; + os << " Surface film:" << nl + << " - parcels absorbed = " << nTransTotal << nl + << " - parcels ejected = " << nInjectTotal << endl; if (this->outputTime()) { diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C index ee3f961e68e52da883d3e8f22b1d6823995ccdab..26127eaf1240bfd95e8c83325f6015b32956b3b6 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C @@ -229,7 +229,7 @@ const Foam::scalarField& Foam::CompositionModel<CloudType>::Y0 template<class CloudType> -Foam::scalarField Foam::CompositionModel<CloudType>::X +Foam::tmp<Foam::scalarField> Foam::CompositionModel<CloudType>::X ( const label phasei, const scalarField& Y @@ -267,9 +267,8 @@ Foam::scalarField Foam::CompositionModel<CloudType>::X } } - X /= WInv; - - return X; + tmp<scalarField> tfld = X/(WInv + ROOTVSMALL); + return tfld; } diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H index b57da79fde10eb441b90fa5160882b48ba820d53..97aa1c5c7c3ab925fb10bd3640ed764155287cd9 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H @@ -188,7 +188,11 @@ public: //- Return the list of phase phaseI volume fractions fractions // based on supplied mass fractions Y - scalarField X(const label phaseI, const scalarField& Y) const; + tmp<scalarField> X + ( + const label phaseI, + const scalarField& Y + ) const; // Mixture properties diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C index 7f752378866ec485413d0d3880a3b64d2ea7a6a4..2aa0da83ab0319999f1fd6dc7360ca8028e3d0e6 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C @@ -667,7 +667,7 @@ void Foam::ThermoSurfaceFilm<CloudType>::info(Ostream& os) label nSplashTotal = nSplash0 + returnReduce(nParcelsSplashed_, sumOp<label>()); - os << " New film splash parcels = " << nSplashTotal << endl; + os << " - new splash parcels = " << nSplashTotal << endl; if (this->outputTime()) { diff --git a/src/lagrangian/spray/Make/options b/src/lagrangian/spray/Make/options index 3b5a4e72e9565bfce6a407b8f8641dcffa5201b5..b45129b83860fd9cc2c03834908a61ae5b55e1c6 100644 --- a/src/lagrangian/spray/Make/options +++ b/src/lagrangian/spray/Make/options @@ -19,6 +19,7 @@ EXE_INC = \ -I$(LIB_SRC)/transportModels \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ + -I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ @@ -45,6 +46,7 @@ LIB_LIBS = \ -lincompressibleTransportModels \ -lregionModels \ -lsurfaceFilmModels \ + -ldynamicMesh \ -ldynamicFvMesh \ -lsampling \ -lfiniteVolume \ diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C index ae1651e78d5dfe3eaa0881d3ddf69bc03175f70f..f4f562543dd61dac13fe81a4cba43c4280374b49 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.C @@ -24,6 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "SprayParcel.H" +#include "BreakupModel.H" #include "CompositionModel.H" #include "AtomizationModel.H" @@ -153,13 +154,19 @@ void Foam::SprayParcel<ParcelType>::calcAtomization const label cellI ) { + typedef typename TrackData::cloudType::sprayCloudType sprayCloudType; + const AtomizationModel<sprayCloudType>& atomization = + td.cloud().atomization(); + + if (!atomization.active()) + { + return; + } + typedef typename TrackData::cloudType::reactingCloudType reactingCloudType; const CompositionModel<reactingCloudType>& composition = td.cloud().composition(); - typedef typename TrackData::cloudType::sprayCloudType sprayCloudType; - const AtomizationModel<sprayCloudType>& atomization = - td.cloud().atomization(); // Average molecular weight of carrier mix - assumes perfect gas scalar Wc = this->rhoc_*RR*this->Tc()/this->pc(); @@ -223,11 +230,19 @@ void Foam::SprayParcel<ParcelType>::calcBreakup typedef typename TrackData::cloudType cloudType; typedef typename cloudType::parcelType parcelType; typedef typename cloudType::forceType forceType; + typedef typename TrackData::cloudType::sprayCloudType sprayCloudType; + + BreakupModel<sprayCloudType>& breakup = td.cloud().breakup(); + + if (!breakup.active()) + { + return; + } const parcelType& p = static_cast<const parcelType&>(*this); const forceType& forces = td.cloud().forces(); - if (td.cloud().breakup().solveOscillationEq()) + if (breakup.solveOscillationEq()) { solveTABEq(td, dt); } @@ -247,7 +262,7 @@ void Foam::SprayParcel<ParcelType>::calcBreakup const scalar mass = p.mass(); const forceSuSp Fcp = forces.calcCoupled(p, dt, mass, Re, muAv); const forceSuSp Fncp = forces.calcNonCoupled(p, dt, mass, Re, muAv); - this->tMom() = mass/(Fcp.Sp() + Fncp.Sp()); + this->tMom() = mass/(Fcp.Sp() + Fncp.Sp() + ROOTVSMALL); const vector g = td.cloud().g().value(); @@ -255,7 +270,7 @@ void Foam::SprayParcel<ParcelType>::calcBreakup scalar dChild = 0.0; if ( - td.cloud().breakup().update + breakup.update ( dt, g, diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H index 4e1fab22d0210b366b856585dc7116654b0661e5..4d7f28926017cf141f3cecf1102aaf31330aa231 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcel.H @@ -181,6 +181,25 @@ public: //- Runtime type information TypeName("SprayParcel"); + //- String representation of properties + AddToPropertyList + ( + ParcelType, + + " d0" + + " position0" + + " sigma" + + " mu" + + " liquidCore" + + " KHindex" + + " y" + + " yDot" + + " tc" + + " ms" + + " injector" + + " tMom" + + " user" + ); + // Constructors diff --git a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C index 7d85441b1e6b3d47b4b8992bfd66022615385ded..6188ccf73552c8127f655385977b3fc21cc4da3d 100644 --- a/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C +++ b/src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelIO.C @@ -28,6 +28,11 @@ License // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // +template<class ParcelType> +Foam::string Foam::SprayParcel<ParcelType>::propertyList_ = + Foam::SprayParcel<ParcelType>::propertyList(); + + template<class ParcelType> const std::size_t Foam::SprayParcel<ParcelType>::sizeofFields_ ( @@ -89,7 +94,7 @@ Foam::SprayParcel<ParcelType>::SprayParcel ( "SprayParcel<ParcelType>::SprayParcel" "(" - "const polyMesh, " + "const polyMesh&, " "Istream&, " "bool" ")" diff --git a/src/meshTools/regionSplit/localPointRegion.C b/src/meshTools/regionSplit/localPointRegion.C index 26427bc7f34da8e203d6bef3a10fd6aacb2c8221..55f7b6a8c13eeb1e5324277613415d593fbafe0f 100644 --- a/src/meshTools/regionSplit/localPointRegion.C +++ b/src/meshTools/regionSplit/localPointRegion.C @@ -70,6 +70,11 @@ bool Foam::localPointRegion::isDuplicate const bool forward ) { + if (f0.size() != f1.size()) + { + return false; + } + label fp1 = findIndex(f1, f0[0]); if (fp1 == -1) diff --git a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C index 454d2c97b0eb00abc5f8ea369d908a9aff71bf4f..44d0ecfa470b5994d585736bceac03894819d695 100644 --- a/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C +++ b/src/postProcessing/functionObjects/IO/partialWrite/partialWrite.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -135,12 +135,12 @@ void Foam::partialWrite::read(const dictionary& dict) void Foam::partialWrite::execute() { + // Do nothing - only valid on write } void Foam::partialWrite::end() { - //Pout<< "end at time " << obr_.time().timeName() << endl; // Do nothing - only valid on write } diff --git a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C index fee807a9a63ec7eaf663a4f2a310120860bb6299..bd1b41479ccd3994284598308bed74c78db7b00b 100644 --- a/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C +++ b/src/postProcessing/functionObjects/IO/removeRegisteredObject/removeRegisteredObject.C @@ -94,7 +94,7 @@ void Foam::removeRegisteredObject::execute() void Foam::removeRegisteredObject::end() { - execute(); + // Do nothing - only valid on execute } diff --git a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C index 0e6ec44ce8cd2c44c52ff0a8df70a6a38b047b0f..2578b4406459dbea5216a06f0b232f088885f7de 100644 --- a/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C +++ b/src/postProcessing/functionObjects/IO/writeDictionary/writeDictionary.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -195,7 +195,7 @@ void Foam::writeDictionary::execute() void Foam::writeDictionary::end() { - execute(); + // do nothing } diff --git a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C index dcdb62eff73333f532cbfb591bb18303f7087465..9104b2d293b911923409dcf6eec4502bd192e7c9 100644 --- a/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C +++ b/src/postProcessing/functionObjects/field/fieldAverage/fieldAverage/fieldAverage.C @@ -288,12 +288,7 @@ void Foam::fieldAverage::execute() void Foam::fieldAverage::end() -{ - if (active_) - { - execute(); - } -} +{} void Foam::fieldAverage::timeSet() diff --git a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C index ff761f583f03ac8b2a5df251df1eada66944211b..0275f78878650e70cdc83e5c77dd3f099b988960 100644 --- a/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C +++ b/src/postProcessing/functionObjects/field/fieldCoordinateSystemTransform/fieldCoordinateSystemTransform.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -30,7 +30,7 @@ License namespace Foam { -defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0); + defineTypeNameAndDebug(fieldCoordinateSystemTransform, 0); } @@ -110,10 +110,7 @@ void Foam::fieldCoordinateSystemTransform::execute() void Foam::fieldCoordinateSystemTransform::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C index cbdf8576065811d51d744b7e7e0929694a7015cd..d03d641a40ba6ef59967ed264399cba7d95c579a 100644 --- a/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C +++ b/src/postProcessing/functionObjects/field/fieldValues/fieldValueDelta/fieldValueDelta.C @@ -239,10 +239,7 @@ void Foam::fieldValues::fieldValueDelta::execute() void Foam::fieldValues::fieldValueDelta::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C index 3df21efc22bb764101d37ff36ce41b8a8d601961..fdea64319d90d0a72a29fad16b61c04fb4b870ce 100644 --- a/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C +++ b/src/postProcessing/functionObjects/field/nearWallFields/nearWallFields.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -361,15 +361,7 @@ void Foam::nearWallFields::execute() void Foam::nearWallFields::end() { - if (debug) - { - Info<< "nearWallFields:end()" << endl; - } - - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/processorField/processorField.C b/src/postProcessing/functionObjects/field/processorField/processorField.C index d1ec8bb5a4b5818c439157a6f9328f9fe895d849..604b2409f0639930265759d0d2a3427925216d3b 100644 --- a/src/postProcessing/functionObjects/field/processorField/processorField.C +++ b/src/postProcessing/functionObjects/field/processorField/processorField.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -31,7 +31,7 @@ License namespace Foam { -defineTypeNameAndDebug(processorField, 0); + defineTypeNameAndDebug(processorField, 0); } @@ -119,10 +119,7 @@ void Foam::processorField::execute() void Foam::processorField::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/readFields/readFields.C b/src/postProcessing/functionObjects/field/readFields/readFields.C index e2e046658c27ddcdf5045bc287951d5022f84570..07a43d6bbc57290c1bf4b025154b4c06a4aa39dc 100644 --- a/src/postProcessing/functionObjects/field/readFields/readFields.C +++ b/src/postProcessing/functionObjects/field/readFields/readFields.C @@ -104,10 +104,7 @@ void Foam::readFields::execute() void Foam::readFields::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C index dffb7feb009adf26f06226fd5643ff64f559fc00..c2fd737800677f075120216baf462d1bc024c6ff 100644 --- a/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C +++ b/src/postProcessing/functionObjects/field/surfaceInterpolateFields/surfaceInterpolateFields.C @@ -108,10 +108,7 @@ void Foam::surfaceInterpolateFields::execute() void Foam::surfaceInterpolateFields::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C b/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C index d7c95a18e1c6cc41bc842d1efde26fc69bc1a2a3..8db50b1f6fb8ba612bf3347855b22b464394452c 100644 --- a/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C +++ b/src/postProcessing/functionObjects/field/valueAverage/valueAverage.C @@ -180,10 +180,7 @@ void Foam::valueAverage::execute() void Foam::valueAverage::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C index 53ad2b94603dd2e6621745f700a74d9649421c35..ef3766170882b01d580b55e9e9d55c03bcfea339 100644 --- a/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C +++ b/src/postProcessing/functionObjects/forces/forceCoeffs/forceCoeffs.C @@ -425,10 +425,7 @@ void Foam::forceCoeffs::execute() void Foam::forceCoeffs::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/forces/forces/forces.C b/src/postProcessing/functionObjects/forces/forces/forces.C index 2b45394aba137cf0eefd5bcd1192f129e0367c89..9501fad1b06bc7be019051186a5be6f65ff0402c 100644 --- a/src/postProcessing/functionObjects/forces/forces/forces.C +++ b/src/postProcessing/functionObjects/forces/forces/forces.C @@ -1035,10 +1035,7 @@ void Foam::forces::execute() void Foam::forces::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C index 87c9730ec506f678cffdbe9493e21d609d851b85..965b2d419884bc92093e23752a878891fb8f0336 100644 --- a/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C +++ b/src/postProcessing/functionObjects/fvTools/calcFvcDiv/calcFvcDiv.C @@ -149,10 +149,7 @@ void Foam::calcFvcDiv::execute() void Foam::calcFvcDiv::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C index 0a77e2779df9822224723d8de4eadfc92b70d68c..f7152472d1b23b8c5e65851fe96b1d8c4eb9d052 100644 --- a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C +++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C @@ -111,10 +111,7 @@ void Foam::calcFvcGrad::execute() void Foam::calcFvcGrad::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C index 46a3b107ee35f13049c05c1af855c280d488777e..b77cc92ba95445bce3fffa6b3b4cb0a686e3e31c 100644 --- a/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C +++ b/src/postProcessing/functionObjects/fvTools/calcMag/calcMag.C @@ -114,10 +114,7 @@ void Foam::calcMag::execute() void Foam::calcMag::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C b/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C index ccabf77d12690fdb4f2ae28175b459f46a50ec57..31e417cfdb27cd237bd9607f1eee2ce818603893 100644 --- a/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C +++ b/src/postProcessing/functionObjects/jobControl/runTimeControl/runTimeControl.C @@ -236,10 +236,7 @@ void Foam::runTimeControl::execute() void Foam::runTimeControl::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C index 118b387e30bc92baacc7f1d6062484cd0fc6a431..be18bbc0bcb5c8a91867b4223ad0495cec1f9c5b 100644 --- a/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C +++ b/src/postProcessing/functionObjects/utilities/CourantNo/CourantNo.C @@ -159,10 +159,7 @@ void Foam::CourantNo::execute() void Foam::CourantNo::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C index befe184985dcdadaa1aa4fdaa31a53b9bb99731f..1578ebdc3affb7595765bee6615e97b346f9c7ca 100644 --- a/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C +++ b/src/postProcessing/functionObjects/utilities/DESModelRegions/DESModelRegions.C @@ -176,10 +176,7 @@ void Foam::DESModelRegions::execute() void Foam::DESModelRegions::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C index d9a2d1f3160872742345afd71b2c1450208533a2..45726130e72bd471de9d9b37966bc3af54eb834f 100644 --- a/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C +++ b/src/postProcessing/functionObjects/utilities/Lambda2/Lambda2.C @@ -148,10 +148,7 @@ void Foam::Lambda2::execute() void Foam::Lambda2::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C index 03f55583af122993e86d44f914a2114d0a45f3db..8f9193b7da8252375692dc86f015435ea39ff910 100644 --- a/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C +++ b/src/postProcessing/functionObjects/utilities/Peclet/Peclet.C @@ -202,10 +202,7 @@ void Foam::Peclet::execute() void Foam::Peclet::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/Q/Q.C b/src/postProcessing/functionObjects/utilities/Q/Q.C index 0371cbf51680f0263b4a482bd916af5fe7a012c7..aa0bc8db8426f7b7be94eafadf681a1cac2c5564 100644 --- a/src/postProcessing/functionObjects/utilities/Q/Q.C +++ b/src/postProcessing/functionObjects/utilities/Q/Q.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -32,7 +32,7 @@ License namespace Foam { -defineTypeNameAndDebug(Q, 0); + defineTypeNameAndDebug(Q, 0); } @@ -141,10 +141,7 @@ void Foam::Q::execute() void Foam::Q::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C index 16b4c78b0c5ec50f9943be36659d3abecaf89795..1b01cbb4b3d731bc5fa5ee659a70c4d197fa8630 100644 --- a/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C +++ b/src/postProcessing/functionObjects/utilities/blendingFactor/blendingFactor.C @@ -146,12 +146,10 @@ void Foam::blendingFactor::execute() void Foam::blendingFactor::end() { - if (active_) - { - execute(); - } + // Do nothing } + void Foam::blendingFactor::timeSet() { // Do nothing diff --git a/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C b/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C index 5469c232a532815a5d8b449ed8c7e2c53e6312a0..a5f481c52fcbfb735dfda82ca6fa9dcaf7ef5c87 100644 --- a/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C +++ b/src/postProcessing/functionObjects/utilities/fluxSummary/fluxSummary.C @@ -468,17 +468,17 @@ void Foam::fluxSummary::initialiseCellZoneAndDirection returnReduce(patch.nEdges(), sumOp<label>()) ); - label nCells = 0; - forAll(allFaceInfo, faceI) + if (debug) { - if (allFaceInfo[faceI].region() == regionI) + label nCells = 0; + forAll(allFaceInfo, faceI) { - nCells++; + if (allFaceInfo[faceI].region() == regionI) + { + nCells++; + } } - } - if (debug) - { Info<< "*** region:" << regionI << " found:" << returnReduce(nCells, sumOp<label>()) << " faces" << endl; diff --git a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C index 7691cd4939e2cab42a51674f4f9cf8c6aa99f6f6..4e023d924c2a6813683b2aaf6792fdedb71362e6 100644 --- a/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C +++ b/src/postProcessing/functionObjects/utilities/pressureTools/pressureTools.C @@ -329,10 +329,7 @@ void Foam::pressureTools::execute() void Foam::pressureTools::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C index 41df78ac1ede4362f71ce1e1a4f898b48e60da8b..2cc155904b70c8d01ecfc0d4aa610aa96169edad 100644 --- a/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C +++ b/src/postProcessing/functionObjects/utilities/scalarTransport/scalarTransport.C @@ -328,10 +328,7 @@ void Foam::scalarTransport::execute() void Foam::scalarTransport::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C index b8f56a5f6992ffd6eaed1dc0766622c326a80e39..c20ca7a145743ef1b5ea932c0c39f70e209f88cd 100644 --- a/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C +++ b/src/postProcessing/functionObjects/utilities/timeActivatedFileUpdate/timeActivatedFileUpdate.C @@ -140,10 +140,7 @@ void Foam::timeActivatedFileUpdate::execute() void Foam::timeActivatedFileUpdate::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C index f15a58ceb9d8738c78428108f4bfe11a82e025f3..a620430e77d3dc2e9735419b28cdd39b20b0c2f4 100644 --- a/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C +++ b/src/postProcessing/functionObjects/utilities/turbulenceFields/turbulenceFields.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -276,12 +276,7 @@ void Foam::turbulenceFields::execute() void Foam::turbulenceFields::end() -{ - if (active_) - { - execute(); - } -} +{} void Foam::turbulenceFields::timeSet() diff --git a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C index d82a752fc6e2dc45ab53ac7e373ef2f41224a55b..135fc00540c90361d07fcb4a8b3da495aec3e1f5 100644 --- a/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C +++ b/src/postProcessing/functionObjects/utilities/vorticity/vorticity.C @@ -3,7 +3,7 @@ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2014-2015 OpenFOAM Foundation - \\/ M anipulation | + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -136,10 +136,7 @@ void Foam::vorticity::execute() void Foam::vorticity::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C index a7870f21397e1d8bc23df6444232b9c5e83e0e6b..eb261493392881ce82171179af0cf983a4565253 100644 --- a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C +++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C @@ -266,10 +266,7 @@ void Foam::wallShearStress::execute() void Foam::wallShearStress::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C index 6f43a896eb97416dd29d540c94169d5e3b3d9990..f7671475b351f02ce4e47281ff06cf7afdeac874 100644 --- a/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C +++ b/src/postProcessing/functionObjects/utilities/yPlus/yPlus.C @@ -202,10 +202,7 @@ void Foam::yPlus::execute() void Foam::yPlus::end() { - if (active_) - { - execute(); - } + // Do nothing } diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties new file mode 100644 index 0000000000000000000000000000000000000000..60eb1671344de4a81fda5f9eb63fc4f24594a6f5 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/chemistryProperties @@ -0,0 +1,29 @@ +/*--------------------------------*- 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 chemistryProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +chemistryType +{ + chemistrySolver noChemistrySolver; + chemistryThermo psi; +} + +chemistry on; + +initialChemicalTimeStep 1e-07; + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties index 51e80f82d64f8071b585d60ff043dd8742ab02b5..76a0324cf85bf99129febed76ce061d732d062bb 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/combustionProperties @@ -16,7 +16,12 @@ FoamFile // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // combustionModel infinitelyFastChemistry<psiThermoCombustion,gasHThermoPhysics>; + //combustionModel FSD<psiThermoCombustion,gasHThermoPhysics>; +//combustionModel diffusionMulticomponent<psiChemistryCombustion,gasHThermoPhysics>; +//NOTE: To use diffusionMulticomponent combustion model you need to rename files: +// reactions.twoSteps -> reactions +// thermophysicalProperties.twoSteps -> thermophysicalProperties active true; @@ -26,8 +31,22 @@ infinitelyFastChemistryCoeffs C 5.0; } +diffusionMulticomponentCoeffs +{ + Ci (1.0 1.5); + fuels (CH4 CO); + oxydants (O2 O2); + YoxStream (0.23 0.23); + YfStream (1.0 1.0); + sigma (0.02 0.02); + oxydantRes (0.015 0.005); + ftCorr (0 0); + laminarIgn false; +} + FSDCoeffs { + semiImplicit no; Cv 0.1; ftVarMin 1e-2; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties index a25c81382a4d3837f18c4a1051eee255fa7aa4a5..7220f7b9960a190aca55da90dffc9d207d6b4d16 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/radiationProperties @@ -189,7 +189,7 @@ greyMeanAbsorptionEmissionCoeffs scatterModel none; -sootModel mixtureFractionSoot<gasHThermoPhysics>; +sootModel none;//mixtureFractionSoot<gasHThermoPhysics>; mixtureFractionSootCoeffs { diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions index 67f2373c382e5477caeeada95dc46a061ee97423..f8d7139b6b2ccd7b43542ce334f336a34648a621 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions @@ -9,7 +9,7 @@ species reactions { - propaneReaction + methaneReaction { type irreversibleinfiniteReaction; reaction "CH4 + 2O2 + 7.5N2 = CO2 + 2H2O + 7.5N2"; diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps new file mode 100644 index 0000000000000000000000000000000000000000..360014f503f0ebb0778d6705d535c7b616c21db4 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/reactions.twoSteps @@ -0,0 +1,30 @@ +species +( + O2 + H2O + CH4 + CO2 + CO + N2 +); + +reactions +{ + methaneReaction + { + type irreversibleArrheniusReaction; + reaction "CH4^0.9 + 2O2^1.1 = CO + 2H2O"; + A 2.119e12; + beta 0; + Ta 17676; + } + + COReaction + { + type irreversibleArrheniusReaction; + reaction "CO + 0.5O2^0.25 = CO2"; + A 1e6; + beta 0; + Ta 6060; + } +} diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas index db1994252554db6ef0a01216e4b9a5f5337d58f0..5e02e173a2c835aa7ad60a1e8204e880c87efa93 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermo.compressibleGas @@ -124,3 +124,26 @@ N2 Ts 170.672; } } + +CO +{ + specie + { + nMoles 1; + molWeight 28.0106; + } + thermodynamics + { + Tlow 200; + Thigh 6000; + Tcommon 1000; + highCpCoeffs ( 3.04849 0.00135173 -4.85794e-07 7.88536e-11 -4.69807e-15 -14266.1 6.0171 ); + lowCpCoeffs ( 3.57953 -0.000610354 1.01681e-06 9.07006e-10 -9.04424e-13 -14344.1 3.50841 ); + } + transport + { + As 1.67212e-06; + Ts 170.672; + } +} + diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps new file mode 100644 index 0000000000000000000000000000000000000000..ae47817551299d81dca63ffaa7b8914f5fb48532 --- /dev/null +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/constant/thermophysicalProperties.twoSteps @@ -0,0 +1,40 @@ +/*--------------------------------*- C++ -*----------------------------------*\ +| ========= | | +| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | +| \\ / O peration | Version: 2.2.2 | +| \\ / A nd | Web: www.OpenFOAM.org | +| \\/ M anipulation | | +\*---------------------------------------------------------------------------*/ +FoamFile +{ + version 2.0; + format ascii; + class dictionary; + location "constant"; + object thermophysicalProperties; +} +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +thermoType +{ + type hePsiThermo; + mixture reactingMixture; + transport sutherland; + thermo janaf; + energy sensibleEnthalpy; + equationOfState perfectGas; + specie specie; +} + +inertSpecie N2; + +fuel CH4; + +chemistryReader foamChemistryReader; + +foamChemistryFile "$FOAM_CASE/constant/reactions"; + +foamChemistryThermoFile "$FOAM_CASE/constant/thermo.compressibleGas"; + + +// ************************************************************************* // diff --git a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes index 82cb86a511022b8aa967eff09f685572f1bd9aa0..da618b2dab3dd8b8743de0be24a1e46317ca5a36 100644 --- a/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes +++ b/tutorials/combustion/fireFoam/les/smallPoolFire2D/system/fvSchemes @@ -30,7 +30,7 @@ divSchemes default none; div(phi,U) Gauss LUST grad(U); - div(phi,K) Gauss linear; + div(phi,K) Gauss limitedLinear 1; div(phi,k) Gauss limitedLinear 1; div(phi,Yi_h) Gauss multivariateSelection { @@ -39,9 +39,12 @@ divSchemes N2 limitedLinear01 1; H2O limitedLinear01 1; CO2 limitedLinear01 1; + CO limitedLinear01 1; h limitedLinear 1; }; div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; + div(phi,omega) Gauss upwind; + div(U) Gauss linear; div(Ji,Ii_h) Gauss upwind; } diff --git a/tutorials/mesh/parallel/cavity/Allrun b/tutorials/mesh/parallel/cavity/Allrun index cc8f39f76f19df182f58153566349afe981b35c4..22412ea2871c949d4307e6a6c163b3637baa8214 100755 --- a/tutorials/mesh/parallel/cavity/Allrun +++ b/tutorials/mesh/parallel/cavity/Allrun @@ -9,26 +9,27 @@ runApplication blockMesh #cp system/decomposeParDict-2 system/decomposeParDict #runApplication decomposePar -#- redistributePar to do decomposition +# redistributePar to do decomposition runParallel redistributePar 2 -decompose -#- bit of renumbering and running +# Bit of renumbering and running runParallel -log log.renumberMesh-CuthillMcKee renumberMesh 2 -overwrite runParallel -log log.icoFoam-CuthillMcKee icoFoam 2 -#- bit of bad renumbering and running +# Bit of bad renumbering and running runParallel -log log.renumberMesh-parallel renumberMesh 2 -overwrite -dict system/renumberMeshDict-random runParallel -log log.icoFoam-random icoFoam 2 -#- pick up last result +# Pick up last result cp system/controlDict-latestTime system/controlDict -#- redistribute to 5 processors +# Redistribute to 5 processors runParallel -log log.redistributePar-5 redistributePar 5 -decomposeParDict system/decomposeParDict-5 -cellDist -#- run a bit more + +# Run a bit more runParallel -log log.icoFoam-5 icoFoam 5 -decomposeParDict system/decomposeParDict-5 -#- reconstruct mesh and results +# Reconstruct mesh and results runParallel -log log.redistributePar-1 redistributePar 5 -reconstruct -decomposeParDict system/decomposeParDict