The fundamental properties provided by the specie class hierarchy were mole-based, i.e. provide the properties per mole whereas the fundamental properties provided by the liquidProperties and solidProperties classes are mass-based, i.e. per unit mass. This inconsistency made it impossible to instantiate the thermodynamics packages (rhoThermo, psiThermo) used by the FV transport solvers on liquidProperties. In order to combine VoF with film and/or Lagrangian models it is essential that the physical propertied of the three representations of the liquid are consistent which means that it is necessary to instantiate the thermodynamics packages on liquidProperties. This requires either liquidProperties to be rewritten mole-based or the specie classes to be rewritten mass-based. Given that most of OpenFOAM solvers operate mass-based (solve for mass-fractions and provide mass-fractions to sub-models it is more consistent and efficient if the low-level thermodynamics is also mass-based. This commit includes all of the changes necessary for all of the thermodynamics in OpenFOAM to operate mass-based and supports the instantiation of thermodynamics packages on liquidProperties. Note that most users, developers and contributors to OpenFOAM will not notice any difference in the operation of the code except that the confusing nMoles 1; entries in the thermophysicalProperties files are no longer needed or used and have been removed in this commet. The only substantial change to the internals is that species thermodynamics are now "mixed" with mass rather than mole fractions. This is more convenient except for defining reaction equilibrium thermodynamics for which the molar rather than mass composition is usually know. The consequence of this can be seen in the adiabaticFlameT, equilibriumCO and equilibriumFlameT utilities in which the species thermodynamics are pre-multiplied by their molecular mass to effectively convert them to mole-basis to simplify the definition of the reaction equilibrium thermodynamics, e.g. in equilibriumCO // Reactants (mole-based) thermo FUEL(thermoData.subDict(fuelName)); FUEL *= FUEL.W(); // Oxidant (mole-based) thermo O2(thermoData.subDict("O2")); O2 *= O2.W(); thermo N2(thermoData.subDict("N2")); N2 *= N2.W(); // Intermediates (mole-based) thermo H2(thermoData.subDict("H2")); H2 *= H2.W(); // Products (mole-based) thermo CO2(thermoData.subDict("CO2")); CO2 *= CO2.W(); thermo H2O(thermoData.subDict("H2O")); H2O *= H2O.W(); thermo CO(thermoData.subDict("CO")); CO *= CO.W(); // Product dissociation reactions thermo CO2BreakUp ( CO2 == CO + 0.5*O2 ); thermo H2OBreakUp ( H2O == H2 + 0.5*O2 ); Please report any problems with this substantial but necessary rewrite of the thermodynamic at https://bugs.openfoam.org Henry G. Weller CFD Direct Ltd. |
||
---|---|---|
.. | ||
0 | ||
constant | ||
system | ||
README |
Overview ======== + This is a template case with single inlet and outlet + Setup to run the compressible rhoSimpleFoam solver + The case is designed to be meshed with snappyHexMesh + snappyHexMesh is setup to use a single trisurface file named CAD.obj + Copy the CAD.obj file to the constant/triSurface directory + The CAD.obj should contain an inlet and outlet region to create the relevant patches in the mesh Background Mesh =============== + The user should establish the bounds of their CAD.obj file + The blockMeshDict file contains a backgroundMesh subditionary + Set xMin, xMax, etc to be beyond the CAD.obj bounds + Set background mesh density with xCells, yCells, zCells + Run blockMesh Background Mesh (alternative) ============================= + The user can adopt the background mesh patches in the mesh + For example, the background mesh can provide external patches of an external flow + An alternative blockMeshDict file is set up for this: blockMeshDict.extPatches + Simply copy blockMeshDict.extPatches to blockMeshDict and edit inlet, outlet patches accordingly Castellated Mesh ================ + In the snappyHexMeshDict file, replace <inletPatch> with the name of the inlet region in the CAD.obj file + Replace <outletPatch> with the name of the outlet region + run snappyHexMesh to obtain a castellatedMesh + Review the mesh; modify refinement levels and regenerate the mesh as required (levels are set in refinementSurfaces and refinementRegions) Snapped Mesh ============ + In snappyHexMeshDict, set castellatedMesh off; snap on; + Run the snapping phase of snappyHexMesh + Review the mesh Layers ====== + To add layers to the mesh along wall boundary patches... + Switch on addLayers; switch snap off; + Run snappyHexMesh + The number of layers can be changed by modifying nSurfaceLayers Initialisation ============== + In the field files in the 0 directory, set inlet values + For example, in 0/U, set the inlet velocity Uinlet + Set the viscosity in constant/transportProperties