mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' into dsmc
This commit is contained in:
17
.gitignore
vendored
17
.gitignore
vendored
@ -4,9 +4,13 @@
|
||||
# editor and misc backup files - anywhere
|
||||
*~
|
||||
.*~
|
||||
*.orig
|
||||
*.bak
|
||||
*.bak[0-9][0-9]
|
||||
*.orig
|
||||
*.orig[0-9][0-9]
|
||||
\#*\#
|
||||
|
||||
# file-browser settings - anywhere
|
||||
.directory
|
||||
|
||||
# CVS recovered versions - anywhere
|
||||
@ -18,7 +22,7 @@
|
||||
*.so
|
||||
*.jar
|
||||
|
||||
# ignore derived files
|
||||
# derived files
|
||||
lex.yy.c
|
||||
|
||||
# Corefiles
|
||||
@ -30,7 +34,7 @@ core
|
||||
# lnInclude (symlink) folders - anywhere
|
||||
lnInclude
|
||||
|
||||
# build folder(s) - anywhere
|
||||
# build folders - anywhere
|
||||
linux*Gcc*/
|
||||
linux*Icc*/
|
||||
linuxming*/
|
||||
@ -41,15 +45,14 @@ SunOS*Gcc*/
|
||||
# reinstate wmake/rules that might look like build folders
|
||||
!wmake/rules/*/
|
||||
|
||||
# but do continue to ignore the derived wmake files
|
||||
wmake/rules/*/dirToString
|
||||
wmake/rules/*/wmkdep
|
||||
|
||||
# doxygen generated documentation
|
||||
doc/[Dd]oxygen/html
|
||||
doc/[Dd]oxygen/latex
|
||||
doc/[Dd]oxygen/man
|
||||
|
||||
# Other HTML files e.g. ReleaseNotes-?.?.html
|
||||
*.html
|
||||
|
||||
# source packages - anywhere
|
||||
*.tar.bz2
|
||||
*.tar.gz
|
||||
|
||||
12
Allwmake
12
Allwmake
@ -1,13 +1,21 @@
|
||||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
if [ "$PWD" != "$WM_PROJECT_DIR" ]
|
||||
then
|
||||
echo "Error: Current directory in not \$WM_PROJECT_DIR"
|
||||
echo " The environment variable are not consistent with the installation."
|
||||
echo " Check the OpenFOAM entries in your dot-files and source them."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# wmake is required for subsequent targets
|
||||
( cd wmake/src && make )
|
||||
|
||||
# build ThirdParty sources
|
||||
( cd $WM_THIRD_PARTY_DIR && ./Allwmake )
|
||||
$WM_THIRD_PARTY_DIR/Allwmake
|
||||
|
||||
# build OpenFOAM libraries and applications
|
||||
src/Allwmake
|
||||
applications/Allwmake
|
||||
|
||||
|
||||
98
README
98
README
@ -1,8 +1,8 @@
|
||||
# -*- mode: org; -*-
|
||||
#
|
||||
#+TITLE: *OpenFOAM README for version 1.5*
|
||||
#+TITLE: OpenFOAM README for version 1.6
|
||||
#+AUTHOR: OpenCFD Ltd.
|
||||
#+DATE: 26 August 2008
|
||||
#+DATE: July 2009
|
||||
#+LINK: http://www.opencfd.co.uk
|
||||
#+OPTIONS: author:nil ^:{}
|
||||
|
||||
@ -23,17 +23,15 @@
|
||||
section "Running OpenFOAM in 32-bit mode".
|
||||
|
||||
*** Qt (from http://trolltech.com/products/qt)
|
||||
The ParaView 3.3 visualisation package requires that Qt version 4.3.x MUST
|
||||
be installed on the system. Earlier or more recent versions (4.2.x or
|
||||
4.4.x) will NOT work. To check whether Qt4 is installed, and the version,
|
||||
type:
|
||||
The ParaView 3.6.1 visualisation package requires Qt to be installed on the
|
||||
system. ParaView's producers state that ParaView is only officially
|
||||
supported on Qt version 4.3.x. However, we have found in limited tests that
|
||||
ParaView works satisfactorily with newer versions of Qt than 4.3.x. To
|
||||
check whether Qt4 is installed, and the version, type:
|
||||
+ qmake --version
|
||||
|
||||
The ParaView binary executables in the ThirdParty distribution will only
|
||||
work with PRECISELY the same version of Qt with which it was compiled. The
|
||||
64-bit version of ParaView was compiled with Qt-4.3.1 (with openSuSE-10.3)
|
||||
and the 32-bit version of ParaView was compiled with Qt-4.3.2 (with
|
||||
ubuntu-7.10). If the user finds that a ParaView binary fails to run, then
|
||||
Both 32-bit and 64-bit version of ParaView were compiled with Qt-4.4.3 (with
|
||||
openSUSE-11.1). If the user finds that a ParaView binary fails to run, then
|
||||
it is almost certainly due to a conflict in compiled and installed Qt
|
||||
versions and they will need to consult the section below on "Compiling
|
||||
ParaView and the PV3FoamReader module."
|
||||
@ -41,9 +39,11 @@
|
||||
The default versions of Qt used by some GNU/Linux releases are as follows.
|
||||
+ ubuntu-7.10: Version 4.3.2
|
||||
+ ubuntu-8.04: Version 4.3.4
|
||||
+ openSuSE-10.2: Version 4.2.1 - too old
|
||||
+ openSuSE-10.3: Version 4.3.1
|
||||
+ openSuSE-11.0: Version 4.4.0 - too new
|
||||
+ ubuntu-9.04: Version 4.5.0
|
||||
+ openSUSE-10.2: Version 4.2.1 - too old
|
||||
+ openSUSE-10.3: Version 4.3.1
|
||||
+ openSUSE-11.0: Version 4.4.0
|
||||
+ openSUSE-11.1: Version 4.4.3
|
||||
|
||||
Compilation and running of ParaView has been successful using the libraries
|
||||
downloaded in the "libqt4-dev" package on ubuntu.
|
||||
@ -51,7 +51,7 @@
|
||||
If you don't have an appropriate version of Qt installed you can download
|
||||
the sources from TrollTech e.g.:
|
||||
ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-4.3.5.tar.bz2
|
||||
and compile and install in /usr/local or some other location that does to
|
||||
and compile and install in /usr/local or some other location that does not
|
||||
conflict with the pre-installed version.
|
||||
|
||||
* Installation
|
||||
@ -61,14 +61,13 @@
|
||||
The environment variable settings are contained in files in an etc/ directory
|
||||
in the OpenFOAM release. e.g. in
|
||||
|
||||
+ $HOME/OpenFOAM/OpenFOAM-<VERSION>/etc/
|
||||
+ where <VERSION> corresponds to the version 1.4, 1.5, ...
|
||||
+ $HOME/OpenFOAM/OpenFOAM-1.6/etc/
|
||||
|
||||
1) EITHER, if running bash or ksh (if in doubt type 'echo $SHELL'), source the
|
||||
etc/bashrc file by adding the following line to the end of your
|
||||
$HOME/.bashrc file:
|
||||
|
||||
+ . $HOME/OpenFOAM/OpenFOAM-<VERSION>/etc/bashrc
|
||||
+ . $HOME/OpenFOAM/OpenFOAM-1.6/etc/bashrc
|
||||
|
||||
Then update the environment variables by sourcing the $HOME/.bashrc file by
|
||||
typing in the terminal:
|
||||
@ -78,7 +77,7 @@
|
||||
2) OR, if running tcsh or csh, source the etc/cshrc file by adding the
|
||||
following line to the end of your $HOME/.cshrc file:
|
||||
|
||||
+ source $HOME/OpenFOAM/OpenFOAM-<VERSION>/etc/cshrc
|
||||
+ source $HOME/OpenFOAM/OpenFOAM-1.6/etc/cshrc
|
||||
|
||||
Then update the environment variables by sourcing the $HOME/.cshrc file by
|
||||
typing in the terminal:
|
||||
@ -94,13 +93,13 @@
|
||||
appropriate resource file. Here is a bash/ksh/sh example:
|
||||
|
||||
+ export FOAM_INST_DIR=/data/app/OpenFOAM
|
||||
+ foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
||||
+ foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/bashrc
|
||||
+ [ -f $foamDotFile ] && . $foamDotFile
|
||||
|
||||
and a csh/tcsh example:
|
||||
|
||||
+ setenv FOAM_INST_DIR /data/app/OpenFOAM
|
||||
+ foamDotFile=$FOAM_INST_DIR/OpenFOAM-<VERSION>/etc/bashrc
|
||||
+ foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/bashrc
|
||||
+ if ( -f $foamDotFile ) source $foamDotFile
|
||||
|
||||
The value set in '$FOAM_INST_DIR' will be used to locate the remaining parts
|
||||
@ -113,7 +112,7 @@
|
||||
which may be obtained from http://gcc.gnu.org/.
|
||||
|
||||
Install the compiler in
|
||||
$WM_PROJECT_INST_DIR/ThirdParty/gcc-<GCC_VERSION>/platforms/$WM_ARCH$WM_COMPILER_ARCH/
|
||||
$WM_THIRD_PARTY_DIR/gcc-<GCC_VERSION>/platforms/$WM_ARCH$WM_COMPILER_ARCH/
|
||||
and change the gcc version number in $WM_PROJECT_DIR/etc/settings.sh and
|
||||
$WM_PROJECT_DIR/etc/settings.csh appropriately and finally update the
|
||||
environment variables as in section 3.
|
||||
@ -121,10 +120,12 @@
|
||||
Now go to the top-level source directory $WM_PROJECT_DIR and execute the
|
||||
top-level build script './Allwmake'. In principle this will build everything,
|
||||
but if problems occur with the build order it may be necessary to update the
|
||||
environment variables and re-execute 'Allwmake'. If you experience
|
||||
difficulties with building the source-pack, or your platform is not currently
|
||||
supported, please contact <enquiries@OpenCFD.co.uk> to negotiate a support
|
||||
contract and we will do the port and maintain it for future releases.
|
||||
environment variables and re-execute './Allwmake'.
|
||||
|
||||
If you experience difficulties with building the source-pack, or your platform
|
||||
is not currently supported, please contact <enquiries@OpenCFD.co.uk> to
|
||||
negotiate a support contract and we will do the port and maintain it for
|
||||
future releases.
|
||||
|
||||
* Testing the installation
|
||||
To check your installation setup, execute the 'foamInstallationTest' script
|
||||
@ -135,33 +136,37 @@
|
||||
|
||||
* Getting Started
|
||||
Create a project directory within the $HOME/OpenFOAM directory named
|
||||
<USER>-<VERSION> (e.g. 'chris-1.5' for user chris and OpenFOAM version 1.5)
|
||||
<USER>-1.6 (e.g. 'chris-1.6' for user chris and OpenFOAM version 1.6)
|
||||
and create a directory named 'run' within it, e.g. by typing:
|
||||
|
||||
+ mkdir -p $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
||||
+ mkdir -p $FOAM_RUN/run
|
||||
|
||||
Copy the 'tutorial' examples directory in the OpenFOAM distribution to the
|
||||
'run' directory. If the OpenFOAM environment variables are set correctly,
|
||||
then the following command will be correct:
|
||||
|
||||
+ cp -r $WM_PROJECT_DIR/tutorials
|
||||
$HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run
|
||||
+ cp -r $WM_PROJECT_DIR/tutorials $FOAM_RUN
|
||||
|
||||
Run the first example case of incompressible laminar flow in a cavity:
|
||||
|
||||
+ cd $HOME/OpenFOAM/${USER}-${WM_PROJECT_VERSION}/run/tutorials/icoFoam/cavity
|
||||
+ cd $FOAM_RUN/tutorials/incompressible/icoFoam/cavity
|
||||
+ blockMesh
|
||||
+ icoFoam
|
||||
+ paraFoam
|
||||
|
||||
* Compiling Paraview 3.3 and the PV3FoamReader module
|
||||
A version of Qt 4.3.x must be installed to compile ParaView. The compilation
|
||||
is a fairly simple process using the supplied buildParaView3.3-cvs script that
|
||||
has worked is our tests with other packages supplied in the ThirdParty
|
||||
directory, namely cmake-2.4.6 and gcc-4.3.1. Execute the following:
|
||||
+ cd $FOAM_INST_DIR/ThirdParty
|
||||
+ rm -rf ParaView3.3-cvs/platforms
|
||||
+ buildParaView3.3-cvs
|
||||
Refer to the OpenFOAM User Guide at http://www.OpenFOAM.org/doc/user.html for
|
||||
more information.
|
||||
|
||||
* Compiling Paraview 3.6.1 and the PV3FoamReader module
|
||||
If there are problems encountered with ParaView, then it may be necessary to
|
||||
compile ParaView from sources. The compilation
|
||||
is a fairly simple process using the makeParaView script
|
||||
(found in ThirdParty directory), which has worked in our tests with other
|
||||
packages supplied in the ThirdParty directory, namely cmake-2.6.4 and
|
||||
gcc-4.3.3. Execute the following:
|
||||
+ cd $WM_THIRD_PARTY_DIR
|
||||
+ rm -rf paraview-3.6.1/platforms
|
||||
+ ./makeParaView
|
||||
|
||||
The PV3FoamReader module is an OpenFOAM utility that can be compiled in the
|
||||
usual manner as follows:
|
||||
@ -169,6 +174,21 @@
|
||||
+ ./Allwclean
|
||||
+ ./Allwmake
|
||||
|
||||
*** Compiling Paraview with a local version of Qt
|
||||
If the user still encounters problems with ParaView, it may relate to the
|
||||
version of Qt, in which case, it is recommended that the user first
|
||||
downloads a supported version of Qt /e.g./ 4.3.5 as described in the section
|
||||
on "Qt". The user should unpack the source pack in the $WM_THIRD_PARTY_DIR.
|
||||
Then the user can build Qt by executing from within $WM_THIRD_PARTY_DIR:
|
||||
+ makeQt
|
||||
|
||||
The user should then compile ParaView using the local version of Qt by
|
||||
executing makeParaView with the -qmake option, giving the full path of the
|
||||
newly built qmake as an argument:
|
||||
+ makeParaView -qmake <path_to_qmake>
|
||||
|
||||
The user must then recompile the PV3FoamReader module as normal (see above).
|
||||
|
||||
* Documentation
|
||||
http://www.OpenFOAM.org/doc
|
||||
|
||||
|
||||
176
ReleaseNotes-1.5
176
ReleaseNotes-1.5
@ -1,176 +0,0 @@
|
||||
# -*- mode: org; -*-
|
||||
#
|
||||
#+TITLE: *OpenFOAM release notes for version 1.5*
|
||||
#+AUTHOR: OpenCFD Ltd.
|
||||
#+DATE: 07 October 2008
|
||||
#+LINK: http://www.opencfd.co.uk
|
||||
#+OPTIONS: author:nil ^:{}
|
||||
|
||||
* Overview
|
||||
OpenFOAM-1.5 is is a significant upgrade to version 1.4 in ways which are
|
||||
outlined below. This release passes all our standard tests and the tutorials
|
||||
have been broadly checked. If there are any bugs, please report them using
|
||||
the instructions set out in: http://www.OpenFOAM.org/bugs.html.
|
||||
|
||||
Most of the developments for this release are in: new applications, e.g. for
|
||||
multiphase flow and cavitation, buoyancy-flow and heat transfer, high speed
|
||||
flows and even molecular dynamics; new utilities, e.g. for meshing and case
|
||||
monitoring; and, new modelling, e.g. in Lagrangian particle tracking,
|
||||
radiation and rotating frames of reference. With these new applications come
|
||||
numerous new example cases.
|
||||
|
||||
* GNU/Linux version
|
||||
The 64bit binary packs of the OpenFOAM release were compiled on a machine
|
||||
running SuSE GNU/Linux version 10.3 and the 32bit on a machine running Ubuntu
|
||||
GNU/Linux version 7.1 and also tested on Ubuntu 8.04. We recommend that
|
||||
users run OpenFOAM on one of these or a similar recent version of GNU/Linux.
|
||||
This release has also been successfully compiled and tested on older GNU/Linux
|
||||
releases but this requires the installation of Qt 4.3.? for ParaView-3 to run.
|
||||
|
||||
* C++ Compiler version
|
||||
+ Released compiled with GCC 4.3.1, the latest version.
|
||||
+ Built in support for the Intel C++ 10.? compiler (untested).
|
||||
+ The choice of the compiler is controlled by the setting of the $WM_COMPILER
|
||||
and $WM_COMPILER_ARCH environment variables in the OpenFOAM-1.5/etc/bashrc
|
||||
(or cshrc) file.
|
||||
+ The location of the installation of the compiler is controlled by the
|
||||
$compilerInstall environment variable in the OpenFOAM-1.5/etc/settings.sh
|
||||
(or settings.csh) file.
|
||||
|
||||
* Developments to solvers (applications)
|
||||
+ New rhoCentralFoam solver for high-speed, viscous, compressible flows using
|
||||
non-oscillatory, central-upwind schemes.
|
||||
+ New interDyMFoam solver for 2 incompressible, isothermal, immiscible fluids
|
||||
using a VoF phase-fraction based interface capturing approach, with optional
|
||||
mesh motion and mesh topology changes including adaptive mesh
|
||||
(un)refinement. Useful for simulations such as tank filling, sloshing ---
|
||||
using solid body motion e.g. SDA or SKA (6DoF) --- and slamming (using the
|
||||
mesh motion solver) and other large-scale applications that benefit from the
|
||||
efficiency gain of adaptive mesh (un)refinement of the interface.
|
||||
+ New compressibleInterFoam solver for 2 compressible, isothermal, immiscible
|
||||
fluids using a volume of fluid (VoF) phase-fraction approach for
|
||||
interface-capturing. The momentum and other fluid properties are of the
|
||||
"mixture" and a single momentum equation is solved. Turbulence is modelled
|
||||
using a run-time selectable incompressible LES model.
|
||||
+ New interPhaseChangeFoam solver for 2 incompressible, isothermal, immiscible
|
||||
fluids with phase-change, e.g. cavitation. Uses VoF interface capturing,
|
||||
with momentum and other fluid properties described for the ``mixture'' and a
|
||||
single momentum equation is solved. The set of phase-change models provided
|
||||
are designed to simulate cavitation but other mechanisms of phase-change are
|
||||
supported within this solver framework.
|
||||
+ New rasCavitatingFoam solver for transient cavitation using a barotropic
|
||||
compressibility model, with RAS turbulence.
|
||||
+ New lesCavitatingFoam solver for transient cavitation using a barotropic
|
||||
compressibility model, with LES turbulence.
|
||||
+ New chtMultiRegionFoam solver that couples conjugate heat transfer in a
|
||||
solid to a buoyancy-driven flow simulation.
|
||||
+ New PDRFoam solver for compressible premixed/partially-premixed turbulent
|
||||
combustion that includes porosity/distributed resistance (PDR) modelling to
|
||||
handle regions containing solid blockages which cannot be resolved by the
|
||||
mesh. Requires the PDR fields.
|
||||
+ New lesBuoyantFoam solver for transient, buoyant, turbulent flow of
|
||||
compressible fluids for ventilation and heat-transfer. Turbulence is
|
||||
modelled using a run-time selectable compressible LES model.
|
||||
+ New rhoPimpleFoam solver for transient, turbulent flow of compressible
|
||||
fluids for ventilation and heat-transfer. Uses the flexible PIMPLE
|
||||
(PISO-SIMPLE) solution for time-resolved and pseudo-transient simulations.
|
||||
+ New buoyantSimpleRadiationFoam solver for steady-state, buoyant, turbulent
|
||||
flow of compressible fluids with radiation, for ventilation and
|
||||
heat-transfer.
|
||||
+ New rhoTurbTwinParcelFoam solver for transient for compressible, turbulent
|
||||
flow with two thermo-clouds.
|
||||
+ New gnemdFOAM solver for general purpose molecular dynamics that simulates
|
||||
atoms in arbitrary shaped domains and average atomic/molecular quantities to
|
||||
the mesh to create field data.
|
||||
+ New mdEqulibrationFoam solver to equilibrates and/or preconditions molecular
|
||||
dynamics systems.
|
||||
+ Demonstration SRFSimpleFoam solver based on simpleFoam that incorporates the
|
||||
SRF extensions (see below) for rotating flows.
|
||||
|
||||
* Automatic mesher
|
||||
New snappyHexMesh utility that generates split-hex meshes automatically from
|
||||
triangulated (STL) surface geometries. The mesh approximately conforms to
|
||||
the surface by iteratively refining a starting mesh and morphing the
|
||||
resulting split-hex mesh to the surface. An optional phase will shrink back
|
||||
the resulting mesh and insert cell layers. It has a flexible specification
|
||||
of mesh refinement level and robust surface handling with a pre-specified
|
||||
final mesh quality. It runs in parallel with a load balancing step every
|
||||
iteration.
|
||||
|
||||
* Developments to utilities
|
||||
+ New extrude2DMesh utility that extrudes 2D meshes into a 3D mesh. 2D meshes
|
||||
are described by faces with 2 points, so can be used in combination with 2D
|
||||
meshes converted with ccm26ToFoam.
|
||||
+ New couplePatches functionality integrated into createPatch, which
|
||||
optionally synchronises ("couples") points and faces of coupled (cyclic,
|
||||
processor) patches.
|
||||
+ New applyBoundaryLayer pre-processing utility to apply 1/7th power-law
|
||||
boundary layers at walls, starting from uniform or potential flow solutions.
|
||||
+ New execFlowFunctionObjects utility executes functionObjects as a
|
||||
post-processing activity, e.g. probes, sampling, force calculation.
|
||||
+ New changeDictionary utility makes batch changes to OpenFOAM input files,
|
||||
e.g. to change boundary conditions of field files.
|
||||
+ New foamCalc utility, a generic post-processing field calculator tool
|
||||
+ New molConfig pre-processing utility for molecular dynamics cases. Fills
|
||||
zones of a mesh with single crystal lattices of specified structure,
|
||||
density, orientation, alignment and temperature.
|
||||
+ Extended splitMeshRegions utility to split multi-zone meshes, e.g. defined
|
||||
through cellZones, into separate meshes.
|
||||
+ Extended the foamToVTK, decomposePar, reconstructPar and mapFields utilities
|
||||
to include support for multiple particle clouds in parallel processing.
|
||||
|
||||
* Migration from ParaView 2.4 to ParaView 3.x
|
||||
+ Rewritten OpenFOAM Reader Module for version 3, a major redesign of
|
||||
ParaView.
|
||||
+ New features include viewing patch names, reading of Lagrangian data,
|
||||
handling of cell, face and point sets, multiple views.
|
||||
|
||||
* Model development
|
||||
+ Overhauled the lagrangian library to support multiple clouds.
|
||||
+ New lagrangianIntermediate library incorporating a hierarchy of parcel and
|
||||
cloud types, accommodating kinematic, thermodynamic and reacting
|
||||
applications, including coupling to the new radiation library. Sub-models
|
||||
are added at the relevant level of physics, e.g.:
|
||||
- kinematic: injection, wall interaction, drag, dispersion;
|
||||
- thermo: heat transfer;
|
||||
- reacting: reacting composition, mass transfer, surface reactions.
|
||||
+ New single rotating frame of reference (SRF) library for rotating flow
|
||||
applications, e.g. turbo-machinery.
|
||||
+ New radiation library including the P1 model and associated Marshak boundary
|
||||
conditions for incident radiation.
|
||||
+ New displacementInterpolation motion solver for flexible mesh scaling.
|
||||
+ New molecularDynamics Lagrangian library to calculate intermolecular forces
|
||||
between spherically symmetrical monatomic species in arbitrary geometries.
|
||||
|
||||
* New functionObjects
|
||||
To aid common monitoring and post-processing activities.
|
||||
+ forces: calculate the force and moment on a patch or set of patches, e.g. to
|
||||
calculate the lift, drag and moment of an object in the flow.
|
||||
+ forceCoeffs: calculate the normalised force and moment on a patch or set of
|
||||
patches, e.g. to calculate the lift, drag and moment coefficients of an
|
||||
object in the flow.
|
||||
+ fieldAverage: calculate field arithmetic mean and prime-squared averages for
|
||||
a list of fields.
|
||||
+ foamCalcFunctions: calculate field components, div, mag, magGrad or magSqr.
|
||||
|
||||
* Improvements to boundary conditions
|
||||
+ Generalised jumpCyclic type: cyclic condition with an additional prescribed
|
||||
jump in value.
|
||||
+ fan type: specialisation of jumpCyclic, applying a prescribed jump in
|
||||
pressure to simulate a fan within a mesh.
|
||||
+ Generalised advective outflow boundary condition based on solving D/Dt(psi,
|
||||
U) = 0 at the boundary.
|
||||
+ Additional turbulent flow inlet to specify mixing length and frequency.
|
||||
+ Generalisation of time varying set of boundary conditions.
|
||||
|
||||
* Other
|
||||
+ New argument-free command execution, e.g typing "icoFoam" without root and
|
||||
case directory arguments.
|
||||
+ Extended time command line options.
|
||||
+ Many enhancements to dictionary including macro substitution, optional
|
||||
merging and default/overwrite behaviour, enhanced "#include" file handling
|
||||
and the framework to support function evaluation.
|
||||
+ Cross-links between applications and Doxygen documentation with the "-doc"
|
||||
argument.
|
||||
+ Non-blocking, non-buffered, parallel transfers with potential scaling
|
||||
benefits for larger number of processors.
|
||||
374
ReleaseNotes-1.6
Normal file
374
ReleaseNotes-1.6
Normal file
@ -0,0 +1,374 @@
|
||||
# -*- mode: org; -*-
|
||||
#
|
||||
#+TITLE: OpenFOAM release notes for version 1.6
|
||||
#+AUTHOR: OpenCFD Ltd.
|
||||
#+DATE: July 2009
|
||||
#+LINK: http://www.opencfd.co.uk
|
||||
#+OPTIONS: author:nil ^:{}
|
||||
|
||||
* Overview
|
||||
OpenFOAM-1.6 is a significant upgrade to version 1.5 in ways that are
|
||||
outlined below. This release passes all our standard tests and the
|
||||
tutorials have been broadly checked. If there are any bugs, please report
|
||||
them using the instructions set out here:
|
||||
http://www.OpenFOAM.org/bugs.html.
|
||||
|
||||
* GNU/Linux version
|
||||
The 32bit and 64bit binary packs of the OpenFOAM release were compiled on
|
||||
a machine running openSUSE GNU/Linux version 11.1 and also tested on
|
||||
Ubuntu 9. We recommend that users run OpenFOAM on one of these, or on a
|
||||
similarly recent version of GNU/Linux. This release has also been
|
||||
successfully compiled and tested on older GNU/Linux releases, but this
|
||||
requires the installation of Qt 4.3.? (the sources for which are supplied
|
||||
with OpenFOAM-1.6, see README) for ParaView-3 to run.
|
||||
|
||||
* C++ Compiler version
|
||||
+ Release compiled with GCC 4.3.3.
|
||||
+ Built-in support for the Intel C++ 10.? compiler (untested).
|
||||
+ The choice of the compiler is controlled by the setting of the
|
||||
~$WM_COMPILER~ and ~$WM_COMPILER_ARCH~ environment variables in the
|
||||
/OpenFOAM-1.6/etc/bashrc/ (or /cshrc/) file.
|
||||
+ The location of the compiler installation is controlled by the
|
||||
~$compilerInstall~ environment variable in the
|
||||
/OpenFOAM-1.6/etc/settings.sh/ (or /settings.csh/) file.
|
||||
|
||||
* Library developments
|
||||
|
||||
*** Core library
|
||||
|
||||
***** Dictionary improvements/changes
|
||||
+ Dictionaries can use words (unquoted) or regular expressions (quoted)
|
||||
for their keywords. When searching, an exact match has priority over a
|
||||
regular expression match. Multiple regular expressions are matched in
|
||||
reverse order.
|
||||
+ The *new* =#includeIfPresent= directive is similar to the =#include=
|
||||
directive, but does not generate an error if the file does not exist.
|
||||
+ The default =#inputMode= is now '=merge=', which corresponds to the most
|
||||
general usage. The =#inputMode warn= corresponds to the previous default
|
||||
behaviour.
|
||||
+ The *new* =#inputMode protect= can be used to conditionally merge
|
||||
default values into existing dictionaries.
|
||||
+ *New* =digest()= method to calculate and return the SHA1 message digest.
|
||||
|
||||
***** Regular Expressions
|
||||
The addition of regular expressions marks a major improvement in
|
||||
usability.
|
||||
+ *New* =regExp= class provides support for accessing POSIX extended
|
||||
regular expresssions from within OpenFOAM.
|
||||
+ *New* =wordRe= class can contain a =word= or a =regExp= .
|
||||
+ *New* =stringListOps= to search string lists based on regular
|
||||
expressions, =wordRe= or =wordReList=.
|
||||
+ =Istream= and =Ostream= now retain backslashes when reading/writing
|
||||
strings.
|
||||
|
||||
***** Convenience changes
|
||||
+ =IOobject= has a *new* constructor for creating an =IOobject= from a
|
||||
single-path specification (eg, see =blockMesh -dict= option).
|
||||
+ =argList= has *new* convenience methods for accessing options more
|
||||
directly: =option()=, =optionFound()=, =optionLookup()=, =optionRead()=,
|
||||
=optionReadIfPresent()=.
|
||||
+ The *new* =readList(Istream&)= can read a bracket-delimited list or
|
||||
handle a single value as a list of size 1. This can be a useful
|
||||
convenience when processing command-line options.
|
||||
+ Export *new* environment variable =FOAM_CASENAME= that contains the
|
||||
name part of the =FOAM_CASE= environment variable.
|
||||
|
||||
*** Turbulence modelling
|
||||
+ Major development of turbulence model libraries to give extra flexibility
|
||||
at the solver level. For solvers that can support either RAS/LES
|
||||
computations, the selection is made in the
|
||||
/constant/turbulenceProperties/, by setting the =simulationType= keyword
|
||||
to:
|
||||
- =laminar=,
|
||||
- =RASModel=,
|
||||
- =LESModel=.
|
||||
+ Depending on the selection, the model is the instantiated from /constant//
|
||||
- /RASProperties/,
|
||||
- /LESProperties/.
|
||||
|
||||
***** RAS wall functions
|
||||
Wall functions are now run-time selectable per patch for RAS.
|
||||
+ Velocity:
|
||||
- Apply to turbulent viscosities =nut= or =mut=,
|
||||
- Apply to =k=, =Q=, =R=,
|
||||
- Apply to =epsilon=, =omega=.
|
||||
+ Temperature:
|
||||
- Apply to turbulent thermal diffusivity, =alphat= (compressible only).
|
||||
+ To apply wall functions:
|
||||
- To recapture the functionality of previous OpenFOAM versions (v1.5 and
|
||||
earlier) assign:
|
||||
- for velocity:
|
||||
- =nut=: =nutWallFunction=,
|
||||
- =mut=: =muWallFunction=,
|
||||
- =epsilon=: =epsilonWallFunction=,
|
||||
- =omega=: =omegaWallFunction=,
|
||||
- =k=, =q=, =R=: =kqRWallFunction=.
|
||||
- for temperature:
|
||||
- =alphat=: =alphatWallFunction=.
|
||||
- New =alphaSgsJayatillekeWallFunction= thermal wall function for
|
||||
compressible LES.
|
||||
|
||||
***** *New* LES turbulence models
|
||||
+ Spalart-Allmaras DDES.
|
||||
+ Spalart-Allmaras IDDES.
|
||||
|
||||
***** Upgrading:
|
||||
+ *New* utility - =applyWallFunctionBoundaryConditions=.
|
||||
+ Solvers will automatically update existing cases.
|
||||
- New fields created based on the presence of the =nut/mut= field.
|
||||
- Boundary conditions include scoping, i.e compressibility:: for
|
||||
compressible solvers.
|
||||
- Modified fields will be backed-up to /<field>.old/.
|
||||
+ NOTE:
|
||||
- Fields are only updated for those fields associated with the current
|
||||
turbulence model selection, i.e. if fields exist for use with other
|
||||
models, they will not be updated.
|
||||
- The new specification is not backwards compatible.
|
||||
|
||||
*** Thermo-physical Models
|
||||
+ Old compressibility-based thermo package renamed
|
||||
=basicThermo= \rightarrow =basicPsiThermo=.
|
||||
+ *New* =basicRhoThermo= thermo package.
|
||||
- Additional density field stored.
|
||||
- General form - can be used for other types of media, e.g. liquids.
|
||||
- Additional polynomial-based thermodynamics:
|
||||
- Equation of state: =icoPolynomial=,
|
||||
- Transport: =polynomialTransport=,
|
||||
- Thermo: =hPolynomialThermo=.
|
||||
+ Removed earlier hard-coding of gas thermophysics for chemistry modelling:
|
||||
- =reactingMixture= now templated on thermo package,
|
||||
- =chemistryModel= now templated on thermo package,
|
||||
- =chemistrySolver= now templated on thermo package.
|
||||
+ *New* =fvDOM= radition model
|
||||
- finite volume, discrete ordinates method.
|
||||
+ *New* (reinstated) =eThermo= thermodynamics package
|
||||
- internal energy-based thermodynamics.
|
||||
|
||||
*** Lagrangian
|
||||
|
||||
***** Intermediate
|
||||
+ Overhaul of the underlying framework.
|
||||
+ Reacting now split into reacting and reacting multiphase.
|
||||
+ New structure for variable composition.
|
||||
+ Many new sub-models, including:
|
||||
- Injection
|
||||
- =PatchInjection= - injection local to patch face cells,
|
||||
- =FieldActivatedInjection= - injection based on satisfying external
|
||||
criterion,
|
||||
- LookupTableInjection - explicity define injection locations and all
|
||||
parcel properties.
|
||||
- Post-processing
|
||||
- patch post-processing - collect data for parcels impacting user,
|
||||
defined patches.
|
||||
- Patch interaction
|
||||
- generalised behaviour for parcel interaction with patch.
|
||||
- Phase change
|
||||
- liquid evaporation.
|
||||
|
||||
***** Coal combustion
|
||||
+ *New* library - extension of reacting-multiphase functionality.
|
||||
- Surface reaction/combustion models.
|
||||
|
||||
*** Discrete methods
|
||||
+ *New* library offering DSMC simulation functionality - see =dsmcFoam=
|
||||
below.
|
||||
+ Significant development of the libraries offering molecular dynamics
|
||||
simulation functionality - see =mdFoam= and =mdEquilibrationFoam= below.
|
||||
|
||||
*** Numerics
|
||||
+ *new* polynomial-fit higher-order interpolation schemes:
|
||||
- =biLinearFit=
|
||||
- =linearFit=
|
||||
- =quadraticLinearFit=
|
||||
- =quadraticFit=
|
||||
- =linearPureUpwindFit=
|
||||
- =quadraticLinearPureUpwindFit=
|
||||
- =quadraticLinearUpwindFit=
|
||||
- =quadraticUpwindFit=
|
||||
- =cubicUpwindFit=
|
||||
+ *new* polynomial-fit higher-order Sn-Grad: =quadraticFitSnGrad=.
|
||||
|
||||
*** *New* surfMesh library
|
||||
Provides a more efficient storage mechanism than possible with =triSurface=
|
||||
without restrictions on the shape of the face (templated parameter).
|
||||
+ =MeshedSurface= class - with zero or more contiguous =surfZones= .
|
||||
+ =UnsortedMeshedSurface= class - unordered surface zones (as per
|
||||
=triSurface=).
|
||||
+ =surfMesh= class - for reading/writing in native OpenFOAM format.
|
||||
|
||||
* Solvers
|
||||
*** Solver restructuring
|
||||
The upgrade to the turbulence models means that the simulation type, i.e.
|
||||
laminar, RAS or LES can be selected at run time. This has allowed a reduction
|
||||
in the number of solvers, simplifying the overall code structure
|
||||
+ Solvers which support laminar, RAS and LES:
|
||||
- =turbFoam=, =oodles= \rightarrow =pisoFoam=.
|
||||
- =turbDyMFoam= \rightarrow =pimpleDyMFoam=.
|
||||
- =rhoTurbFoam=, =coodles= \rightarrow =rhoPisoFoam=.
|
||||
- =xoodles= \rightarrow absorbed into =XiFoam=.
|
||||
- =buoyantFoam=, =lesBuoyantFoam= \rightarrow =buoyantPisoFoam=.
|
||||
- =interFoam=, =rasInterFoam=, =lesInterFoam= \rightarrow =interFoam=.
|
||||
- =lesCavitatingFoam=, =rasCavitatingFoam= \rightarrow =cavitatingFoam=.
|
||||
+ Solvers which support LES only:
|
||||
- =channelOodles= \rightarrow =channelFoam= (LES).
|
||||
+ =pd= replaced by static pressure =p=. All solvers in which buoyancy affects
|
||||
might be strong have been converted from using =pd= to =p= with improved
|
||||
numerics to give equally good accuracy and stability. This change is
|
||||
prompted by the need to remove the confusion surrounding the meaning and
|
||||
purpose of =pd=.
|
||||
+ =g= (acceleration due to gravity) is now a *new*
|
||||
=uniformDimensionedVectorField= which has the behaviour of a field, is
|
||||
registered to an =objectRegistry=, but stores only a single value. Thus
|
||||
=g= and other =UniformDimensionedFields= can be created and looked-up
|
||||
elsewhere in the code, /e.g./ in =fvPatchFields=.
|
||||
|
||||
*** Solver control improvements
|
||||
Now uses consistent dictionary entries for the solver controls.
|
||||
+ This Allows dictionary substitutions and regular expressions in
|
||||
/system/fvSolution/.
|
||||
+ The old solver control syntax is still supported (warning emitted), but
|
||||
the *new* =foamUpgradeFvSolution= utility can be used to convert
|
||||
/system/fvSolution/ to the new format.
|
||||
|
||||
*** *New* Solvers
|
||||
+ =buoyantBoussinesqSimpleFoam= Steady state heat transfer solver using a
|
||||
Boussinesq approximation for buoyancy, with laminar, RAS or LES turbulence
|
||||
modelling.
|
||||
+ =buoyantBoussinesqPisoFoam= Transient heat transfer solver using a
|
||||
Boussinesq approximation for buoyancy, with laminar, RAS or LES turbulence
|
||||
modelling.
|
||||
+ =coalChemistryFoam= Transient, reacting lagrangian solver, employing a coal
|
||||
cloud and a thermo cloud, with chemistry, and laminar, RAS or LES turbulence
|
||||
modelling.
|
||||
+ =porousExplicitSourceReactingParcelFoam= Transient, reacting lagrangian
|
||||
solver, employing a single phase reacting cloud, with porous media, explicit
|
||||
mass sources, and laminar, RAS or LES turbulence modelling.
|
||||
+ =rhoReactingFoam= Density-based thermodynamics variant of the reactingFoam
|
||||
solver, i.e. now applicable to liquid systems.
|
||||
+ =dsmcFoam= DSMC (Direct Simulation Monte-Carlo) solver for rarefied gas
|
||||
dynamics simulations, able to simulate mixtures of an arbitrary number of
|
||||
gas species. The variable hard sphere collision model with Larsen-Borgnakke
|
||||
internal energy redistribution (see "Molecular Gas Dynamics and the Direct
|
||||
Simulation of Gas Flows" G.A. Bird, 1994) is available; other run-time
|
||||
selectable collision models can be easily added.
|
||||
|
||||
*** Updated solvers
|
||||
+ =mdFoam= Molecular Dynamics (MD) solver able to simulate a mixture of an
|
||||
arbitrary number of mono-atomic and small, rigid polyatomic (i.e. H2O, N2)
|
||||
molecular species, with 6 degree of freedom motion, in complex geometries. A
|
||||
molecule of any species can be built by specifying its sites of mass and
|
||||
charge. All molecules interact with short-range dispersion forces and
|
||||
pairwise electrostatic interactions using methods described in: Fennell and
|
||||
Gezelter, J. Chem. Phys. 124, 234104 (2006).
|
||||
+ =mdEquilibrationFoam= Similar to mdFoam, but employs velocity scaling to
|
||||
adjust the simulation temperature to a target value. Useful to equilibrate a
|
||||
case before simulation.
|
||||
+ =chtMultiRegionFoam= New boundary condition allows independent decomposition
|
||||
of coupled regions without any constraint on the decomposition.
|
||||
|
||||
* Boundary conditions
|
||||
+ Improved set of direct mapped boundary conditions.
|
||||
+ =buoyantPressureFvPatchScalarField=, the *new* buoyancy pressure boundary
|
||||
condition now supports =p= and =pd= for backward compatibility.
|
||||
+ =uniformDensityHydrostaticPressure= is an additional pressure boundary
|
||||
condition to aid the transition from =pd= to =p= as it behaves similarly to
|
||||
specifying a uniform =pd= at an outlet for example.
|
||||
+ =activeBaffleVelocity= dynamically combines cyclic and wall patches so that
|
||||
the flow through the patch can be controlled /e.g./ by pressure drop.
|
||||
+ =rotatingWallVelocity= specifies a rotating velocity, given the rotational
|
||||
speed, origin and axis.
|
||||
|
||||
* Utilities
|
||||
|
||||
*** Improvements
|
||||
+ =blockMesh= has a *new* =-dict= option for specifying an alternative
|
||||
dictionary for the block mesh description. The '=convertToMeters=' entry
|
||||
is now optional, and the alternative '=scale=' entry can be used for
|
||||
less typing.
|
||||
+ =foamToEnsight= has a *new* =-noPatches= option to suppress generation
|
||||
of patches.
|
||||
+ =foamToEnsightParts= has *new* =-noMesh= and =-index= options that can
|
||||
be useful when post-processing results incrementally.
|
||||
+ =snappyHexMesh= has lower memory footprint. New distributed triangulated
|
||||
surface type for meshing surfaces with extremely large triangle count.
|
||||
Now supports multi-region meshing of arbitrarily complex regions.
|
||||
|
||||
*** *New* utilities
|
||||
+ =particleTracks= - generate particle tracks for lagrangian calculations.
|
||||
+ =dsmcInitialise= - preprocessing utility to create initial configurations
|
||||
of DSMC particles in a geometry.
|
||||
+ =surfaceRedistributePar= - preprocessing utility to create distributed
|
||||
triangulated surface.
|
||||
|
||||
*** *New* foamCalc functions
|
||||
+ =interpolate= performs fvc::interpolate(<field>).
|
||||
+ =randomise= randomises a <field> by a given perturbation.
|
||||
+ =addSubtract= provides simple add/subtract field functionality.
|
||||
|
||||
*** Usage
|
||||
+ =timeSelector= can now combine =-time ranges= and =-latestTime= options.
|
||||
For example, -time '0.01:0.09' -latestTime vs. -time '0.01:'.
|
||||
More reliable behaviour for cases missing /constant// or /0// directories.
|
||||
When the =-noZero= option is enabled, =-latestTime= will not select the
|
||||
=0/= directory unless the =-zeroTime= option is given.
|
||||
This helps avoid ill effects caused by accidentally using the
|
||||
/0// directory in certain utilities (eg, =reconstructPar=).
|
||||
+ =-region= option added to more utilities.
|
||||
|
||||
*** Improvements to Paraview reader module
|
||||
+ =PV3FoamReader= added mesh region handling. The region name is parsed
|
||||
from the filename. Eg, /case{region}.OpenFOAM/.
|
||||
+ =paraFoam= with a *new* =-region= option for specifying an alternative
|
||||
region. A *new* =-touch= option to generate the /.OpenFOAM/ file only.
|
||||
Only creates (and removes) /.OpenFOAM/ files if they didn't already
|
||||
exist, which is useful in connection with the =-touch= option.
|
||||
|
||||
* Post-processing
|
||||
+ Sampling on iso-surfaces, interpolated or non-interpolated.
|
||||
+ Sampling on surface defined by distance to surface (=distanceSurface=).
|
||||
+ Cutting planes for arbitrary meshes.
|
||||
+ Output to any surface geometry format supported by the =surfMesh= library.
|
||||
|
||||
*** Function objects
|
||||
|
||||
***** Improvements for function objects and time-looping
|
||||
+ The =functionObjectList= retains the order of the =functionObject=
|
||||
order, which allows a chaining of operations. It is thus internally more
|
||||
efficient when /system/controlDict/ uses =functions {..}= instead of
|
||||
=functions (..)=, but both forms are supported.
|
||||
+ The =functionObject= now has an additional =end()= method that is called
|
||||
when =Time::loop()= or =Time::run()= determine that the time-loop exits.
|
||||
Accordingly, one of these two idioms should be used in solver code:
|
||||
1. =while (runTime.loop() { ... }=,
|
||||
2. =while (runTime.run()) { runTime++; ... }=.
|
||||
+ *New* =functionObjectList= now tracks the SHA1 message digest of the
|
||||
sub-directories. This avoids reloading a =functionObject= when
|
||||
something unrelated in /system/controlDict/ changed.
|
||||
|
||||
***** *New* function objects:
|
||||
+ =systemCall= - executes a list of system instructions.
|
||||
+ =fieldMinMax= - computes the min/max of a <field>.
|
||||
+ =staticPressure= - converts kinematic pressure to static pressure.
|
||||
+ =dsmcFields= - calculates intensive fields (velocity and temperature)
|
||||
from averaged extensive fields (i.e. momentum and energy).
|
||||
|
||||
***** Usage
|
||||
+ Improved output control: =timeStep= or =outputTime=.
|
||||
|
||||
* Tutorial restructuring
|
||||
to reflect solver application structure.
|
||||
|
||||
* Third-party Software
|
||||
+ =gcc= upgraded to version 4.3.3.
|
||||
+ =OpenMPI= upgraded to version 1.3.3.
|
||||
+ =ParaView= upgraded to version 3.6.1.
|
||||
+ =Scotch= *new* decomposition method: \\
|
||||
Scotch (http://gforge.inria.fr/projects/scotch/) is a general multi-level
|
||||
decomposition method originating from the ScAlApplix project (Inria). It is
|
||||
a framework for general recursive partitioning methods and a such comparable
|
||||
to Metis but with a permissive licence.
|
||||
|
||||
The corresponding decomposition method (in =decomposeParDict=) is
|
||||
=scotch=. An optional =strategy= string can be supplied to change the
|
||||
decomposition methods; initial testing shows the default strategy producing
|
||||
decompositions comparable in quality to Metis.
|
||||
@ -1,5 +1,14 @@
|
||||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
|
||||
if [ "$PWD" != "$WM_PROJECT_DIR/applications" ]
|
||||
then
|
||||
echo "Error: Current directory in not \$WM_PROJECT_DIR/applications"
|
||||
echo " The environment variable are not consistent with the installation."
|
||||
echo " Check the OpenFOAM entries in your dot-files and source them."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
wmake all solvers
|
||||
|
||||
@ -26,8 +26,8 @@ Application
|
||||
PDRFoam
|
||||
|
||||
Description
|
||||
Compressible premixed/partially-premixed combustion solver with turbulence
|
||||
modelling.
|
||||
Solver for compressible premixed/partially-premixed combustion with
|
||||
turbulence modelling.
|
||||
|
||||
Combusting RANS code using the b-Xi two-equation model.
|
||||
Xi may be obtained by either the solution of the Xi transport
|
||||
|
||||
@ -25,10 +25,11 @@ License
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "PDRkEpsilon.H"
|
||||
#include "wallFvPatch.H"
|
||||
#include "PDRDragModel.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
#include "backwardsCompatibilityWallFunctions.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
@ -82,29 +83,29 @@ PDRkEpsilon::PDRkEpsilon
|
||||
1.92
|
||||
)
|
||||
),
|
||||
alphak_
|
||||
sigmak_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"alphak",
|
||||
"sigmak",
|
||||
coeffDict_,
|
||||
1.0
|
||||
)
|
||||
),
|
||||
alphaEps_
|
||||
sigmaEps_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"alphaEps",
|
||||
"sigmaEps",
|
||||
coeffDict_,
|
||||
0.76923
|
||||
1.3
|
||||
)
|
||||
),
|
||||
alphah_
|
||||
Prt_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"alphah",
|
||||
"Prt",
|
||||
coeffDict_,
|
||||
1.0
|
||||
)
|
||||
@ -147,9 +148,26 @@ PDRkEpsilon::PDRkEpsilon
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
Cmu_*rho_*sqr(k_)/(epsilon_ + epsilonSmall_)
|
||||
),
|
||||
|
||||
alphat_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"alphat",
|
||||
runTime_.timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
autoCreateAlphat("alphat", mesh_)
|
||||
)
|
||||
{
|
||||
# include "wallViscosityI.H"
|
||||
mut_ = Cmu_*rho_*sqr(k_)/(epsilon_ + epsilonSmall_);
|
||||
mut_.correctBoundaryConditions();
|
||||
|
||||
alphat_ = mut_/Prt_;
|
||||
alphat_.correctBoundaryConditions();
|
||||
|
||||
printCoeffs();
|
||||
}
|
||||
@ -214,9 +232,9 @@ bool PDRkEpsilon::read()
|
||||
Cmu_.readIfPresent(coeffDict_);
|
||||
C1_.readIfPresent(coeffDict_);
|
||||
C2_.readIfPresent(coeffDict_);
|
||||
alphak_.readIfPresent(coeffDict_);
|
||||
alphaEps_.readIfPresent(coeffDict_);
|
||||
alphah_.readIfPresent(coeffDict_);
|
||||
sigmak_.readIfPresent(coeffDict());
|
||||
sigmaEps_.readIfPresent(coeffDict());
|
||||
Prt_.readIfPresent(coeffDict());
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -233,7 +251,12 @@ void PDRkEpsilon::correct()
|
||||
{
|
||||
// Re-calculate viscosity
|
||||
mut_ = rho_*Cmu_*sqr(k_)/(epsilon_ + epsilonSmall_);
|
||||
# include "wallViscosityI.H"
|
||||
mut_.correctBoundaryConditions();
|
||||
|
||||
// Re-calculate thermal diffusivity
|
||||
alphat_ = mut_/Prt_;
|
||||
alphat_.correctBoundaryConditions();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -250,6 +273,9 @@ void PDRkEpsilon::correct()
|
||||
volScalarField G = 2*mut_*(tgradU() && dev(symm(tgradU())));
|
||||
tgradU.clear();
|
||||
|
||||
// Update espsilon and G at the wall
|
||||
epsilon_.boundaryField().updateCoeffs();
|
||||
|
||||
// Add the blockage generation term so that it is included consistently
|
||||
// in both the k and epsilon equations
|
||||
const volScalarField& betav = U_.db().lookupObject<volScalarField>("betav");
|
||||
@ -259,8 +285,6 @@ void PDRkEpsilon::correct()
|
||||
|
||||
volScalarField GR = drag.Gk();
|
||||
|
||||
# include "wallFunctionsI.H"
|
||||
|
||||
// Dissipation equation
|
||||
tmp<fvScalarMatrix> epsEqn
|
||||
(
|
||||
@ -273,10 +297,10 @@ void PDRkEpsilon::correct()
|
||||
- fvm::Sp(C2_*betav*rho_*epsilon_/k_, epsilon_)
|
||||
);
|
||||
|
||||
# include "wallDissipationI.H"
|
||||
|
||||
epsEqn().relax();
|
||||
|
||||
epsEqn().boundaryManipulate(epsilon_.boundaryField());
|
||||
|
||||
solve(epsEqn);
|
||||
bound(epsilon_, epsilon0_);
|
||||
|
||||
@ -298,12 +322,13 @@ void PDRkEpsilon::correct()
|
||||
solve(kEqn);
|
||||
bound(k_, k0_);
|
||||
|
||||
|
||||
// Re-calculate viscosity
|
||||
mut_ = rho_*Cmu_*sqr(k_)/epsilon_;
|
||||
mut_.correctBoundaryConditions();
|
||||
|
||||
# include "wallViscosityI.H"
|
||||
|
||||
// Re-calculate thermal diffusivity
|
||||
alphat_ = mut_/Prt_;
|
||||
alphat_.correctBoundaryConditions();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -29,6 +29,20 @@ Description
|
||||
Standard k-epsilon turbulence model with additional source terms
|
||||
corresponding to PDR basic drag model (\link basic.H \endlink)
|
||||
|
||||
The default model coefficients correspond to the following:
|
||||
@verbatim
|
||||
kEpsilonCoeffs
|
||||
{
|
||||
Cmu 0.09;
|
||||
C1 1.44;
|
||||
C2 1.92;
|
||||
C3 -0.33; // only for compressible
|
||||
sigmak 1.0; // only for compressible
|
||||
sigmaEps 1.3;
|
||||
Prt 1.0; // only for compressible
|
||||
}
|
||||
@endverbatim
|
||||
|
||||
The turbulence source term \f$ G_{R} \f$ appears in the
|
||||
\f$ \kappa-\epsilon \f$ equation for the generation of turbulence due to
|
||||
interaction with unresolved obstacles.
|
||||
@ -68,16 +82,21 @@ class PDRkEpsilon
|
||||
{
|
||||
// Private data
|
||||
|
||||
// Model coefficients
|
||||
|
||||
dimensionedScalar Cmu_;
|
||||
dimensionedScalar C1_;
|
||||
dimensionedScalar C2_;
|
||||
dimensionedScalar alphak_;
|
||||
dimensionedScalar alphaEps_;
|
||||
dimensionedScalar alphah_;
|
||||
dimensionedScalar sigmak_;
|
||||
dimensionedScalar sigmaEps_;
|
||||
dimensionedScalar Prt_;
|
||||
|
||||
// Fields
|
||||
|
||||
volScalarField k_;
|
||||
volScalarField epsilon_;
|
||||
volScalarField mut_;
|
||||
volScalarField alphat_;
|
||||
|
||||
|
||||
public:
|
||||
@ -85,6 +104,7 @@ public:
|
||||
//- Runtime type information
|
||||
TypeName("PDRkEpsilon");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
@ -97,7 +117,7 @@ public:
|
||||
);
|
||||
|
||||
|
||||
// Destructor
|
||||
//- Destructor
|
||||
virtual ~PDRkEpsilon()
|
||||
{}
|
||||
|
||||
@ -114,7 +134,7 @@ public:
|
||||
{
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField("DkEff", alphak_*mut_ + mu())
|
||||
new volScalarField("DkEff", mut_/sigmak_ + mu())
|
||||
);
|
||||
}
|
||||
|
||||
@ -123,7 +143,7 @@ public:
|
||||
{
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField("DepsilonEff", alphaEps_*mut_ + mu())
|
||||
new volScalarField("DepsilonEff", mut_/sigmaEps_ + mu())
|
||||
);
|
||||
}
|
||||
|
||||
@ -132,7 +152,7 @@ public:
|
||||
{
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField("alphaEff", alphah_*mut_ + alpha())
|
||||
new volScalarField("alphaEff", alphat_ + alpha())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
rho*g
|
||||
);
|
||||
|
||||
UEqn.relax();
|
||||
|
||||
if (momentumPredictor)
|
||||
{
|
||||
solve(UEqn == -fvc::grad(p));
|
||||
|
||||
@ -26,8 +26,8 @@ Application
|
||||
XiFoam
|
||||
|
||||
Description
|
||||
Compressible premixed/partially-premixed combustion solver with turbulence
|
||||
modelling.
|
||||
Solver for compressible premixed/partially-premixed combustion with
|
||||
turbulence modelling.
|
||||
|
||||
Combusting RANS code using the b-Xi two-equation model.
|
||||
Xi may be obtained by either the solution of the Xi transport
|
||||
@ -87,12 +87,12 @@ int main(int argc, char *argv[])
|
||||
runTime++;
|
||||
Info<< "Time = " << runTime.timeName() << nl << endl;
|
||||
|
||||
#include "rhoEqn.H"
|
||||
#include "UEqn.H"
|
||||
|
||||
// --- PISO loop
|
||||
for (int corr=1; corr<=nCorr; corr++)
|
||||
// --- Pressure-velocity PIMPLE corrector loop
|
||||
for (int oCorr=0; oCorr<nOuterCorr; oCorr++)
|
||||
{
|
||||
#include "rhoEqn.H"
|
||||
#include "UEqn.H"
|
||||
|
||||
#include "ftEqn.H"
|
||||
#include "bEqn.H"
|
||||
#include "huEqn.H"
|
||||
@ -103,10 +103,14 @@ int main(int argc, char *argv[])
|
||||
hu == h;
|
||||
}
|
||||
|
||||
#include "pEqn.H"
|
||||
}
|
||||
// --- PISO loop
|
||||
for (int corr=1; corr<=nCorr; corr++)
|
||||
{
|
||||
#include "pEqn.H"
|
||||
}
|
||||
|
||||
turbulence->correct();
|
||||
turbulence->correct();
|
||||
}
|
||||
|
||||
rho = thermo.rho();
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ if (ign.ignited())
|
||||
+ mvConvection->fvmDiv(phi, b)
|
||||
+ fvm::div(phiSt, b, "div(phiSt,b)")
|
||||
- fvm::Sp(fvc::div(phiSt), b)
|
||||
- fvm::laplacian(turbulence->muEff(), b)
|
||||
- fvm::laplacian(turbulence->alphaEff(), b)
|
||||
);
|
||||
|
||||
|
||||
@ -90,7 +90,7 @@ if (ign.ignited())
|
||||
// ~~~~~~~~~~~~~~~~~
|
||||
surfaceScalarField phiXi =
|
||||
phiSt
|
||||
- fvc::interpolate(fvc::laplacian(turbulence->muEff(), b)/mgb)*nf
|
||||
- fvc::interpolate(fvc::laplacian(turbulence->alphaEff(), b)/mgb)*nf
|
||||
+ fvc::interpolate(rho)*fvc::interpolate(Su*(1.0/Xi - Xi))*nf;
|
||||
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
tmp<fv::convectionScheme<scalar> > mvConvection
|
||||
(
|
||||
fv::convectionScheme<scalar>::New
|
||||
(
|
||||
(
|
||||
mesh,
|
||||
fields,
|
||||
phi,
|
||||
@ -17,6 +17,6 @@ if (composition.contains("ft"))
|
||||
(
|
||||
fvm::ddt(rho, ft)
|
||||
+ mvConvection->fvmDiv(phi, ft)
|
||||
- fvm::laplacian(turbulence->muEff(), ft)
|
||||
- fvm::laplacian(turbulence->alphaEff(), ft)
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
solve
|
||||
fvScalarMatrix hEqn
|
||||
(
|
||||
fvm::ddt(rho, h)
|
||||
+ mvConvection->fvmDiv(phi, h)
|
||||
@ -8,5 +8,8 @@
|
||||
DpDt
|
||||
);
|
||||
|
||||
hEqn.relax();
|
||||
hEqn.solve();
|
||||
|
||||
thermo.correct();
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
dieselFoam
|
||||
|
||||
Description
|
||||
Diesel engine spray and combustion code.
|
||||
Solver for diesel engine spray and combustion.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
dieselFoam
|
||||
|
||||
Description
|
||||
Diesel spray and combustion code.
|
||||
Solver for diesel spray and combustion.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
reactingFoam
|
||||
|
||||
Description
|
||||
Chemical reaction code.
|
||||
Solver for combustion with chemical reactions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,7 +26,8 @@ Application
|
||||
rhoReactingFoam
|
||||
|
||||
Description
|
||||
Chemical reaction code using density based thermodynamics package.
|
||||
Solver for combustion with chemical reactions using density based
|
||||
thermodynamics package.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -68,10 +69,10 @@ int main(int argc, char *argv[])
|
||||
|
||||
#include "chemistry.H"
|
||||
#include "rhoEqn.H"
|
||||
#include "UEqn.H"
|
||||
|
||||
for (label ocorr=1; ocorr <= nOuterCorr; ocorr++)
|
||||
{
|
||||
#include "UEqn.H"
|
||||
#include "YEqn.H"
|
||||
#include "hEqn.H"
|
||||
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
wclean libso BCs
|
||||
wclean
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
||||
|
||||
@ -7,7 +7,7 @@ autoPtr<basicPsiThermo> pThermo
|
||||
basicPsiThermo& thermo = pThermo();
|
||||
|
||||
volScalarField& p = thermo.p();
|
||||
volScalarField& h = thermo.h();
|
||||
volScalarField& e = thermo.e();
|
||||
const volScalarField& T = thermo.T();
|
||||
const volScalarField& psi = thermo.psi();
|
||||
const volScalarField& mu = thermo.mu();
|
||||
@ -70,7 +70,7 @@ volScalarField rhoE
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
rho*(h + 0.5*magSqr(U)) - p
|
||||
rho*(e + 0.5*magSqr(U))
|
||||
);
|
||||
|
||||
surfaceScalarField pos
|
||||
|
||||
@ -76,10 +76,10 @@ int main(int argc, char *argv[])
|
||||
surfaceScalarField rPsi_neg =
|
||||
fvc::interpolate(rPsi, neg, "reconstruct(T)");
|
||||
|
||||
surfaceScalarField h_pos =
|
||||
fvc::interpolate(h, pos, "reconstruct(T)");
|
||||
surfaceScalarField h_neg =
|
||||
fvc::interpolate(h, neg, "reconstruct(T)");
|
||||
surfaceScalarField e_pos =
|
||||
fvc::interpolate(e, pos, "reconstruct(T)");
|
||||
surfaceScalarField e_neg =
|
||||
fvc::interpolate(e, neg, "reconstruct(T)");
|
||||
|
||||
surfaceVectorField U_pos = rhoU_pos/rho_pos;
|
||||
surfaceVectorField U_neg = rhoU_neg/rho_neg;
|
||||
@ -132,8 +132,8 @@ int main(int argc, char *argv[])
|
||||
+ (a_pos*p_pos + a_neg*p_neg)*mesh.Sf();
|
||||
|
||||
surfaceScalarField phiEp =
|
||||
aphiv_pos*rho_pos*(h_pos + 0.5*magSqr(U_pos))
|
||||
+ aphiv_neg*rho_neg*(h_neg + 0.5*magSqr(U_neg))
|
||||
aphiv_pos*(rho_pos*(e_pos + 0.5*magSqr(U_pos)) + p_pos)
|
||||
+ aphiv_neg*(rho_neg*(e_neg + 0.5*magSqr(U_neg)) + p_neg)
|
||||
+ aSf*p_pos - aSf*p_neg;
|
||||
|
||||
volTensorField tauMC("tauMC", mu*dev2(fvc::grad(U)().T()));
|
||||
@ -156,7 +156,7 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
solve
|
||||
(
|
||||
fvm::ddt(rho, U) - fvc::ddt(rho,U)
|
||||
fvm::ddt(rho, U) - fvc::ddt(rho, U)
|
||||
- fvm::laplacian(mu, U)
|
||||
- fvc::div(tauMC)
|
||||
);
|
||||
@ -180,28 +180,27 @@ int main(int argc, char *argv[])
|
||||
- fvc::div(sigmaDotU)
|
||||
);
|
||||
|
||||
h = (rhoE + p)/rho - 0.5*magSqr(U);
|
||||
h.correctBoundaryConditions();
|
||||
e = rhoE/rho - 0.5*magSqr(U);
|
||||
e.correctBoundaryConditions();
|
||||
thermo.correct();
|
||||
rhoE.boundaryField() =
|
||||
rho.boundaryField()*
|
||||
(
|
||||
h.boundaryField() + 0.5*magSqr(U.boundaryField())
|
||||
)
|
||||
- p.boundaryField();
|
||||
e.boundaryField() + 0.5*magSqr(U.boundaryField())
|
||||
);
|
||||
|
||||
if (!inviscid)
|
||||
{
|
||||
volScalarField k("k", thermo.Cp()*mu/Pr);
|
||||
solve
|
||||
(
|
||||
fvm::ddt(rho, h) - fvc::ddt(rho, h)
|
||||
- fvm::laplacian(thermo.alpha(), h)
|
||||
+ fvc::laplacian(thermo.alpha(), h)
|
||||
fvm::ddt(rho, e) - fvc::ddt(rho, e)
|
||||
- fvm::laplacian(thermo.alpha(), e)
|
||||
+ fvc::laplacian(thermo.alpha(), e)
|
||||
- fvc::laplacian(k, T)
|
||||
);
|
||||
thermo.correct();
|
||||
rhoE = rho*(h + 0.5*magSqr(U)) - p;
|
||||
rhoE = rho*(e + 0.5*magSqr(U));
|
||||
}
|
||||
|
||||
p.dimensionedInternalField() =
|
||||
|
||||
@ -26,7 +26,8 @@ Application
|
||||
dsmcFoam
|
||||
|
||||
Description
|
||||
Direct Simulation Monte Carlo Solver for 3D, transient, multi-species flows
|
||||
Direct simulation Monte Carlo (DSMC) solver for 3D, transient, multi-
|
||||
species flows
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
mdEquilibrationFoam
|
||||
|
||||
Description
|
||||
Equilibrates and/or preconditions MD systems
|
||||
Equilibrates and/or preconditions molecular dynamics systems
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
mdFoam
|
||||
|
||||
Description
|
||||
molecular dynamics solver for fluid dynamics
|
||||
Molecular dynamics solver for fluid dynamics
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -26,9 +26,11 @@ Application
|
||||
buoyantPisoFoam
|
||||
|
||||
Description
|
||||
Transient Solver for buoyant, turbulent flow of compressible fluids for
|
||||
ventilation and heat-transfer. Turbulence is modelled using a run-time
|
||||
selectable compressible RAS or LES model.
|
||||
Transient solver for buoyant, turbulent flow of compressible fluids for
|
||||
ventilation and heat-transfer.
|
||||
|
||||
Turbulence is modelled using a run-time selectable compressible RAS or
|
||||
LES model.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -27,6 +27,7 @@ Application
|
||||
|
||||
Description
|
||||
Transient solver for inviscid shallow-water equations with rotation.
|
||||
|
||||
If the geometry is 3D then it is assumed to be one layers of cells and the
|
||||
component of the velocity normal to gravity is removed.
|
||||
|
||||
|
||||
@ -26,13 +26,17 @@ Application
|
||||
porousExplicitSourceReactingParcelFoam
|
||||
|
||||
Description
|
||||
Transient PISO solver for compressible, laminar or turbulent flow with
|
||||
reacting Lagrangian parcels for porous media, including explicit sources
|
||||
|
||||
The solver includes:
|
||||
- reacting parcel cloud
|
||||
- porous media
|
||||
- point mass sources
|
||||
- polynomial based, incompressible thermodynamics (f(T))
|
||||
|
||||
Note: ddtPhiCorr not used here when porous zones are active
|
||||
- not well defined for porous calcs
|
||||
- not well defined for porous calculations
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -23,11 +23,13 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
kinematicParcelFoam
|
||||
uncoupledKinematicParcelFoam
|
||||
|
||||
Description
|
||||
Transient solver for a single kinematicCloud. Uses pre-calculated velocity
|
||||
field to evolve a cloud.
|
||||
Transient solver for the passive transport of a single kinematic
|
||||
particle could.
|
||||
|
||||
Uses a pre- calculated velocity field to evolve the cloud.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -16,52 +16,93 @@
|
||||
RASProperties.lookup("turbulence")
|
||||
);
|
||||
|
||||
dictionary kEpsilonCoeffs
|
||||
dictionary kEpsilonDict
|
||||
(
|
||||
RASProperties.subDict("kEpsilonCoeffs")
|
||||
RASProperties.subDictPtr("kEpsilonCoeffs")
|
||||
);
|
||||
|
||||
|
||||
scalar Cmu
|
||||
dimensionedScalar Cmu
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("Cmu"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"Cmu",
|
||||
kEpsilonDict,
|
||||
0.09
|
||||
)
|
||||
);
|
||||
|
||||
scalar C1
|
||||
dimensionedScalar C1
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C1"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"C1",
|
||||
kEpsilonDict,
|
||||
1.44
|
||||
)
|
||||
);
|
||||
|
||||
scalar C2
|
||||
dimensionedScalar C2
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C2"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"C2",
|
||||
kEpsilonDict,
|
||||
1.92
|
||||
)
|
||||
);
|
||||
|
||||
scalar alphak
|
||||
dimensionedScalar alphak
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphak"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"alphaEps",
|
||||
kEpsilonDict,
|
||||
1.0
|
||||
)
|
||||
);
|
||||
|
||||
scalar alphaEps
|
||||
dimensionedScalar alphaEps
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphaEps"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"alphaEps",
|
||||
kEpsilonDict,
|
||||
0.76923
|
||||
)
|
||||
);
|
||||
|
||||
dictionary wallFunctionCoeffs
|
||||
dictionary wallFunctionDict
|
||||
(
|
||||
RASProperties.subDict("wallFunctionCoeffs")
|
||||
RASProperties.subDictPtr("wallFunctionCoeffs")
|
||||
);
|
||||
|
||||
scalar kappa
|
||||
dimensionedScalar kappa
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("kappa"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"kappa",
|
||||
wallFunctionDict,
|
||||
0.4187
|
||||
)
|
||||
);
|
||||
|
||||
scalar E
|
||||
dimensionedScalar E
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("E"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"E",
|
||||
wallFunctionDict,
|
||||
9.0
|
||||
)
|
||||
);
|
||||
|
||||
if (RASProperties.lookupOrDefault<Switch>("printCoeffs", false))
|
||||
{
|
||||
Info<< "kEpsilonCoeffs" << kEpsilonDict << nl
|
||||
<< "wallFunctionCoeffs" << wallFunctionDict << endl;
|
||||
}
|
||||
|
||||
|
||||
nearWallDist y(mesh);
|
||||
|
||||
|
||||
|
||||
@ -16,7 +16,11 @@ if(turbulence)
|
||||
(
|
||||
fvm::ddt(beta, epsilon)
|
||||
+ fvm::div(phib, epsilon)
|
||||
- fvm::laplacian(alphaEps*nuEffb, epsilon)
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphaEps*nuEffb, epsilon,
|
||||
"laplacian(DepsilonEff,epsilon)"
|
||||
)
|
||||
==
|
||||
C1*beta*G*epsilon/k
|
||||
- fvm::Sp(C2*beta*epsilon/k, epsilon)
|
||||
@ -35,7 +39,11 @@ if(turbulence)
|
||||
(
|
||||
fvm::ddt(beta, k)
|
||||
+ fvm::div(phib, k)
|
||||
- fvm::laplacian(alphak*nuEffb, k)
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphak*nuEffb, k,
|
||||
"laplacian(DkEff,k)"
|
||||
)
|
||||
==
|
||||
beta*G
|
||||
- fvm::Sp(beta*epsilon/k, k)
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
{
|
||||
labelList cellBoundaryFaceCount(epsilon.size(), 0);
|
||||
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
scalar Cmu75 = ::pow(Cmu, 0.75);
|
||||
scalar Cmu25 = ::pow(Cmu.value(), 0.25);
|
||||
scalar Cmu75 = ::pow(Cmu.value(), 0.75);
|
||||
scalar kappa_ = kappa.value();
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
@ -53,14 +54,14 @@
|
||||
|
||||
epsilon[faceCelli] +=
|
||||
Cmu75*::pow(k[faceCelli], 1.5)
|
||||
/(kappa*y[patchi][facei]);
|
||||
/(kappa_*y[patchi][facei]);
|
||||
|
||||
if (yPlus > 11.6)
|
||||
{
|
||||
G[faceCelli] +=
|
||||
nuw[facei]*magFaceGradU[facei]
|
||||
*Cmu25*::sqrt(k[faceCelli])
|
||||
/(kappa*y[patchi][facei]);
|
||||
/(kappa_*y[patchi][facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
{
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
scalar Cmu25 = ::pow(Cmu.value(), 0.25);
|
||||
scalar kappa_ = kappa.value();
|
||||
scalar E_ = E.value();
|
||||
scalar nub_ = nub.value();
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
@ -19,14 +22,14 @@
|
||||
scalar yPlus =
|
||||
Cmu25*y[patchi][facei]
|
||||
*::sqrt(k[faceCelli])
|
||||
/nub.value();
|
||||
/nub_;
|
||||
|
||||
if (yPlus > 11.6)
|
||||
{
|
||||
nutw[facei] =
|
||||
yPlus*nub.value()*kappa
|
||||
/::log(E*yPlus)
|
||||
- nub.value();
|
||||
yPlus*nub_*kappa_
|
||||
/::log(E_*yPlus)
|
||||
- nub_;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -27,11 +27,13 @@ Application
|
||||
|
||||
Description
|
||||
Solver for 2 compressible, isothermal immiscible fluids using a VOF
|
||||
(volume of fluid) phase-fraction based interface capturing approach.
|
||||
The momentum and other fluid properties are of the "mixture" and a single
|
||||
momentum equation is solved.
|
||||
(volume of fluid) phase-fraction based interface capturing approach,
|
||||
with optional mesh motion and mesh topology changes including adaptive
|
||||
re-meshing.
|
||||
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
The momentum and other fluid properties are of the "mixture" and a
|
||||
single momentum equation is solved. Turbulence modelling is generic,
|
||||
i.e. laminar, RAS or LES may be selected.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -28,10 +28,11 @@ Application
|
||||
Description
|
||||
Solver for 2 compressible, isothermal immiscible fluids using a VOF
|
||||
(volume of fluid) phase-fraction based interface capturing approach.
|
||||
|
||||
The momentum and other fluid properties are of the "mixture" and a single
|
||||
momentum equation is solved.
|
||||
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -28,10 +28,11 @@ Application
|
||||
Description
|
||||
Solver for 2 incompressible, isothermal immiscible fluids using a VOF
|
||||
(volume of fluid) phase-fraction based interface capturing approach.
|
||||
|
||||
The momentum and other fluid properties are of the "mixture" and a single
|
||||
momentum equation is solved.
|
||||
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
|
||||
For a two-fluid approach see twoPhaseEulerFoam.
|
||||
|
||||
|
||||
@ -28,8 +28,10 @@ Application
|
||||
Description
|
||||
Solver for 2 incompressible, isothermal immiscible fluids with phase-change
|
||||
(e.g. cavitation). Uses a VOF (volume of fluid) phase-fraction based
|
||||
interface capturing approach. The momentum and other fluid properties are
|
||||
of the "mixture" and a single momentum equation is solved.
|
||||
interface capturing approach.
|
||||
|
||||
The momentum and other fluid properties are of the "mixture" and a
|
||||
single momentum equation is solved.
|
||||
|
||||
The set of phase-change models provided are designed to simulate cavitation
|
||||
but other mechanisms of phase-change are supported within this solver
|
||||
|
||||
@ -27,7 +27,7 @@ Application
|
||||
|
||||
Description
|
||||
Solver for n incompressible fluids which captures the interfaces and
|
||||
includes surface-tension and contact-angle effects for each.
|
||||
includes surface-tension and contact-angle effects for each phase.
|
||||
|
||||
Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected.
|
||||
|
||||
|
||||
@ -228,57 +228,103 @@
|
||||
RASProperties.lookup("turbulence")
|
||||
);
|
||||
|
||||
const dictionary& kEpsilonCoeffs
|
||||
dictionary kEpsilonDict
|
||||
(
|
||||
RASProperties.subDict("kEpsilonCoeffs")
|
||||
RASProperties.subDictPtr("kEpsilonCoeffs")
|
||||
);
|
||||
|
||||
|
||||
scalar Cmu
|
||||
dimensionedScalar Cmu
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("Cmu"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"Cmu",
|
||||
kEpsilonDict,
|
||||
0.09
|
||||
)
|
||||
);
|
||||
|
||||
scalar C1
|
||||
dimensionedScalar C1
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C1"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"C1",
|
||||
kEpsilonDict,
|
||||
1.44
|
||||
)
|
||||
);
|
||||
|
||||
scalar C2
|
||||
dimensionedScalar C2
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C2"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"C2",
|
||||
kEpsilonDict,
|
||||
1.92
|
||||
)
|
||||
);
|
||||
|
||||
scalar C3
|
||||
dimensionedScalar C3
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C3"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"C3",
|
||||
kEpsilonDict,
|
||||
0.85
|
||||
)
|
||||
);
|
||||
|
||||
scalar alphak
|
||||
dimensionedScalar alphak
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphak"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"alphaEps",
|
||||
kEpsilonDict,
|
||||
1.0
|
||||
)
|
||||
);
|
||||
|
||||
scalar alphaEps
|
||||
dimensionedScalar alphaEps
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphaEps"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"alphaEps",
|
||||
kEpsilonDict,
|
||||
0.76923
|
||||
)
|
||||
);
|
||||
|
||||
const dictionary& wallFunctionCoeffs
|
||||
dictionary wallFunctionDict
|
||||
(
|
||||
RASProperties.subDict("wallFunctionCoeffs")
|
||||
RASProperties.subDictPtr("wallFunctionCoeffs")
|
||||
);
|
||||
|
||||
scalar kappa
|
||||
dimensionedScalar kappa
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("kappa"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"kappa",
|
||||
wallFunctionDict,
|
||||
0.4187
|
||||
)
|
||||
);
|
||||
|
||||
scalar E
|
||||
dimensionedScalar E
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("E"))
|
||||
dimensionedScalar::lookupOrAddToDict
|
||||
(
|
||||
"E",
|
||||
wallFunctionDict,
|
||||
9.0
|
||||
)
|
||||
);
|
||||
|
||||
if (RASProperties.lookupOrDefault<Switch>("printCoeffs", false))
|
||||
{
|
||||
Info<< "kEpsilonCoeffs" << kEpsilonDict << nl
|
||||
<< "wallFunctionCoeffs" << wallFunctionDict << endl;
|
||||
}
|
||||
|
||||
|
||||
nearWallDist y(mesh);
|
||||
|
||||
Info<< "Reading field k\n" << endl;
|
||||
|
||||
@ -26,7 +26,7 @@ if(turbulence)
|
||||
+ fvm::div(phi, epsilon)
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphaEps*mut + mul, epsilon,
|
||||
alphaEps*mut + mul, epsilon,
|
||||
"laplacian(DepsilonEff,epsilon)"
|
||||
)
|
||||
==
|
||||
@ -49,7 +49,11 @@ if(turbulence)
|
||||
(
|
||||
fvm::ddt(rho, k)
|
||||
+ fvm::div(phi, k)
|
||||
- fvm::laplacian(alphak*mut + mul, k, "laplacian(DkEff,k)")
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphak*mut + mul, k,
|
||||
"laplacian(DkEff,k)"
|
||||
)
|
||||
==
|
||||
G
|
||||
- fvm::SuSp(Gcoef + 2.0/3.0*rho*divU, k)
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
{
|
||||
labelList cellBoundaryFaceCount(epsilon.size(), 0);
|
||||
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
scalar Cmu75 = ::pow(Cmu, 0.75);
|
||||
scalar Cmu25 = ::pow(Cmu.value(), 0.25);
|
||||
scalar Cmu75 = ::pow(Cmu.value(), 0.75);
|
||||
scalar kappa_ = kappa.value();
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
@ -55,14 +56,14 @@
|
||||
|
||||
epsilon[faceCelli] +=
|
||||
Cmu75*rho[faceCelli]*::pow(k[faceCelli], 1.5)
|
||||
/(kappa*y[patchi][facei]);
|
||||
/(kappa_*y[patchi][facei]);
|
||||
|
||||
if (yPlus > 11.6)
|
||||
{
|
||||
G[faceCelli] +=
|
||||
mutw[facei]*magFaceGradU[facei]
|
||||
*Cmu25*::sqrt(k[faceCelli])
|
||||
/(kappa*y[patchi][facei]);
|
||||
/(kappa_*y[patchi][facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
{
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
scalar Cmu25 = ::pow(Cmu.value(), 0.25);
|
||||
scalar kappa_ = kappa.value();
|
||||
scalar E_ = E.value();
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
@ -26,7 +28,7 @@
|
||||
{
|
||||
mutw[facei] =
|
||||
muw[facei]
|
||||
*(yPlus*kappa/::log(E*yPlus) - 1);
|
||||
*(yPlus*kappa_/::log(E_*yPlus) - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -1,4 +1,10 @@
|
||||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
wclean libso phaseModel
|
||||
wclean libso interfacialModels
|
||||
wclean libso kineticTheoryModels
|
||||
wclean
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
EXE_INC = \
|
||||
-I../bubbleFoam \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/transportModels/incompressible/lnInclude \
|
||||
-IturbulenceModel \
|
||||
@ -6,7 +7,7 @@ EXE_INC = \
|
||||
-IinterfacialModels/lnInclude \
|
||||
-IphaseModel/lnInclude \
|
||||
-Iaveraging
|
||||
|
||||
|
||||
EXE_LIBS = \
|
||||
-lEulerianInterfacialModels \
|
||||
-lfiniteVolume \
|
||||
|
||||
@ -91,34 +91,6 @@
|
||||
alpha*Ua + beta*Ub
|
||||
);
|
||||
|
||||
Info<< "Reading field k\n" << endl;
|
||||
volScalarField k
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"k",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
Info<< "Reading field epsilon\n" << endl;
|
||||
volScalarField epsilon
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"epsilon",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
);
|
||||
|
||||
dimensionedScalar Cvm
|
||||
(
|
||||
transportProperties.lookup("Cvm")
|
||||
@ -156,114 +128,7 @@
|
||||
alpha*rhoa + beta*rhob
|
||||
);
|
||||
|
||||
IOdictionary RASProperties
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"RASProperties",
|
||||
runTime.constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
Switch turbulence
|
||||
(
|
||||
RASProperties.lookup("turbulence")
|
||||
);
|
||||
|
||||
dictionary kEpsilonCoeffs
|
||||
(
|
||||
RASProperties.subDict("kEpsilonCoeffs")
|
||||
);
|
||||
|
||||
|
||||
scalar Cmu
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("Cmu"))
|
||||
);
|
||||
|
||||
scalar C1
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C1"))
|
||||
);
|
||||
|
||||
scalar C2
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("C2"))
|
||||
);
|
||||
|
||||
scalar alphak
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphak"))
|
||||
);
|
||||
|
||||
scalar alphaEps
|
||||
(
|
||||
readScalar(kEpsilonCoeffs.lookup("alphaEps"))
|
||||
);
|
||||
|
||||
dictionary wallFunctionCoeffs
|
||||
(
|
||||
RASProperties.subDict("wallFunctionCoeffs")
|
||||
);
|
||||
|
||||
scalar kappa
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("kappa"))
|
||||
);
|
||||
|
||||
scalar E
|
||||
(
|
||||
readScalar(wallFunctionCoeffs.lookup("E"))
|
||||
);
|
||||
|
||||
nearWallDist y(mesh);
|
||||
|
||||
Info<< "Calculating field nutb\n" << endl;
|
||||
volScalarField nutb
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"nutb",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
Cmu*sqr(k)/epsilon
|
||||
);
|
||||
|
||||
Info<< "Calculating field nuEffa\n" << endl;
|
||||
volScalarField nuEffa
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"nuEffa",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
sqr(Ct)*nutb + nua
|
||||
);
|
||||
|
||||
Info<< "Calculating field nuEffb\n" << endl;
|
||||
volScalarField nuEffb
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"nuEffb",
|
||||
runTime.timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
nutb + nub
|
||||
);
|
||||
|
||||
#include "createRASTurbulence.H"
|
||||
|
||||
Info<< "Calculating field DDtUa and DDtUb\n" << endl;
|
||||
|
||||
|
||||
@ -1,61 +0,0 @@
|
||||
if(turbulence)
|
||||
{
|
||||
if (mesh.changing())
|
||||
{
|
||||
y.correct();
|
||||
}
|
||||
|
||||
tmp<volTensorField> tgradUb = fvc::grad(Ub);
|
||||
volScalarField G = 2*nutb*(tgradUb() && dev(symm(tgradUb())));
|
||||
tgradUb.clear();
|
||||
|
||||
# include "wallFunctions.H"
|
||||
|
||||
// Dissipation equation
|
||||
fvScalarMatrix epsEqn
|
||||
(
|
||||
fvm::ddt(beta, epsilon)
|
||||
+ fvm::div(phib, epsilon)
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphaEps*nuEffb,
|
||||
epsilon,
|
||||
"laplacian((alphaEps*nuEffb),epsilon)"
|
||||
)
|
||||
==
|
||||
C1*beta*G*epsilon/k
|
||||
- fvm::Sp(C2*beta*epsilon/k, epsilon)
|
||||
);
|
||||
|
||||
# include "wallDissipation.H"
|
||||
|
||||
epsEqn.relax();
|
||||
epsEqn.solve();
|
||||
|
||||
epsilon.max(dimensionedScalar("zero", epsilon.dimensions(), 1.0e-15));
|
||||
|
||||
|
||||
// Turbulent kinetic energy equation
|
||||
fvScalarMatrix kEqn
|
||||
(
|
||||
fvm::ddt(beta, k)
|
||||
+ fvm::div(phib, k)
|
||||
- fvm::laplacian(alphak*nuEffb, k, "laplacian((alphak*nuEffb),k)")
|
||||
==
|
||||
beta*G
|
||||
- fvm::Sp(beta*epsilon/k, k)
|
||||
);
|
||||
kEqn.relax();
|
||||
kEqn.solve();
|
||||
|
||||
k.max(dimensionedScalar("zero", k.dimensions(), 1.0e-8));
|
||||
|
||||
//- Re-calculate turbulence viscosity
|
||||
nutb = Cmu*sqr(k)/epsilon;
|
||||
|
||||
# include "wallViscosity.H"
|
||||
|
||||
}
|
||||
|
||||
nuEffa = sqr(Ct)*nutb + nua;
|
||||
nuEffb = nutb + nub;
|
||||
@ -1,51 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallDissipation
|
||||
|
||||
Description
|
||||
Set wall dissipation in the epsilon matrix
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& p = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(p))
|
||||
{
|
||||
epsEqn.setValues
|
||||
(
|
||||
p.faceCells(),
|
||||
epsilon.boundaryField()[patchi].patchInternalField()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,86 +0,0 @@
|
||||
{
|
||||
labelList cellBoundaryFaceCount(epsilon.size(), 0);
|
||||
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
scalar Cmu75 = ::pow(Cmu, 0.75);
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
//- Initialise the near-wall P field to zero
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& currPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(currPatch))
|
||||
{
|
||||
forAll(currPatch, facei)
|
||||
{
|
||||
label faceCelli = currPatch.faceCells()[facei];
|
||||
|
||||
epsilon[faceCelli] = 0.0;
|
||||
G[faceCelli] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- Accumulate the wall face contributions to epsilon and G
|
||||
// Increment cellBoundaryFaceCount for each face for averaging
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& currPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(currPatch))
|
||||
{
|
||||
const scalarField& nuw = nutb.boundaryField()[patchi];
|
||||
|
||||
scalarField magFaceGradU = mag(U.boundaryField()[patchi].snGrad());
|
||||
|
||||
forAll(currPatch, facei)
|
||||
{
|
||||
label faceCelli = currPatch.faceCells()[facei];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*y[patchi][facei]
|
||||
*::sqrt(k[faceCelli])
|
||||
/nub.value();
|
||||
|
||||
// For corner cells (with two boundary or more faces),
|
||||
// epsilon and G in the near-wall cell are calculated
|
||||
// as an average
|
||||
|
||||
cellBoundaryFaceCount[faceCelli]++;
|
||||
|
||||
epsilon[faceCelli] +=
|
||||
Cmu75*::pow(k[faceCelli], 1.5)
|
||||
/(kappa*y[patchi][facei]);
|
||||
|
||||
if (yPlus > 11.6)
|
||||
{
|
||||
G[faceCelli] +=
|
||||
nuw[facei]*magFaceGradU[facei]
|
||||
*Cmu25*::sqrt(k[faceCelli])
|
||||
/(kappa*y[patchi][facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// perform the averaging
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
epsilon[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
G[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
{
|
||||
scalar Cmu25 = ::pow(Cmu, 0.25);
|
||||
|
||||
const fvPatchList& patches = mesh.boundary();
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& currPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(currPatch))
|
||||
{
|
||||
scalarField& nutw = nutb.boundaryField()[patchi];
|
||||
|
||||
forAll(currPatch, facei)
|
||||
{
|
||||
label faceCelli = currPatch.faceCells()[facei];
|
||||
|
||||
// calculate yPlus
|
||||
scalar yPlus =
|
||||
Cmu25*y[patchi][facei]
|
||||
*::sqrt(k[faceCelli])
|
||||
/nub.value();
|
||||
|
||||
if (yPlus > 11.6)
|
||||
{
|
||||
nutw[facei] =
|
||||
yPlus*nub.value()*kappa
|
||||
/::log(E*yPlus)
|
||||
- nub.value();
|
||||
}
|
||||
else
|
||||
{
|
||||
nutw[facei] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
/*
|
||||
check for consistent behaviour with non-optimized code
|
||||
*/
|
||||
|
||||
EXE_INC = \
|
||||
-DFULLDEBUG -g -O0
|
||||
|
||||
|
||||
@ -28,320 +28,146 @@ Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "uLabel.H"
|
||||
#include "IOobject.H"
|
||||
#include "IOstreams.H"
|
||||
#include "IFstream.H"
|
||||
#include "PackedBoolList.H"
|
||||
#include <climits>
|
||||
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
template<unsigned nBits>
|
||||
inline void reportInfo()
|
||||
{
|
||||
unsigned offset = PackedList<nBits>::packing();
|
||||
|
||||
unsigned useSHL = ((1u << (nBits * offset)) - 1);
|
||||
unsigned useSHR = (~0u >> (sizeof(unsigned)*CHAR_BIT - nBits * offset));
|
||||
|
||||
Info<< nl
|
||||
<< "PackedList<" << nBits << ">" << nl
|
||||
<< " max_value: " << PackedList<nBits>::max_value() << nl
|
||||
<< " packing: " << PackedList<nBits>::packing() << nl
|
||||
<< " utilization: " << (nBits * offset) << nl;
|
||||
|
||||
Info<< " Masking:" << nl
|
||||
<< " shift << " << unsigned(nBits * offset) << nl
|
||||
<< " shift >> " << unsigned((sizeof(unsigned)*CHAR_BIT) - nBits * offset)
|
||||
<< nl;
|
||||
|
||||
hex(Info);
|
||||
Info<< " maskLower: " << PackedList<nBits>::maskLower(PackedList<nBits>::packing())
|
||||
<< nl
|
||||
<< " useSHL: " << useSHL << nl
|
||||
<< " useSHR: " << useSHR << nl;
|
||||
|
||||
if (useSHL != useSHR)
|
||||
{
|
||||
Info<< "WARNING: different results for SHL and SHR" << nl;
|
||||
}
|
||||
|
||||
Info<< nl;
|
||||
dec(Info);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "PackedList max_bits() = " << PackedList<>::max_bits() << nl;
|
||||
argList::noParallel();
|
||||
argList::validArgs.insert("file .. fileN");
|
||||
|
||||
Info<< "\ntest allocation with value\n";
|
||||
PackedList<3> list1(5,1);
|
||||
list1.print(Info);
|
||||
argList::validOptions.insert("mask", "");
|
||||
argList::validOptions.insert("count", "");
|
||||
argList::validOptions.insert("info", "");
|
||||
|
||||
Info<< "\ntest assign uniform value\n";
|
||||
list1 = 3;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign uniform value (with overflow)\n";
|
||||
list1 = -1;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest zero\n";
|
||||
list1 = 0;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest set() with default argument (max_value)\n";
|
||||
list1.set(3);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references\n";
|
||||
list1[2] = 3;
|
||||
list1[4] = list1[2];
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references, with chaining\n";
|
||||
list1[0] = list1[4] = 1;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references, with chaining and auto-vivify\n";
|
||||
list1[1] = list1[8] = list1[10] = list1[14] = 2;
|
||||
list1.print(Info);
|
||||
argList args(argc, argv, false, true);
|
||||
|
||||
|
||||
Info<< "\ntest operator== between references\n";
|
||||
if (list1[1] == list1[8])
|
||||
if (args.optionFound("mask"))
|
||||
{
|
||||
Info<< "[1] == [8] (expected)\n";
|
||||
Info<< "bit width: " << unsigned(sizeof(unsigned)*CHAR_BIT) << endl;
|
||||
reportInfo<1>();
|
||||
reportInfo<2>();
|
||||
reportInfo<3>();
|
||||
reportInfo<4>();
|
||||
reportInfo<5>();
|
||||
reportInfo<6>();
|
||||
reportInfo<7>();
|
||||
reportInfo<8>();
|
||||
reportInfo<9>();
|
||||
reportInfo<10>();
|
||||
reportInfo<11>();
|
||||
reportInfo<12>();
|
||||
reportInfo<13>();
|
||||
reportInfo<14>();
|
||||
reportInfo<15>();
|
||||
reportInfo<16>();
|
||||
reportInfo<17>();
|
||||
reportInfo<18>();
|
||||
reportInfo<19>();
|
||||
reportInfo<20>();
|
||||
reportInfo<21>();
|
||||
reportInfo<22>();
|
||||
reportInfo<23>();
|
||||
reportInfo<24>();
|
||||
reportInfo<25>();
|
||||
reportInfo<26>();
|
||||
reportInfo<27>();
|
||||
reportInfo<28>();
|
||||
reportInfo<29>();
|
||||
reportInfo<30>();
|
||||
reportInfo<31>();
|
||||
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
else if (args.additionalArgs().empty())
|
||||
{
|
||||
Info<< "[1] != [8] (unexpected)\n";
|
||||
}
|
||||
|
||||
if (list1[0] != list1[1])
|
||||
{
|
||||
Info<< "[0] != [1] (expected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[0] == [1] (unexpected)\n";
|
||||
}
|
||||
|
||||
Info<< "\ntest operator== with iterator\n";
|
||||
{
|
||||
PackedList<3>::iterator iter = list1[1];
|
||||
|
||||
if (iter != list1[8])
|
||||
{
|
||||
Info<< "iter != [8] (expected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "iter == [8] (unexpected)\n";
|
||||
}
|
||||
|
||||
if (*iter != list1[8])
|
||||
{
|
||||
Info<< "*iter != [8] (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "*iter == [8] (expected)\n";
|
||||
}
|
||||
args.printUsage();
|
||||
}
|
||||
|
||||
|
||||
forAll(args.additionalArgs(), argI)
|
||||
{
|
||||
const PackedList<3>& constLst = list1;
|
||||
Info<< "\ntest operator[] const with out-of-range index\n";
|
||||
constLst.print(Info);
|
||||
if (constLst[20])
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[20] is false (expected) list size should be unchanged (const)\n";
|
||||
}
|
||||
constLst.print(Info);
|
||||
const string& srcFile = args.additionalArgs()[argI];
|
||||
Info<< nl << "reading " << srcFile << nl;
|
||||
|
||||
Info<< "\ntest operator[] non-const with out-of-range index\n";
|
||||
if (list1[20])
|
||||
IFstream ifs(srcFile);
|
||||
List<label> rawLst(ifs);
|
||||
|
||||
PackedBoolList packLst(rawLst);
|
||||
|
||||
Info<< "size: " << packLst.size() << nl;
|
||||
|
||||
if (args.optionFound("count"))
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
unsigned int rawCount = 0;
|
||||
forAll(rawLst, elemI)
|
||||
{
|
||||
if (rawLst[elemI])
|
||||
{
|
||||
rawCount++;
|
||||
}
|
||||
}
|
||||
Info<< "raw count: " << rawCount << nl
|
||||
<< "packed count: " << packLst.count() << nl;
|
||||
}
|
||||
else
|
||||
|
||||
if (args.optionFound("info"))
|
||||
{
|
||||
Info<< "[20] is false (expected) but list was resized?? (non-const)\n";
|
||||
packLst.print(Info);
|
||||
}
|
||||
list1.print(Info);
|
||||
|
||||
Info<< nl;
|
||||
IOobject::writeDivider(Info);
|
||||
}
|
||||
|
||||
|
||||
Info<< "\ntest operator[] with out-of-range index\n";
|
||||
if (!list1[20])
|
||||
{
|
||||
Info<< "[20] is false, as expected\n";
|
||||
}
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize with value (without reallocation)\n";
|
||||
list1.resize(8, list1.max_value());
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest flip() function\n";
|
||||
list1.flip();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\nre-flip()\n";
|
||||
list1.flip();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest set() function\n";
|
||||
list1.set(1, 5);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign bool\n";
|
||||
list1 = false;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign bool\n";
|
||||
list1 = true;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize without value (with reallocation)\n";
|
||||
list1.resize(12);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize with value (with reallocation)\n";
|
||||
list1.resize(25, list1.max_value());
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize smaller (should not touch allocation)\n";
|
||||
list1.resize(8);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest append() operation\n";
|
||||
list1.append(2);
|
||||
list1.append(3);
|
||||
list1.append(4);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest reserve() operation\n";
|
||||
list1.reserve(32);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest shrink() operation\n";
|
||||
list1.shrink();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity() operation\n";
|
||||
list1.setCapacity(15);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity() operation\n";
|
||||
list1.setCapacity(100);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest operator[] assignment\n";
|
||||
list1[16] = 5;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest operator[] assignment with auto-vivify\n";
|
||||
list1[36] = list1.max_value();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity smaller\n";
|
||||
list1.setCapacity(24);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize much smaller\n";
|
||||
list1.resize(150);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest trim\n";
|
||||
list1.trim();
|
||||
list1.print(Info);
|
||||
|
||||
// add in some misc values
|
||||
list1[31] = 1;
|
||||
list1[32] = 2;
|
||||
list1[33] = 3;
|
||||
|
||||
Info<< "\ntest iterator\n";
|
||||
PackedList<3>::iterator iter = list1.begin();
|
||||
Info<< "begin():";
|
||||
iter.print(Info) << "\n";
|
||||
|
||||
Info<< "iterator:" << iter() << "\n";
|
||||
iter() = 5;
|
||||
iter.print(Info);
|
||||
list1.print(Info);
|
||||
|
||||
iter = list1[31];
|
||||
Info<< "iterator:" << iter() << "\n";
|
||||
iter.print(Info);
|
||||
|
||||
|
||||
Info<< "\ntest get() method\n";
|
||||
Info<< "get(10):" << list1.get(10) << " and list[10]:" << list1[10] << "\n";
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest iterator indexing\n";
|
||||
Info<< "cend() ";
|
||||
list1.cend().print(Info) << "\n";
|
||||
|
||||
{
|
||||
Info<< "\ntest assignment of iterator\n";
|
||||
list1.print(Info);
|
||||
Info<< "cend()\n";
|
||||
list1.end().print(Info);
|
||||
PackedList<3>::iterator cit = list1[100];
|
||||
Info<< "out-of-range: ";
|
||||
cit.print(Info);
|
||||
cit = list1[15];
|
||||
Info<< "in-range: ";
|
||||
cit.print(Info);
|
||||
Info<< "out-of-range: ";
|
||||
cit = list1[1000];
|
||||
cit.print(Info);
|
||||
}
|
||||
|
||||
|
||||
for
|
||||
(
|
||||
PackedList<3>::iterator cit = list1[30];
|
||||
cit != list1.end();
|
||||
++cit
|
||||
)
|
||||
{
|
||||
cit.print(Info);
|
||||
}
|
||||
|
||||
Info<< "\ntest operator[] auto-vivify\n";
|
||||
Info<< "size:" << list1.size() << "\n";
|
||||
|
||||
const unsigned int val = list1[45];
|
||||
|
||||
Info<< "list[45]:" << val << "\n";
|
||||
Info<< "size after read:" << list1.size() << "\n";
|
||||
|
||||
list1[45] = list1.max_value();
|
||||
Info<< "size after write:" << list1.size() << "\n";
|
||||
Info<< "list[45]:" << list1[45] << "\n";
|
||||
list1[49] = list1[100];
|
||||
list1.print(Info);
|
||||
|
||||
|
||||
Info<< "\ntest copy constructor + append\n";
|
||||
PackedList<3> list2(list1);
|
||||
list2.append(4);
|
||||
Info<< "source list:\n";
|
||||
list1.print(Info);
|
||||
Info<< "destination list:\n";
|
||||
list2.print(Info);
|
||||
|
||||
Info<< "\ntest pattern that fills all bits\n";
|
||||
PackedList<4> list3(8, 8);
|
||||
|
||||
label pos = list3.size() - 1;
|
||||
|
||||
list3[pos--] = list3.max_value();
|
||||
list3[pos--] = 0;
|
||||
list3[pos--] = list3.max_value();
|
||||
list3.print(Info);
|
||||
|
||||
Info<< "removed final value: " << list3.remove() << endl;
|
||||
list3.print(Info);
|
||||
|
||||
|
||||
List<bool> list4(4, true);
|
||||
{
|
||||
const List<bool>& constLst = list4;
|
||||
Info<< "\ntest operator[] const with out-of-range index\n";
|
||||
Info<< constLst << endl;
|
||||
if (constLst[20])
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[20] is false (expected) list size should be unchanged (const)\n";
|
||||
}
|
||||
Info<< constLst << endl;
|
||||
}
|
||||
|
||||
Info<< "\n\nDone.\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
3
applications/test/PackedList1/Make/files
Normal file
3
applications/test/PackedList1/Make/files
Normal file
@ -0,0 +1,3 @@
|
||||
PackedListTest1.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/PackedListTest1
|
||||
0
applications/test/PackedList1/Make/options
Normal file
0
applications/test/PackedList1/Make/options
Normal file
347
applications/test/PackedList1/PackedListTest1.C
Normal file
347
applications/test/PackedList1/PackedListTest1.C
Normal file
@ -0,0 +1,347 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
|
||||
Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "uLabel.H"
|
||||
#include "IOstreams.H"
|
||||
#include "PackedBoolList.H"
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Info<< "PackedList max_bits() = " << PackedList<>::max_bits() << nl;
|
||||
|
||||
Info<< "\ntest allocation with value\n";
|
||||
PackedList<3> list1(5,1);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign uniform value\n";
|
||||
list1 = 3;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign uniform value (with overflow)\n";
|
||||
list1 = -1;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest zero\n";
|
||||
list1 = 0;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest set() with default argument (max_value)\n";
|
||||
list1.set(3);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references\n";
|
||||
list1[2] = 3;
|
||||
list1[4] = list1[2];
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references, with chaining\n";
|
||||
list1[0] = list1[4] = 1;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign between references, with chaining and auto-vivify\n";
|
||||
list1[1] = list1[8] = list1[10] = list1[14] = 2;
|
||||
list1.print(Info);
|
||||
|
||||
|
||||
Info<< "\ntest operator== between references\n";
|
||||
if (list1[1] == list1[8])
|
||||
{
|
||||
Info<< "[1] == [8] (expected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[1] != [8] (unexpected)\n";
|
||||
}
|
||||
|
||||
if (list1[0] != list1[1])
|
||||
{
|
||||
Info<< "[0] != [1] (expected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[0] == [1] (unexpected)\n";
|
||||
}
|
||||
|
||||
Info<< "\ntest operator== with iterator\n";
|
||||
{
|
||||
PackedList<3>::iterator iter = list1[1];
|
||||
|
||||
if (iter != list1[8])
|
||||
{
|
||||
Info<< "iter != [8] (expected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "iter == [8] (unexpected)\n";
|
||||
}
|
||||
|
||||
if (*iter != list1[8])
|
||||
{
|
||||
Info<< "*iter != [8] (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "*iter == [8] (expected)\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
const PackedList<3>& constLst = list1;
|
||||
Info<< "\ntest operator[] const with out-of-range index\n";
|
||||
constLst.print(Info);
|
||||
if (constLst[20])
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[20] is false (expected) list size should be unchanged (const)\n";
|
||||
}
|
||||
constLst.print(Info);
|
||||
|
||||
Info<< "\ntest operator[] non-const with out-of-range index\n";
|
||||
if (list1[20])
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[20] is false (expected) but list was resized?? (non-const)\n";
|
||||
}
|
||||
list1.print(Info);
|
||||
}
|
||||
|
||||
|
||||
Info<< "\ntest operator[] with out-of-range index\n";
|
||||
if (!list1[20])
|
||||
{
|
||||
Info<< "[20] is false, as expected\n";
|
||||
}
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize with value (without reallocation)\n";
|
||||
list1.resize(8, list1.max_value());
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest flip() function\n";
|
||||
list1.flip();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\nre-flip()\n";
|
||||
list1.flip();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest set() function\n";
|
||||
list1.set(1, 5);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign bool\n";
|
||||
list1 = false;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest assign bool\n";
|
||||
list1 = true;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize without value (with reallocation)\n";
|
||||
list1.resize(12);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize with value (with reallocation)\n";
|
||||
list1.resize(25, list1.max_value());
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize smaller (should not touch allocation)\n";
|
||||
list1.resize(8);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest append() operation\n";
|
||||
list1.append(2);
|
||||
list1.append(3);
|
||||
list1.append(4);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest reserve() operation\n";
|
||||
list1.reserve(32);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest shrink() operation\n";
|
||||
list1.shrink();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity() operation\n";
|
||||
list1.setCapacity(15);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity() operation\n";
|
||||
list1.setCapacity(100);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest operator[] assignment\n";
|
||||
list1[16] = 5;
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest operator[] assignment with auto-vivify\n";
|
||||
list1[36] = list1.max_value();
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest setCapacity smaller\n";
|
||||
list1.setCapacity(24);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest resize much smaller\n";
|
||||
list1.resize(150);
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest trim\n";
|
||||
list1.trim();
|
||||
list1.print(Info);
|
||||
|
||||
// add in some misc values
|
||||
list1[31] = 1;
|
||||
list1[32] = 2;
|
||||
list1[33] = 3;
|
||||
|
||||
Info<< "\ntest iterator\n";
|
||||
PackedList<3>::iterator iter = list1.begin();
|
||||
Info<< "begin():";
|
||||
iter.print(Info) << "\n";
|
||||
|
||||
Info<< "iterator:" << iter() << "\n";
|
||||
iter() = 5;
|
||||
iter.print(Info);
|
||||
list1.print(Info);
|
||||
|
||||
iter = list1[31];
|
||||
Info<< "iterator:" << iter() << "\n";
|
||||
iter.print(Info);
|
||||
|
||||
|
||||
Info<< "\ntest get() method\n";
|
||||
Info<< "get(10):" << list1.get(10) << " and list[10]:" << list1[10] << "\n";
|
||||
list1.print(Info);
|
||||
|
||||
Info<< "\ntest iterator indexing\n";
|
||||
Info<< "cend() ";
|
||||
list1.cend().print(Info) << "\n";
|
||||
|
||||
{
|
||||
Info<< "\ntest assignment of iterator\n";
|
||||
list1.print(Info);
|
||||
Info<< "cend()\n";
|
||||
list1.end().print(Info);
|
||||
PackedList<3>::iterator cit = list1[100];
|
||||
Info<< "out-of-range: ";
|
||||
cit.print(Info);
|
||||
cit = list1[15];
|
||||
Info<< "in-range: ";
|
||||
cit.print(Info);
|
||||
Info<< "out-of-range: ";
|
||||
cit = list1[1000];
|
||||
cit.print(Info);
|
||||
}
|
||||
|
||||
|
||||
for
|
||||
(
|
||||
PackedList<3>::iterator cit = list1[30];
|
||||
cit != list1.end();
|
||||
++cit
|
||||
)
|
||||
{
|
||||
cit.print(Info);
|
||||
}
|
||||
|
||||
Info<< "\ntest operator[] auto-vivify\n";
|
||||
Info<< "size:" << list1.size() << "\n";
|
||||
|
||||
const unsigned int val = list1[45];
|
||||
|
||||
Info<< "list[45]:" << val << "\n";
|
||||
Info<< "size after read:" << list1.size() << "\n";
|
||||
|
||||
list1[45] = list1.max_value();
|
||||
Info<< "size after write:" << list1.size() << "\n";
|
||||
Info<< "list[45]:" << list1[45] << "\n";
|
||||
list1[49] = list1[100];
|
||||
list1.print(Info);
|
||||
|
||||
|
||||
Info<< "\ntest copy constructor + append\n";
|
||||
PackedList<3> list2(list1);
|
||||
list2.append(4);
|
||||
Info<< "source list:\n";
|
||||
list1.print(Info);
|
||||
Info<< "destination list:\n";
|
||||
list2.print(Info);
|
||||
|
||||
Info<< "\ntest pattern that fills all bits\n";
|
||||
PackedList<4> list3(8, 8);
|
||||
|
||||
label pos = list3.size() - 1;
|
||||
|
||||
list3[pos--] = list3.max_value();
|
||||
list3[pos--] = 0;
|
||||
list3[pos--] = list3.max_value();
|
||||
list3.print(Info);
|
||||
|
||||
Info<< "removed final value: " << list3.remove() << endl;
|
||||
list3.print(Info);
|
||||
|
||||
|
||||
List<bool> list4(4, true);
|
||||
{
|
||||
const List<bool>& constLst = list4;
|
||||
Info<< "\ntest operator[] const with out-of-range index\n";
|
||||
Info<< constLst << endl;
|
||||
if (constLst[20])
|
||||
{
|
||||
Info<< "[20] is true (unexpected)\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "[20] is false (expected) list size should be unchanged (const)\n";
|
||||
}
|
||||
Info<< constLst << endl;
|
||||
}
|
||||
|
||||
Info<< "\n\nDone.\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -29,6 +29,7 @@ Description
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "IOstreams.H"
|
||||
#include "IOobject.H"
|
||||
#include "IFstream.H"
|
||||
@ -41,6 +42,15 @@ using namespace Foam;
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
argList::noParallel();
|
||||
argList args(argc, argv);
|
||||
|
||||
Info<< nl
|
||||
<< "FOAM_CASE=" << getEnv("FOAM_CASE") << nl
|
||||
<< "FOAM_CASENAME=" << getEnv("FOAM_CASENAME") << nl
|
||||
<< endl;
|
||||
|
||||
|
||||
{
|
||||
dictionary dict1(IFstream("testDict")());
|
||||
Info<< "dict1: " << dict1 << nl
|
||||
|
||||
@ -14,6 +14,9 @@ FoamFile
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
#inputMode merge
|
||||
#includeIfPresent "someUnknownFile"
|
||||
#includeIfPresent "$FOAM_CASE/someUnknownFile"
|
||||
#includeIfPresent "$FOAM_CASE/someUnknownFile-$FOAM_CASENAME"
|
||||
|
||||
internalField uniform 1;
|
||||
|
||||
|
||||
3
applications/test/fileNameClean/Make/files
Normal file
3
applications/test/fileNameClean/Make/files
Normal file
@ -0,0 +1,3 @@
|
||||
fileNameCleanTest.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/fileNameCleanTest
|
||||
0
applications/test/fileNameClean/Make/options
Normal file
0
applications/test/fileNameClean/Make/options
Normal file
104
applications/test/fileNameClean/fileNameCleanTest.C
Normal file
104
applications/test/fileNameClean/fileNameCleanTest.C
Normal file
@ -0,0 +1,104 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM; if not, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Application
|
||||
fileNameCleanTest
|
||||
|
||||
Description
|
||||
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "argList.H"
|
||||
#include "fileName.H"
|
||||
#include "SubList.H"
|
||||
#include "IOobject.H"
|
||||
#include "IOstreams.H"
|
||||
#include "OSspecific.H"
|
||||
|
||||
|
||||
using namespace Foam;
|
||||
|
||||
void printCleaning(fileName& pathName)
|
||||
{
|
||||
Info<< "fileName = " << pathName << nl
|
||||
<< " path() = " << pathName.path() << nl
|
||||
<< " name() = " << pathName.name() << nl
|
||||
<< " joined = " << pathName.path()/pathName.name() << nl << nl;
|
||||
|
||||
pathName.clean();
|
||||
|
||||
Info<< "cleaned = " << pathName << nl
|
||||
<< " path() = " << pathName.path() << nl
|
||||
<< " name() = " << pathName.name() << nl
|
||||
<< " joined = " << pathName.path()/pathName.name() << nl << nl;
|
||||
|
||||
IOobject::writeDivider(Info);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
argList::noBanner();
|
||||
argList::noParallel();
|
||||
argList::validArgs.insert("fileName .. fileNameN");
|
||||
|
||||
argList args(argc, argv, false, true);
|
||||
|
||||
if (args.additionalArgs().empty())
|
||||
{
|
||||
args.printUsage();
|
||||
}
|
||||
|
||||
if (args.optionFound("case"))
|
||||
{
|
||||
fileName pathName = args.option("case");
|
||||
Info<< nl
|
||||
<< "-case" << nl
|
||||
<< "path = " << args.path() << nl
|
||||
<< "root = " << args.rootPath() << nl
|
||||
<< "case = " << args.caseName() << nl
|
||||
<< "FOAM_CASE=" << getEnv("FOAM_CASE") << nl
|
||||
<< "FOAM_CASENAME=" << getEnv("FOAM_CASENAME") << nl
|
||||
<< endl;
|
||||
|
||||
printCleaning(pathName);
|
||||
}
|
||||
|
||||
forAll(args.additionalArgs(), argI)
|
||||
{
|
||||
fileName pathName = args.additionalArgs()[argI];
|
||||
printCleaning(pathName);
|
||||
}
|
||||
|
||||
Info<< "\nEnd" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -27,6 +27,7 @@ Application
|
||||
|
||||
Description
|
||||
Print the OpenFOAM version strings.
|
||||
|
||||
Simultaneously the smallest possible program to use a minimal bit of
|
||||
the OpenFOAM library
|
||||
|
||||
@ -37,9 +38,9 @@ Description
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cerr
|
||||
<< "build " << Foam::FOAMbuild << "\n"
|
||||
<< "version " << Foam::FOAMversion << "\n";
|
||||
std::cout
|
||||
<< "version " << Foam::FOAMversion << "\n"
|
||||
<< "build " << Foam::FOAMbuild << "\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
3
applications/test/mvBak/Make/files
Normal file
3
applications/test/mvBak/Make/files
Normal file
@ -0,0 +1,3 @@
|
||||
mvBakTest.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/mvBakTest
|
||||
2
applications/test/mvBak/Make/options
Normal file
2
applications/test/mvBak/Make/options
Normal file
@ -0,0 +1,2 @@
|
||||
/* EXE_INC = -I$(LIB_SRC)/cfdTools/include */
|
||||
/* EXE_LIBS = -lfiniteVolume */
|
||||
@ -23,46 +23,59 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Write primitive and binary block from OPstream using pvm.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "error.H"
|
||||
#include "OSspecific.H"
|
||||
#include "argList.H"
|
||||
|
||||
#include "OPstream.H"
|
||||
|
||||
#include <pvm3.h>
|
||||
using namespace Foam;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
// Main program:
|
||||
|
||||
namespace Foam
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
argList::noBanner();
|
||||
argList::noParallel();
|
||||
argList::validArgs.insert("file .. fileN");
|
||||
argList::validOptions.erase("case");
|
||||
argList::validOptions.insert("ext", "bak");
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
argList args(argc, argv, false, true);
|
||||
|
||||
OPstream::~OPstream()
|
||||
{
|
||||
if
|
||||
(
|
||||
pvm_psend
|
||||
(
|
||||
procID(toProcNo_),
|
||||
msgType(),
|
||||
buf_.begin(),
|
||||
bufPosition_,
|
||||
PVM_BYTE
|
||||
) != PvmOk
|
||||
)
|
||||
if (args.additionalArgs().empty())
|
||||
{
|
||||
FatalErrorIn("OPstream::~OPstream()")
|
||||
<< "pvm_psend cannot send outgoing message"
|
||||
<< ::abort;
|
||||
args.printUsage();
|
||||
}
|
||||
|
||||
label ok = 0;
|
||||
|
||||
forAll(args.additionalArgs(), argI)
|
||||
{
|
||||
const string& srcFile = args.additionalArgs()[argI];
|
||||
|
||||
if (args.optionFound("ext"))
|
||||
{
|
||||
if (mvBak(srcFile, args.option("ext")))
|
||||
{
|
||||
ok++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mvBak(srcFile))
|
||||
{
|
||||
ok++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Info<< "mvBak called for " << args.additionalArgs().size()
|
||||
<< " files (moved " << ok << ")\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -23,7 +23,7 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Hex 2x2x2 refiner
|
||||
Refines a hex mesh by 2x2x2 cell splitting.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -23,9 +23,10 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Utility to refine cells next to patches. Takes a patchName
|
||||
and number of layers to refine. Works out cells within these layers
|
||||
and refines those in the wall-normal direction.
|
||||
Utility to refine cells next to patches.
|
||||
|
||||
Takes a patchName and number of layers to refine. Works out cells within
|
||||
these layers and refines those in the wall-normal direction.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -23,10 +23,11 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Utility to split cells with flat faces. Uses a geometric cut with a plane
|
||||
dividing the edge angle into two so might produce funny cells. For hexes
|
||||
it will use by default a cut from edge onto opposite edge (i.e. purely
|
||||
topological).
|
||||
Utility to split cells with flat faces.
|
||||
|
||||
Uses a geometric cut with a plane dividing the edge angle into two so
|
||||
might produce funny cells. For hexes it will use by default a cut from
|
||||
edge onto opposite edge (i.e. purely topological).
|
||||
|
||||
Options:
|
||||
- split cells from cellSet only
|
||||
|
||||
@ -5,9 +5,8 @@
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
|
||||
# build libccmio and create lnInclude directory
|
||||
( cd $WM_THIRD_PARTY_DIR && ./AllwmakeLibccmio )
|
||||
$WM_THIRD_PARTY_DIR/AllwmakeLibccmio
|
||||
|
||||
# if the library built properly, the headers should exist too
|
||||
if [ -e $FOAM_LIBBIN/libccmio.so ]
|
||||
|
||||
@ -47,6 +47,7 @@ Description
|
||||
#include "cyclicPolyPatch.H"
|
||||
#include "Swap.H"
|
||||
#include "IFstream.H"
|
||||
#include "readHexLabel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -92,6 +93,9 @@ DynamicList<label> cellGroupStartIndex;
|
||||
DynamicList<label> cellGroupEndIndex;
|
||||
DynamicList<label> cellGroupType;
|
||||
|
||||
// Special parsing of (incorrect) Cubit files
|
||||
bool cubitFile = false;
|
||||
|
||||
|
||||
void uniquify(word& name, HashSet<word>& patchNames)
|
||||
{
|
||||
@ -622,11 +626,20 @@ endOfSection {space}")"{space}
|
||||
BEGIN(readZoneGroupData);
|
||||
}
|
||||
|
||||
<readZoneGroupData>{space}{label}{space}{word}{space}{word}{space}{label}? {
|
||||
<readZoneGroupData>{space}{hexLabel}{space}{word}{space}{word}{space}{label}? {
|
||||
IStringStream zoneDataStream(YYText());
|
||||
|
||||
// cell zone-ID not in hexadecimal!!! Inconsistency
|
||||
label zoneID(readLabel(zoneDataStream));
|
||||
label zoneID = -1;
|
||||
|
||||
if (cubitFile)
|
||||
{
|
||||
zoneID = readHexLabel(zoneDataStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
zoneID = readLabel(zoneDataStream);
|
||||
}
|
||||
|
||||
groupType.insert(zoneID, word(zoneDataStream));
|
||||
groupName.insert(zoneID, word(zoneDataStream));
|
||||
@ -752,6 +765,7 @@ int main(int argc, char *argv[])
|
||||
argList::validOptions.insert("scale", "scale factor");
|
||||
argList::validOptions.insert("ignoreCellGroups", "cell group names");
|
||||
argList::validOptions.insert("ignoreFaceGroups", "face group names");
|
||||
argList::validOptions.insert("cubit", "");
|
||||
|
||||
argList args(argc, argv);
|
||||
|
||||
@ -774,6 +788,17 @@ int main(int argc, char *argv[])
|
||||
args.optionLookup("ignoreFaceGroups")() >> ignoreFaceGroups;
|
||||
}
|
||||
|
||||
cubitFile = args.options().found("cubit");
|
||||
|
||||
if (cubitFile)
|
||||
{
|
||||
Info<< nl
|
||||
<< "Assuming Cubit generated file"
|
||||
<< " (incorrect face orientation; hexadecimal zoneIDs)."
|
||||
<< nl << endl;
|
||||
}
|
||||
|
||||
|
||||
# include "createTime.H"
|
||||
|
||||
fileName fluentFile(args.additionalArgs()[0]);
|
||||
@ -827,7 +852,10 @@ int main(int argc, char *argv[])
|
||||
)
|
||||
{
|
||||
fm[facei] = true;
|
||||
faces[facei] = faces[facei].reverseFace();
|
||||
if (!cubitFile)
|
||||
{
|
||||
faces[facei] = faces[facei].reverseFace();
|
||||
}
|
||||
Swap(owner[facei], neighbour[facei]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Reads .msh format generated by the Adventure system.
|
||||
Converts .msh file generated by the Adventure system.
|
||||
|
||||
Note: the .msh format does not contain any boundary information. It is
|
||||
purely a description of the internal mesh.
|
||||
|
||||
@ -23,7 +23,7 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
read Neutral file format as written by Netgen4.4.
|
||||
Converts neutral file format as written by Netgen v4.4.
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
@ -23,8 +23,8 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Calculate the dual of a polyMesh. Adheres to all the feature&patch edges.
|
||||
|
||||
Calculate the dual of a polyMesh. Adheres to all the feature and patch
|
||||
edges.
|
||||
|
||||
Usage
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@ int main(int argc, char *argv[])
|
||||
scaleFactor = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (args.optionFound("solids"))
|
||||
{
|
||||
meshReaders::STARCD::keepSolids = true;
|
||||
|
||||
@ -23,7 +23,7 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Reads .ele and .node and .face files as written by tetgen.
|
||||
Converts .ele and .node and .face files, written by tetgen.
|
||||
|
||||
Make sure to use add boundary attributes to the smesh file
|
||||
(5 fifth column in the element section)
|
||||
|
||||
@ -100,7 +100,7 @@ void blockDescriptor::setEdge(label edgeI, label start, label end, label dim)
|
||||
scalar gExp = calcGexp(expand_[edgeI], dim);
|
||||
|
||||
// divide the line
|
||||
lineDivide divEdge(curvedEdges_[nCEI], dim, 1.0/gExp);
|
||||
lineDivide divEdge(curvedEdges_[nCEI], dim, 1.0/(gExp+SMALL));
|
||||
|
||||
pointField p = divEdge.points();
|
||||
scalarList d = divEdge.lambdaDivisions();
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
#!/bin/sh
|
||||
cd ${0%/*} || exit 1 # run from this directory
|
||||
set -x
|
||||
|
||||
wclean libso extrudeModel
|
||||
wclean
|
||||
|
||||
# ----------------------------------------------------------------- end-of-file
|
||||
|
||||
@ -24,8 +24,8 @@ License
|
||||
|
||||
Description
|
||||
Extrude mesh from existing patch (by default outwards facing normals;
|
||||
optional flips faces)
|
||||
or from patch read from file.
|
||||
optional flips faces) or from patch read from file.
|
||||
|
||||
Note: Merges close points so be careful.
|
||||
|
||||
Type of extrusion prescribed by run-time selectable model.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -23,11 +23,11 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Makes internal faces into boundary faces. Does not duplicate points. Use
|
||||
mergeOrSplitBaffles if you want this.
|
||||
Makes internal faces into boundary faces. Does not duplicate points, unlike
|
||||
mergeOrSplitBaffles.
|
||||
|
||||
Note: if any coupled patch face is selected for baffling automatically
|
||||
the opposite member is selected for baffling as well. Note that this
|
||||
Note: if any coupled patch face is selected for baffling the opposite
|
||||
member has to be selected for baffling as well. Note that this
|
||||
is the same as repatching. This was added only for convenience so
|
||||
you don't have to filter coupled boundary out of your set.
|
||||
|
||||
@ -128,6 +128,7 @@ int main(int argc, char *argv[])
|
||||
argList::validArgs.append("faceZone");
|
||||
argList::validArgs.append("patch");
|
||||
argList::validOptions.insert("additionalPatches", "(patch2 .. patchN)");
|
||||
argList::validOptions.insert("internalFacesOnly", "");
|
||||
argList::validOptions.insert("overwrite", "");
|
||||
|
||||
# include "setRootCase.H"
|
||||
@ -183,6 +184,12 @@ int main(int argc, char *argv[])
|
||||
|
||||
bool overwrite = args.optionFound("overwrite");
|
||||
|
||||
bool internalFacesOnly = args.optionFound("internalFacesOnly");
|
||||
|
||||
if (internalFacesOnly)
|
||||
{
|
||||
Info<< "Not converting faces on non-coupled patches." << nl << endl;
|
||||
}
|
||||
|
||||
|
||||
// Read objects in time directory
|
||||
@ -234,7 +241,21 @@ int main(int argc, char *argv[])
|
||||
// guarantees that when e.g. creating a cyclic all faces from one
|
||||
// side come first and faces from the other side next.
|
||||
|
||||
// Whether first use of face (modify) or consecutive (add)
|
||||
PackedBoolList modifiedFace(mesh.nFaces());
|
||||
// Never modify coupled faces
|
||||
forAll(patches, patchI)
|
||||
{
|
||||
const polyPatch& pp = patches[patchI];
|
||||
if (pp.coupled())
|
||||
{
|
||||
forAll(pp, i)
|
||||
{
|
||||
modifiedFace[pp.start()+i] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
label nModified = 0;
|
||||
|
||||
forAll(newPatches, i)
|
||||
{
|
||||
@ -281,6 +302,8 @@ int main(int argc, char *argv[])
|
||||
modifiedFace // modify or add status
|
||||
);
|
||||
}
|
||||
|
||||
nModified++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -333,16 +356,27 @@ int main(int argc, char *argv[])
|
||||
// Modify any boundary faces
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
// Normal boundary:
|
||||
// - move to new patch. Might already be back-to-back baffle
|
||||
// you want to add cyclic to. Do warn though.
|
||||
//
|
||||
// Processor boundary:
|
||||
// - do not move to cyclic
|
||||
// - add normal patches though.
|
||||
|
||||
// For warning once per patch.
|
||||
labelHashSet patchWarned;
|
||||
|
||||
forAll(patches, patchI)
|
||||
{
|
||||
const polyPatch& pp = patches[patchI];
|
||||
|
||||
if (patches[newPatchI].coupled() && pp.coupled())
|
||||
if (pp.coupled() && patches[newPatchI].coupled())
|
||||
{
|
||||
// Do not allow coupled faces to be moved to different coupled
|
||||
// patches.
|
||||
}
|
||||
else
|
||||
else if (pp.coupled() || !internalFacesOnly)
|
||||
{
|
||||
forAll(pp, i)
|
||||
{
|
||||
@ -352,6 +386,19 @@ int main(int argc, char *argv[])
|
||||
|
||||
if (zoneFaceI != -1)
|
||||
{
|
||||
if (patchWarned.insert(patchI))
|
||||
{
|
||||
WarningIn(args.executable())
|
||||
<< "Found boundary face (in patch " << pp.name()
|
||||
<< ") in faceZone " << fZone.name()
|
||||
<< " to convert to baffle patch "
|
||||
<< patches[newPatchI].name()
|
||||
<< endl
|
||||
<< " Run with -internalFacesOnly option"
|
||||
<< " if you don't wish to convert"
|
||||
<< " boundary faces." << endl;
|
||||
}
|
||||
|
||||
modifyOrAddFace
|
||||
(
|
||||
meshMod,
|
||||
@ -364,6 +411,7 @@ int main(int argc, char *argv[])
|
||||
fZone.flipMap()[zoneFaceI], // face flip in zone
|
||||
modifiedFace // modify or add status
|
||||
);
|
||||
nModified++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -371,7 +419,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
|
||||
Info<< "Converted " << returnReduce(modifiedFace.count(), sumOp<label>())
|
||||
Info<< "Converted " << returnReduce(nModified, sumOp<label>())
|
||||
<< " faces into boundary faces on patch " << patchName << nl << endl;
|
||||
|
||||
if (!overwrite)
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
flattenMesh
|
||||
|
||||
Description
|
||||
Flatten the front and back planes of a 2D cartesian mesh.
|
||||
Flattens the front and back planes of a 2D cartesian mesh.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -90,7 +90,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
twoDCorr.correctPoints(points);
|
||||
twoDCorr.correctPoints(points);
|
||||
|
||||
// Set the precision of the points data to 10
|
||||
IOstream::defaultPrecision(10);
|
||||
|
||||
@ -23,7 +23,7 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Pick up cells with cell centre 'inside' of surface. Requires surface
|
||||
Picks up cells with cell centre 'inside' of surface. Requires surface
|
||||
to be closed and singly connected.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -26,7 +26,7 @@ Application
|
||||
mergeOrSplitBaffles
|
||||
|
||||
Description
|
||||
Detect faces that share points (baffles). Either merge them or
|
||||
Detects faces that share points (baffles). Either merge them or
|
||||
duplicate the points.
|
||||
|
||||
Notes:
|
||||
|
||||
@ -23,7 +23,6 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
|
||||
Mirrors a mesh around a given plane.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -23,9 +23,10 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Utility to refine cells in multiple directions. Either supply -all
|
||||
option to refine all cells (3D refinement for 3D cases; 2D for 2D cases)
|
||||
or reads a refineMeshDict with
|
||||
Utility to refine cells in multiple directions.
|
||||
|
||||
Either supply -all option to refine all cells (3D refinement for 3D
|
||||
cases; 2D for 2D cases) or reads a refineMeshDict with
|
||||
- cellSet to refine
|
||||
- directions to refine
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -31,12 +31,11 @@ Description
|
||||
#include "Time.H"
|
||||
#include "polyMesh.H"
|
||||
#include "globalMeshData.H"
|
||||
#include "topoSetSource.H"
|
||||
#include "topoSet.H"
|
||||
#include "IStringStream.H"
|
||||
#include "topoSet.H"
|
||||
#include "cellSet.H"
|
||||
#include "faceSet.H"
|
||||
#include "pointSet.H"
|
||||
#include "topoSetSource.H"
|
||||
#include "OFstream.H"
|
||||
#include "IFstream.H"
|
||||
#include "demandDrivenData.H"
|
||||
|
||||
@ -23,8 +23,10 @@ License
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Description
|
||||
Splits mesh into multiple regions. Each region is defined as a domain
|
||||
whose cells can all be reached by cell-face-cell walking without crossing
|
||||
Splits mesh into multiple regions.
|
||||
|
||||
Each region is defined as a domain whose cells can all be reached by
|
||||
cell-face-cell walking without crossing
|
||||
- boundary faces
|
||||
- additional faces from faceset (-blockedFaces faceSet).
|
||||
- any face inbetween differing cellZones (-cellZones)
|
||||
|
||||
@ -27,7 +27,10 @@ Application
|
||||
|
||||
Description
|
||||
Transforms the mesh points in the polyMesh directory according to the
|
||||
options:
|
||||
translate, rotate and scale options.
|
||||
|
||||
Usage
|
||||
Options are:
|
||||
|
||||
-translate vector
|
||||
Translates the points by the given vector,
|
||||
|
||||
@ -26,9 +26,10 @@ Application
|
||||
reconstructParMesh
|
||||
|
||||
Description
|
||||
Reconstructs a mesh using geometric information only. Writes
|
||||
point/face/cell procAddressing so afterwards reconstructPar can be used to
|
||||
reconstruct fields.
|
||||
Reconstructs a mesh using geometric information only.
|
||||
|
||||
Writes point/face/cell procAddressing so afterwards reconstructPar can be
|
||||
used to reconstruct fields.
|
||||
|
||||
Note:
|
||||
- uses geometric matching tolerance (set with -mergeTol option)
|
||||
|
||||
@ -26,7 +26,17 @@ Application
|
||||
redistributeMeshPar
|
||||
|
||||
Description
|
||||
Parallel redecomposition of mesh.
|
||||
Redistributes existing decomposed mesh and fields according to the current
|
||||
settings in the decomposeParDict file.
|
||||
|
||||
Must be run on maximum number of source and destination processors.
|
||||
Balances mesh and writes new mesh to new time directory.
|
||||
|
||||
Can also work like decomposePar:
|
||||
|
||||
mkdir processor0
|
||||
cp -r constant processor0
|
||||
mpirun -np ddd redistributeMeshPar -parallel
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -36,8 +36,8 @@ Usage
|
||||
@param -ascii \n
|
||||
Write Ensight data in ASCII format instead of "C Binary"
|
||||
|
||||
@param -zeroTime \n
|
||||
Include the often incomplete initial conditions.
|
||||
@param -noZero \n
|
||||
Exclude the often incomplete initial conditions.
|
||||
|
||||
@param -index \<start\>\n
|
||||
Ignore the time index contained in the time file and use a
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user