mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'develop' of develop.openfoam.com:Development/OpenFOAM-plus into develop
This commit is contained in:
121
BuildIssues.txt
121
BuildIssues.txt
@ -1,121 +0,0 @@
|
||||
OpenFOAM-1712
|
||||
==================
|
||||
Known Build Issues
|
||||
==================
|
||||
|
||||
---------------------
|
||||
Intel MPI (Gcc/Clang)
|
||||
---------------------
|
||||
|
||||
Either I_MPI_ROOT or MPI_ROOT can be used to specify the Intel-MPI
|
||||
installation directory path.
|
||||
|
||||
The ThirdParty build of ptscotch uses `mpiicc` for Intel-MPI
|
||||
instead of the usual `mpicc`.
|
||||
When gcc or clang are used, it is highly likely that the
|
||||
I_MPI_CC environment variable also needs to be set accordingly.
|
||||
|
||||
See `mpiicc -help` for more information about environment variables.
|
||||
|
||||
|
||||
--------------
|
||||
Intel Compiler
|
||||
--------------
|
||||
|
||||
Since OpenFOAM uses C++11, a fairly recent version is required.
|
||||
The Intel compiler - icc (ICC) 17.0.1 20161005 is ok, but the
|
||||
initial release - icc (ICC) 17.0.0 20160721 - has a bug that
|
||||
will result in these types of error messages.
|
||||
|
||||
MatrixSpaceI.H(492): error: no instance of overloaded function
|
||||
"Foam::MatrixSpace<Form, Cmpt, Mrows, Ncols>::Block<SubTensor,
|
||||
BRowStart, BColStart>::operator=" matches the specified type
|
||||
|
||||
|
||||
---
|
||||
VTK
|
||||
---
|
||||
|
||||
If using the runTimePostProcessing to create on-the-fly images, you
|
||||
can simply just compile ParaView and these libraries will be used.
|
||||
|
||||
If you elect to use a separate VTK compilation (for example for
|
||||
off-screen rendering), it is advisable to reuse the VTK libraries that
|
||||
are provided with ParaView by making an appropriate symlink
|
||||
prior to using makeVTK. This doesn't just reduce disk-space, but works
|
||||
much better than using the VTK tar file.
|
||||
|
||||
Using runTimePostProcessing with the 'plain' VTK libraries does
|
||||
generally work, but does not exit cleanly:
|
||||
|
||||
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
|
||||
undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv
|
||||
|
||||
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
|
||||
undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev
|
||||
|
||||
This error appears to be suppressed if VTK is compiled with a Debug build-type.
|
||||
|
||||
|
||||
-------------------------
|
||||
Building on older systems
|
||||
-------------------------
|
||||
|
||||
If the system gcc is too old for building OpenFOAM, a third-party gcc or
|
||||
clang/llvm installation can be used. If building clang/llvm, note that
|
||||
there are also minimum gcc/g++ requirements there:
|
||||
|
||||
Min gcc/g++
|
||||
=========== ==========
|
||||
4.4 llvm-3.4.2
|
||||
4.7 llvm-3.5.2 - llvm-3.7.0
|
||||
|
||||
|
||||
If your system compiler is too old to build the minimum required gcc or
|
||||
clang/llvm, it is just simply too old.
|
||||
|
||||
|
||||
---------------------------------
|
||||
ThirdParty clang without gmp/mpfr
|
||||
---------------------------------
|
||||
|
||||
If using ThirdParty clang without gmp/mpfr, the ThirdParty makeCGAL
|
||||
script will need to be run manually and specify that there is no
|
||||
gmp/mpfr. Eg,
|
||||
|
||||
cd $WM_THIRD_PARTY_DIR
|
||||
./makeCGAL gmp-none mpfr-none
|
||||
|
||||
Subequent compilation with Allwmake will now run largely without any
|
||||
problems, except that the components linking against CGAL
|
||||
(foamyMesh and surfaceBooleanFeatures) will also try to link against
|
||||
a nonexistent mpfr library. As a workaround, the link-dependency can
|
||||
be removed in wmake/rules/General/CGAL :
|
||||
|
||||
CGAL_LIBS = \
|
||||
-L$(BOOST_ARCH_PATH)/lib \
|
||||
-L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
|
||||
-L$(CGAL_ARCH_PATH)/lib \
|
||||
-L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
|
||||
-lCGAL
|
||||
|
||||
This is a temporary inconvenience until a more robust solution is found.
|
||||
|
||||
|
||||
-------------------------
|
||||
Building with spack
|
||||
-------------------------
|
||||
|
||||
If you are building with spack, note that the depends_on for paraview
|
||||
resolves poorly. The +qt dependency (for building the reader module)
|
||||
may need to be specified as a preference by including the following in
|
||||
your `~/.spack/packages.yaml` file:
|
||||
|
||||
packages:
|
||||
paraview:
|
||||
variants: +qt
|
||||
|
||||
It appears that spack will otherwise ignore any paraview+qt version
|
||||
and attempt to install a paraview~qt version instead.
|
||||
|
||||
--
|
||||
@ -1,2 +1,2 @@
|
||||
api=1904
|
||||
api=1906
|
||||
patch=0
|
||||
|
||||
@ -33,9 +33,9 @@ Please see the relevant guides:
|
||||
[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
||||
[repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
|
||||
|
||||
[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/BuildIssues.txt
|
||||
[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
|
||||
[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
|
||||
[link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
|
||||
[link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
|
||||
[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
);
|
||||
|
||||
vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
|
||||
Cvf.write();
|
||||
//Cvf.write();
|
||||
|
||||
volVectorField U
|
||||
(
|
||||
@ -33,4 +33,4 @@
|
||||
);
|
||||
|
||||
vsm.mapToVolume(Us, U.boundaryFieldRef());
|
||||
U.write();
|
||||
//U.write();
|
||||
|
||||
@ -30,6 +30,7 @@ License
|
||||
#include "LLTMatrix.H"
|
||||
#include "Random.H"
|
||||
#include "SortList.H"
|
||||
#include "Switch.H"
|
||||
#include <algorithm>
|
||||
|
||||
using namespace Foam;
|
||||
@ -237,22 +238,14 @@ int main(int argc, char *argv[])
|
||||
Info<< "# SquareMatrix<scalar> example:" << nl;
|
||||
printMatrix(Info, S) << nl;
|
||||
|
||||
const label mRows = S.m();
|
||||
const label nCols = S.n();
|
||||
const label size = S.size();
|
||||
const labelPair sizes = S.sizes();
|
||||
const bool isEmpty = S.empty();
|
||||
const long constPointer = long(S.cdata());
|
||||
long pointer = long(S.data());
|
||||
|
||||
Info
|
||||
<< "Number of rows =" << tab << mRows << nl
|
||||
<< "Number of columns = " << tab << nCols << nl
|
||||
<< "Number of elements = " << tab << size << nl
|
||||
<< "Number of rows/columns = " << tab << sizes << nl
|
||||
<< "Matrix is empty = " << tab << isEmpty << nl
|
||||
<< "Constant pointer = " << tab << constPointer << nl
|
||||
<< "Pointer = " << tab << pointer << nl
|
||||
<< "Number of rows =" << tab << S.m() << nl
|
||||
<< "Number of columns = " << tab << S.n() << nl
|
||||
<< "Number of elements = " << tab << S.size() << nl
|
||||
<< "Number of rows/columns = " << tab << S.sizes() << nl
|
||||
<< "Matrix is empty = " << tab << Switch(S.empty()) << nl
|
||||
<< "Constant pointer = " << tab << uintptr_t(S.cdata()) << nl
|
||||
<< "Pointer = " << tab << uintptr_t(S.data()) << nl
|
||||
<< nl;
|
||||
|
||||
horizontalLine();
|
||||
|
||||
14
doc/Build.md
14
doc/Build.md
@ -15,7 +15,8 @@ The [third-party][repo third] directory includes a
|
||||
[build guide][link third-build].
|
||||
|
||||
Some known build issues related to specific compiler and VTK library versions
|
||||
can be found in the [$WM_PROJECT_DIR/BuildIssues.txt][link openfoam-issues] file.
|
||||
can be found in the [$WM_PROJECT_DIR/doc/BuildIssues.md][link openfoam-issues]
|
||||
file.
|
||||
|
||||
If you need to change the default versions for third-party libraries,
|
||||
or use system libraries for some components, please some additional
|
||||
@ -94,10 +95,10 @@ simpleFoam
|
||||
OpenFOAM ships with ParaView sources for post-processing OpenFOAM
|
||||
field results. However, the paraview version distributed with
|
||||
the operating system or a [binary package][download ParaView]
|
||||
will be sufficient, and avoids additional compilation complexity.
|
||||
will often be sufficient, and avoids additional compilation complexity.
|
||||
|
||||
If do you wish to compile ParaView from sources, it is recommended
|
||||
that you do so *after* completing an initial compilation of OpenFOAM.
|
||||
If you do wish to compile ParaView from source, it is recommended
|
||||
that you do so ***after*** completing an initial compilation of OpenFOAM.
|
||||
This gets the process started much more quickly. At a later stage,
|
||||
OpenFOAM can be updated to compile with paraview. Only the affected
|
||||
applications will be compiled (eg, the blockMesh reader module) and the
|
||||
@ -123,8 +124,9 @@ More details in the [ThirdParty build guide][link third-build].
|
||||
[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
||||
[repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
|
||||
|
||||
[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/BuildIssues.txt
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
|
||||
[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
|
||||
[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
|
||||
[link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
|
||||
[link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
|
||||
[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
|
||||
|
||||
111
doc/BuildIssues.md
Normal file
111
doc/BuildIssues.md
Normal file
@ -0,0 +1,111 @@
|
||||
## Known Build Issues (OpenFOAM-v1906)
|
||||
|
||||
### Intel MPI with Gcc/Clang)
|
||||
|
||||
Either `I_MPI_ROOT` (preferred) or `MPI_ROOT` can be used to specify
|
||||
the Intel-MPI installation directory path.
|
||||
The ThirdParty build of ptscotch uses `mpiicc` for Intel-MPI instead
|
||||
of the usual `mpicc`. When gcc or clang are used, it is quite likely
|
||||
that the `I_MPI_CC` environment variable also needs to be set
|
||||
accordingly.
|
||||
See `mpiicc -help` for more information about environment variables.
|
||||
|
||||
|
||||
### VTK
|
||||
|
||||
If using the runTimePostProcessing to create on-the-fly images, you
|
||||
can simply just compile ParaView and these libraries will be used.
|
||||
If you elect to use a separate VTK compilation (for example for
|
||||
off-screen rendering), it is advisable to reuse the VTK libraries that
|
||||
are provided with ParaView by making an appropriate symlink
|
||||
prior to using makeVTK. This doesn't just reduce disk-space, but works
|
||||
much better than using the VTK tar file.
|
||||
|
||||
Using runTimePostProcessing with the *plain* VTK libraries does
|
||||
generally work, but may not exit cleanly:
|
||||
```
|
||||
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonExecutionModel-7.1.so.1:
|
||||
undefined symbol: _ZN33vtkFilteringInformationKeyManager13ClassFinalizeEv
|
||||
|
||||
symbol lookup error: .../linux64Gcc/VTK-7.1.0/lib/libvtkCommonDataModel-7.1.so.1:
|
||||
undefined symbol: _ZN49vtkInformationQuadratureSchemeDefinitionVectorKeyD1Ev
|
||||
```
|
||||
|
||||
This error appears to be suppressed if VTK is compiled with a `Debug` build-type.
|
||||
|
||||
|
||||
### Building on older systems
|
||||
|
||||
If the system gcc is too old for building OpenFOAM, a third-party gcc or
|
||||
clang/llvm installation can be used. If building clang/llvm, note that
|
||||
there are also minimum gcc/g++ requirements as listed in the
|
||||
detailed [build guide][link third-build].
|
||||
|
||||
If your system compiler is too old to build the minimum required gcc or
|
||||
clang/llvm, it is just simply too old.
|
||||
|
||||
|
||||
### ThirdParty clang without gmp/mpfr
|
||||
|
||||
If using ThirdParty clang without gmp/mpfr, the ThirdParty makeCGAL
|
||||
script will need to be run manually and specify that there is no
|
||||
gmp/mpfr. Eg,
|
||||
```
|
||||
cd $WM_THIRD_PARTY_DIR
|
||||
./makeCGAL gmp-none mpfr-none
|
||||
```
|
||||
|
||||
Subequent compilation with Allwmake will now run largely without any
|
||||
problems, except that the components linking against CGAL
|
||||
(foamyMesh and surfaceBooleanFeatures) will also try to link against
|
||||
a nonexistent mpfr library. As a workaround, the link-dependency can
|
||||
be removed in wmake/rules/General/CGAL :
|
||||
```
|
||||
CGAL_LIBS = \
|
||||
-L$(BOOST_ARCH_PATH)/lib \
|
||||
-L$(BOOST_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
|
||||
-L$(CGAL_ARCH_PATH)/lib \
|
||||
-L$(CGAL_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
|
||||
-lCGAL
|
||||
```
|
||||
|
||||
A robuster solution is still being sought.
|
||||
|
||||
|
||||
### Building with spack
|
||||
|
||||
If you are building with spack, note that the `depends_on` for paraview
|
||||
resolves poorly. The `+qt` dependency (for building the reader module)
|
||||
may need to be specified as a preference by including the following in
|
||||
your `~/.spack/packages.yaml` file:
|
||||
```
|
||||
packages:
|
||||
paraview:
|
||||
variants: +qt
|
||||
```
|
||||
It appears that spack will otherwise ignore any `paraview+qt` version
|
||||
and attempt to install a `paraview~qt` version instead.
|
||||
|
||||
--
|
||||
<!-- Links -->
|
||||
|
||||
[page ParaView]: http://www.paraview.org/
|
||||
[download ParaView]: https://www.paraview.org/download/
|
||||
|
||||
|
||||
<!-- OpenFOAM -->
|
||||
|
||||
[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
||||
[repo third]: https://develop.openfoam.com/Development/ThirdParty-plus/
|
||||
|
||||
[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
|
||||
[link openfoam-issues]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/BuildIssues.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
|
||||
[link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
|
||||
[link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
|
||||
[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
|
||||
[link third-build]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/BUILD.md
|
||||
[link third-require]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/Requirements.md
|
||||
|
||||
---
|
||||
Copyright 2019 OpenCFD Ltd
|
||||
@ -10,15 +10,21 @@ OpenFOAM requires a functioning C++11 compiler and `make` build toolchain.
|
||||
- fftw: 3.3.7 (recommended - required for FFT-related functionality)
|
||||
- paraview: 5.5.2 (for visualization)
|
||||
|
||||
If using the Intel® compiler, `17.0.1 20161005` is the minimum
|
||||
usable version.
|
||||
|
||||
|
||||
To check the installed versions
|
||||
|
||||
| Program | To check the version |
|
||||
|---------------|-----------------------|
|
||||
| gcc | gcc --version |
|
||||
| icc | icc --version |
|
||||
| cmake | cmake --version |
|
||||
| openmpi | orterun --version |
|
||||
|
||||
|
||||
|
||||
### Additional utilities
|
||||
|
||||
- flex
|
||||
@ -81,7 +87,6 @@ sudo zypper install cmake boost-devel mpfr-devel gmp-devel openmpi-devel gnuplot
|
||||
|
||||
This installs
|
||||
|
||||
|
||||
| Program | openSUSE | Program version |
|
||||
|-----------|-----------|-----------------|
|
||||
| gcc | 15.0 | 7.4.3 |
|
||||
@ -157,7 +162,7 @@ A partial list is given in the [ThirdParty requirements][link third-require].
|
||||
<!-- OpenFOAM -->
|
||||
|
||||
[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/etc/README.md
|
||||
[link openfoam-config]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Config.md
|
||||
[link openfoam-build]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Build.md
|
||||
[link openfoam-require]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/doc/Requirements.md
|
||||
[link third-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
#
|
||||
# It is recommended to use VTK sources from ParaView (5.0.1 or later)
|
||||
#
|
||||
# See BuildIssues.txt about problems that can be encountered when using
|
||||
# See doc/BuildIssues.md about problems that can be encountered when using
|
||||
# the 'plain' VTK sources.
|
||||
#------------------------------------------------------------------------------
|
||||
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
#
|
||||
# It is recommended to use VTK sources from ParaView (5.0.1 or later)
|
||||
#
|
||||
# See BuildIssues.txt about problems that can be encountered when using
|
||||
# See doc/BuildIssues.md about problems that can be encountered when using
|
||||
# the 'plain' VTK sources.
|
||||
#------------------------------------------------------------------------------
|
||||
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
|
||||
|
||||
@ -68,7 +68,8 @@ InfoSwitches
|
||||
allowSystemOperations 1;
|
||||
|
||||
// Allow space character in fileName (use with caution)
|
||||
allowSpaceInFileName 0;
|
||||
// Default: 0 for non-Windows, 1 for Windows
|
||||
//// allowSpaceInFileName 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -33,6 +33,12 @@ License
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// Convert api number (YYMM) -> 20YY. Eg, 1906 -> 2019
|
||||
static inline int apiYear()
|
||||
{
|
||||
return 2000 + (foamVersion::api / 100);
|
||||
}
|
||||
|
||||
// manpage Footer
|
||||
static inline void printManFooter()
|
||||
{
|
||||
@ -40,7 +46,7 @@ static inline void printManFooter()
|
||||
<< "Online documentation "
|
||||
<< "https://www.openfoam.com/documentation/" << nl
|
||||
<< ".SH COPYRIGHT" << nl
|
||||
<< "Copyright \\(co 2018 OpenCFD Ltd." << nl;
|
||||
<< "Copyright \\(co 2018-" << apiYear() << " OpenCFD Ltd." << nl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -36,11 +36,18 @@ License
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
const char* const Foam::fileName::typeName = "fileName";
|
||||
|
||||
int Foam::fileName::debug(Foam::debug::debugSwitch(fileName::typeName, 0));
|
||||
|
||||
int Foam::fileName::allowSpaceInFileName
|
||||
(
|
||||
#ifdef _WIN32
|
||||
Foam::debug::infoSwitch("allowSpaceInFileName", 1)
|
||||
#else
|
||||
Foam::debug::infoSwitch("allowSpaceInFileName", 0)
|
||||
#endif
|
||||
);
|
||||
|
||||
const Foam::fileName Foam::fileName::null;
|
||||
|
||||
|
||||
|
||||
@ -109,12 +109,13 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
|
||||
if (!residualPtr)
|
||||
{
|
||||
WarningInFunction
|
||||
<< "Could not find residual file : " << residualName_
|
||||
<< "Could not find residual field : " << residualName_
|
||||
<< ". The residual mode won't be " << nl
|
||||
<< " considered for the blended field in the stability "
|
||||
<< "blending factor. " << nl
|
||||
<< " Add the corresponding residual function object. " << nl
|
||||
<< " If the residual function object is already set "
|
||||
<< " Please add the corresponding 'solverInfo'"
|
||||
<< " function object with 'writeResidualFields true'." << nl
|
||||
<< " If the solverInfo function object is already enabled "
|
||||
<< "you might need to wait " << nl
|
||||
<< " for the first iteration."
|
||||
<< nl << endl;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2015-2019 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
@ -42,7 +42,6 @@ namespace Foam
|
||||
namespace functionObjects
|
||||
{
|
||||
defineTypeNameAndDebug(forceCoeffs, 0);
|
||||
|
||||
addToRunTimeSelectionTable(functionObject, forceCoeffs, dictionary);
|
||||
}
|
||||
}
|
||||
@ -61,12 +60,23 @@ void Foam::functionObjects::forceCoeffs::createFiles()
|
||||
|
||||
if (nBin_ > 1)
|
||||
{
|
||||
CmBinFilePtr_ = createFile("CmBin");
|
||||
writeBinHeader("Moment coefficient bins", CmBinFilePtr_());
|
||||
CdBinFilePtr_ = createFile("CdBin");
|
||||
writeBinHeader("Drag coefficient bins", CdBinFilePtr_());
|
||||
|
||||
CsBinFilePtr_ = createFile("CsBin");
|
||||
writeBinHeader("Side coefficient bins", CsBinFilePtr_());
|
||||
|
||||
ClBinFilePtr_ = createFile("ClBin");
|
||||
writeBinHeader("Lift coefficient bins", ClBinFilePtr_());
|
||||
|
||||
CmRollBinFilePtr_ = createFile("CmRollBin");
|
||||
writeBinHeader("Roll moment coefficient bins", CmRollBinFilePtr_());
|
||||
|
||||
CmPitchBinFilePtr_ = createFile("CmPitchBin");
|
||||
writeBinHeader("Moment coefficient bins", CmPitchBinFilePtr_());
|
||||
|
||||
CmYawBinFilePtr_ = createFile("CmYawBin");
|
||||
writeBinHeader("Yaw moment coefficient bins", CmYawBinFilePtr_());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,18 +89,28 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedHeader
|
||||
) const
|
||||
{
|
||||
writeHeader(os, "Force coefficients");
|
||||
writeHeaderValue(os, "liftDir", liftDir_);
|
||||
writeHeaderValue(os, "dragDir", dragDir_);
|
||||
writeHeaderValue(os, "pitchAxis", pitchAxis_);
|
||||
writeHeaderValue(os, "dragDir", coordSys_.e1());
|
||||
writeHeaderValue(os, "sideDir", coordSys_.e2());
|
||||
writeHeaderValue(os, "liftDir", coordSys_.e3());
|
||||
writeHeaderValue(os, "rollAxis", coordSys_.e1());
|
||||
writeHeaderValue(os, "pitchAxis", coordSys_.e2());
|
||||
writeHeaderValue(os, "yawAxis", coordSys_.e3());
|
||||
writeHeaderValue(os, "magUInf", magUInf_);
|
||||
writeHeaderValue(os, "lRef", lRef_);
|
||||
writeHeaderValue(os, "Aref", Aref_);
|
||||
writeHeaderValue(os, "CofR", coordSys_.origin());
|
||||
writeHeader(os, "");
|
||||
writeCommented(os, "Time");
|
||||
writeTabbed(os, "Cm");
|
||||
writeTabbed(os, "Cd");
|
||||
writeTabbed(os, "Cs");
|
||||
writeTabbed(os, "Cl");
|
||||
writeTabbed(os, "CmRoll");
|
||||
writeTabbed(os, "CmPitch");
|
||||
writeTabbed(os, "CmYaw");
|
||||
writeTabbed(os, "Cd(f)");
|
||||
writeTabbed(os, "Cd(r)");
|
||||
writeTabbed(os, "Cs(f)");
|
||||
writeTabbed(os, "Cs(r)");
|
||||
writeTabbed(os, "Cl(f)");
|
||||
writeTabbed(os, "Cl(r)");
|
||||
os << endl;
|
||||
@ -135,9 +155,9 @@ void Foam::functionObjects::forceCoeffs::writeBinHeader
|
||||
writeHeader(os, "");
|
||||
writeCommented(os, "Time");
|
||||
|
||||
for (label j = 0; j < nBin_; j++)
|
||||
for (label j = 0; j < nBin_; ++j)
|
||||
{
|
||||
word jn(Foam::name(j) + ':');
|
||||
const word jn(Foam::name(j) + ':');
|
||||
writeTabbed(os, jn + "total");
|
||||
writeTabbed(os, jn + "pressure");
|
||||
writeTabbed(os, jn + "viscous");
|
||||
@ -163,13 +183,13 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
|
||||
return;
|
||||
}
|
||||
|
||||
scalar pressure = sum(coeff[0]);
|
||||
scalar viscous = sum(coeff[1]);
|
||||
scalar porous = sum(coeff[2]);
|
||||
scalar total = pressure + viscous + porous;
|
||||
const scalar pressure = sum(coeff[0]);
|
||||
const scalar viscous = sum(coeff[1]);
|
||||
const scalar porous = sum(coeff[2]);
|
||||
const scalar total = pressure + viscous + porous;
|
||||
|
||||
Info<< " " << title << " : " << total << token::TAB
|
||||
<< "("
|
||||
<< '('
|
||||
<< "pressure: " << pressure << token::TAB
|
||||
<< "viscous: " << viscous;
|
||||
|
||||
@ -178,7 +198,7 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
|
||||
Info<< token::TAB << "porous: " << porous;
|
||||
}
|
||||
|
||||
Info<< ")" << endl;
|
||||
Info<< ')' << endl;
|
||||
}
|
||||
|
||||
|
||||
@ -190,7 +210,7 @@ void Foam::functionObjects::forceCoeffs::writeBinData
|
||||
{
|
||||
writeTime(os);
|
||||
|
||||
for (label bini = 0; bini < nBin_; bini++)
|
||||
for (label bini = 0; bini < nBin_; ++bini)
|
||||
{
|
||||
scalar total = coeffs[0][bini] + coeffs[1][bini] + coeffs[2][bini];
|
||||
|
||||
@ -216,45 +236,35 @@ Foam::functionObjects::forceCoeffs::forceCoeffs
|
||||
)
|
||||
:
|
||||
forces(name, runTime, dict),
|
||||
liftDir_(Zero),
|
||||
dragDir_(Zero),
|
||||
pitchAxis_(Zero),
|
||||
magUInf_(0.0),
|
||||
lRef_(0.0),
|
||||
Aref_(0.0),
|
||||
magUInf_(Zero),
|
||||
lRef_(Zero),
|
||||
Aref_(Zero),
|
||||
coeffFilePtr_(),
|
||||
CmBinFilePtr_(),
|
||||
CdBinFilePtr_(),
|
||||
ClBinFilePtr_()
|
||||
CsBinFilePtr_(),
|
||||
ClBinFilePtr_(),
|
||||
CmRollBinFilePtr_(),
|
||||
CmPitchBinFilePtr_(),
|
||||
CmYawBinFilePtr_()
|
||||
{
|
||||
read(dict);
|
||||
setCoordinateSystem(dict, "liftDir", "dragDir");
|
||||
Info<< endl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::functionObjects::forceCoeffs::~forceCoeffs()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
|
||||
{
|
||||
forces::read(dict);
|
||||
|
||||
// Directions for lift and drag forces, and pitch moment
|
||||
dict.readEntry("liftDir", liftDir_);
|
||||
dict.readEntry("dragDir", dragDir_);
|
||||
dict.readEntry("pitchAxis", pitchAxis_);
|
||||
|
||||
// Free stream velocity magnitude
|
||||
dict.readEntry("magUInf", magUInf_);
|
||||
|
||||
// If case is compressible we must read rhoInf (store in rhoRef_) to
|
||||
// calculate the reference dynamic pressure
|
||||
// - note: for incompressible, rhoRef_ is already initialised
|
||||
// Note: for incompressible, rhoRef_ is already initialised
|
||||
if (rhoName_ != "rhoInf")
|
||||
{
|
||||
dict.readEntry("rhoInf", rhoRef_);
|
||||
@ -315,55 +325,94 @@ bool Foam::functionObjects::forceCoeffs::execute()
|
||||
|
||||
createFiles();
|
||||
|
||||
scalar pDyn = 0.5*rhoRef_*magUInf_*magUInf_;
|
||||
|
||||
// Storage for pressure, viscous and porous contributions to coeffs
|
||||
List<Field<scalar>> momentCoeffs(3);
|
||||
List<Field<scalar>> dragCoeffs(3);
|
||||
List<Field<scalar>> sideCoeffs(3);
|
||||
List<Field<scalar>> liftCoeffs(3);
|
||||
List<Field<scalar>> rollMomentCoeffs(3);
|
||||
List<Field<scalar>> pitchMomentCoeffs(3);
|
||||
List<Field<scalar>> yawMomentCoeffs(3);
|
||||
|
||||
forAll(liftCoeffs, i)
|
||||
{
|
||||
momentCoeffs[i].setSize(nBin_);
|
||||
dragCoeffs[i].setSize(nBin_);
|
||||
sideCoeffs[i].setSize(nBin_);
|
||||
liftCoeffs[i].setSize(nBin_);
|
||||
rollMomentCoeffs[i].setSize(nBin_);
|
||||
pitchMomentCoeffs[i].setSize(nBin_);
|
||||
yawMomentCoeffs[i].setSize(nBin_);
|
||||
}
|
||||
|
||||
// Calculate coefficients
|
||||
scalar CmTot = 0;
|
||||
scalar CdTot = 0;
|
||||
scalar CsTot = 0;
|
||||
scalar ClTot = 0;
|
||||
scalar CmRollTot = 0;
|
||||
scalar CmPitchTot = 0;
|
||||
scalar CmYawTot = 0;
|
||||
|
||||
const scalar pDyn = 0.5*rhoRef_*sqr(magUInf_);
|
||||
|
||||
// Avoid divide by zero in 2D cases
|
||||
const scalar momentScaling = 1.0/(Aref_*pDyn*lRef_ + SMALL);
|
||||
const scalar forceScaling = 1.0/(Aref_*pDyn + SMALL);
|
||||
|
||||
forAll(liftCoeffs, i)
|
||||
{
|
||||
momentCoeffs[i] = (moment_[i] & pitchAxis_)/(Aref_*pDyn*lRef_);
|
||||
dragCoeffs[i] = (force_[i] & dragDir_)/(Aref_*pDyn);
|
||||
liftCoeffs[i] = (force_[i] & liftDir_)/(Aref_*pDyn);
|
||||
const Field<vector> localForce(coordSys_.localVector(force_[i]));
|
||||
const Field<vector> localMoment(coordSys_.localVector(moment_[i]));
|
||||
|
||||
dragCoeffs[i] = forceScaling*(localForce.component(0));
|
||||
sideCoeffs[i] = forceScaling*(localForce.component(1));
|
||||
liftCoeffs[i] = forceScaling*(localForce.component(2));
|
||||
rollMomentCoeffs[i] = momentScaling*(localMoment.component(0));
|
||||
pitchMomentCoeffs[i] = momentScaling*(localMoment.component(1));
|
||||
yawMomentCoeffs[i] = momentScaling*(localMoment.component(2));
|
||||
|
||||
CmTot += sum(momentCoeffs[i]);
|
||||
CdTot += sum(dragCoeffs[i]);
|
||||
CsTot += sum(sideCoeffs[i]);
|
||||
ClTot += sum(liftCoeffs[i]);
|
||||
CmRollTot += sum(rollMomentCoeffs[i]);
|
||||
CmPitchTot += sum(pitchMomentCoeffs[i]);
|
||||
CmYawTot += sum(yawMomentCoeffs[i]);
|
||||
}
|
||||
|
||||
scalar ClfTot = ClTot/2.0 + CmTot;
|
||||
scalar ClrTot = ClTot/2.0 - CmTot;
|
||||
// Single contributions to the front and rear
|
||||
const scalar CdfTot = 0.5*CdTot + CmRollTot;
|
||||
const scalar CdrTot = 0.5*CdTot - CmRollTot;
|
||||
const scalar CsfTot = 0.5*CsTot + CmYawTot;
|
||||
const scalar CsrTot = 0.5*CsTot - CmYawTot;
|
||||
const scalar ClfTot = 0.5*ClTot + CmPitchTot;
|
||||
const scalar ClrTot = 0.5*ClTot - CmPitchTot;
|
||||
|
||||
Log << type() << " " << name() << " execute:" << nl
|
||||
<< " Coefficients" << nl;
|
||||
|
||||
writeIntegratedData("Cm", momentCoeffs);
|
||||
writeIntegratedData("Cd", dragCoeffs);
|
||||
writeIntegratedData("Cs", sideCoeffs);
|
||||
writeIntegratedData("Cl", liftCoeffs);
|
||||
writeIntegratedData("CmRoll", rollMomentCoeffs);
|
||||
writeIntegratedData("CmPitch", pitchMomentCoeffs);
|
||||
writeIntegratedData("CmYaw", yawMomentCoeffs);
|
||||
|
||||
Log << " Cd(f) : " << CdfTot << nl
|
||||
<< " Cd(r) : " << CdrTot << nl;
|
||||
|
||||
Log << " Cs(f) : " << CsfTot << nl
|
||||
<< " Cs(r) : " << CsrTot << nl;
|
||||
|
||||
Log << " Cl(f) : " << ClfTot << nl
|
||||
<< " Cl(r) : " << ClrTot << nl
|
||||
<< endl;
|
||||
<< " Cl(r) : " << ClrTot << nl;
|
||||
|
||||
if (writeToFile())
|
||||
{
|
||||
writeTime(coeffFilePtr_());
|
||||
coeffFilePtr_()
|
||||
<< tab << CmTot << tab << CdTot
|
||||
<< tab << ClTot << tab << ClfTot << tab << ClrTot << endl;
|
||||
|
||||
<< tab << CdTot << tab << CsTot << tab << ClTot
|
||||
<< tab << CmRollTot << tab << CmPitchTot << tab << CmYawTot
|
||||
<< tab << CdfTot << tab << CdrTot
|
||||
<< tab << CsfTot << tab << CsrTot
|
||||
<< tab << ClfTot << tab << ClrTot << endl;
|
||||
|
||||
if (nBin_ > 1)
|
||||
{
|
||||
@ -371,26 +420,41 @@ bool Foam::functionObjects::forceCoeffs::execute()
|
||||
{
|
||||
forAll(liftCoeffs, i)
|
||||
{
|
||||
for (label bini = 1; bini < nBin_; bini++)
|
||||
for (label bini = 1; bini < nBin_; ++bini)
|
||||
{
|
||||
liftCoeffs[i][bini] += liftCoeffs[i][bini-1];
|
||||
dragCoeffs[i][bini] += dragCoeffs[i][bini-1];
|
||||
momentCoeffs[i][bini] += momentCoeffs[i][bini-1];
|
||||
sideCoeffs[i][bini] += sideCoeffs[i][bini-1];
|
||||
liftCoeffs[i][bini] += liftCoeffs[i][bini-1];
|
||||
rollMomentCoeffs[i][bini] +=
|
||||
rollMomentCoeffs[i][bini-1];
|
||||
pitchMomentCoeffs[i][bini] +=
|
||||
pitchMomentCoeffs[i][bini-1];
|
||||
yawMomentCoeffs[i][bini] += yawMomentCoeffs[i][bini-1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
writeBinData(dragCoeffs, CdBinFilePtr_());
|
||||
writeBinData(sideCoeffs, CsBinFilePtr_());
|
||||
writeBinData(liftCoeffs, ClBinFilePtr_());
|
||||
writeBinData(momentCoeffs, CmBinFilePtr_());
|
||||
writeBinData(rollMomentCoeffs, CmRollBinFilePtr_());
|
||||
writeBinData(pitchMomentCoeffs, CmPitchBinFilePtr_());
|
||||
writeBinData(yawMomentCoeffs, CmYawBinFilePtr_());
|
||||
}
|
||||
}
|
||||
|
||||
// Write state/results information
|
||||
{
|
||||
setResult("Cm", CmTot);
|
||||
setResult("Cd", CdTot);
|
||||
setResult("Cs", CsTot);
|
||||
setResult("Cl", ClTot);
|
||||
setResult("CmRoll", CmRollTot);
|
||||
setResult("CmPitch", CmPitchTot);
|
||||
setResult("CmYaw", CmYawTot);
|
||||
setResult("Cd(f)", CdfTot);
|
||||
setResult("Cd(r)", CdrTot);
|
||||
setResult("Cs(f)", CsfTot);
|
||||
setResult("Cs(r)", CsrTot);
|
||||
setResult("Cl(f)", ClfTot);
|
||||
setResult("Cl(r)", ClrTot);
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2019 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
@ -30,9 +30,18 @@ Group
|
||||
grpForcesFunctionObjects
|
||||
|
||||
Description
|
||||
Extends the forces functionObject by providing lift, drag and moment
|
||||
coefficients. The data can optionally be output into bins, defined in a
|
||||
given direction.
|
||||
Extends the \c forces functionObject by providing coefficients for:
|
||||
- drag, side and lift forces (Cd, Cs, and Cl)
|
||||
- roll, pitch and yaw moments (CmRoll, CmPitch, and CmYaw)
|
||||
- front and rear axle force contributions (C(f) and C(r)) wherein
|
||||
|
||||
\verbatim
|
||||
Cd(f/r) = 0.5*Cd \pm CmRoll
|
||||
Cs(f/r) = 0.5*Cs \pm CmYaw
|
||||
Cl(f/r) = 0.5*Cl \pm CmPitch
|
||||
\endverbatim
|
||||
|
||||
The data can optionally be output into bins, defined in a given direction.
|
||||
|
||||
The binned data provides the total and consitituent components per bin:
|
||||
- total coefficient
|
||||
@ -43,9 +52,12 @@ Description
|
||||
Data is written into multiple files in the
|
||||
postProcessing/\<functionObjectName\> directory:
|
||||
- coefficient.dat : integrated coefficients over all geometries
|
||||
- CmBin.dat : moment coefficient bins
|
||||
- CdBin.dat : drag coefficient bins
|
||||
- CsBin.dat : side coefficient bins
|
||||
- ClBin.dat : lift coefficient bins
|
||||
- CmRollBin.dat : roll moment coefficient bins
|
||||
- CmPitchBin.dat : pitch moment coefficient bins
|
||||
- CmYawBin.dat : yaw moment coefficient bins
|
||||
|
||||
Usage
|
||||
Example of function object specification:
|
||||
@ -58,12 +70,14 @@ Usage
|
||||
log yes;
|
||||
writeFields yes;
|
||||
patches (walls);
|
||||
liftDir (0 1 0);
|
||||
dragDir (-1 0 0);
|
||||
pitchAxis (0 0 1);
|
||||
|
||||
// input keywords for directions of force/moment coefficients
|
||||
// refer below for options, and relations
|
||||
|
||||
magUInf 100;
|
||||
lRef 3.5;
|
||||
Aref 2.2;
|
||||
porosity no;
|
||||
|
||||
binData
|
||||
{
|
||||
@ -76,26 +90,65 @@ Usage
|
||||
|
||||
Where the entries comprise:
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
Property | Description | Required | Default
|
||||
type | Type name: forceCoeffs | yes |
|
||||
log | Write force data to standard output | no | no
|
||||
writeFields | Write the force and moment coefficient fields | no | no
|
||||
writeFields | Write force,moment coefficient fields | no | no
|
||||
patches | Patches included in the forces calculation | yes |
|
||||
liftDir | Lift direction | yes |
|
||||
dragDir | Drag direction | yes |
|
||||
pitchAxis | Picth axis | yes |
|
||||
magUInf | Free stream velocity magnitude | yes |
|
||||
lRef | Reference length scale for moment calculations | yes |
|
||||
Aref | Reference area | yes |
|
||||
porosity | Flag to include porosity contributions | no | no
|
||||
porosity | Include porosity contributions | no | false
|
||||
\endtable
|
||||
|
||||
Bin data is optional, but if the dictionary is present, the entries must
|
||||
be defined according o
|
||||
be defined according to following:
|
||||
\table
|
||||
nBin | number of data bins | yes |
|
||||
direction | direction along which bins are defined | yes |
|
||||
cumulative | bin data accumulated with incresing distance | yes |
|
||||
nBin | Number of data bins | yes |
|
||||
direction | Direction along which bins are defined | yes |
|
||||
cumulative | Bin data accumulated with incresing distance | yes |
|
||||
\endtable
|
||||
|
||||
Input of force/moment coefficient directions:
|
||||
- require an origin, and two orthogonal directions; the remaining orthogonal
|
||||
direction is determined accordingly.
|
||||
- can be added by the three options below.
|
||||
|
||||
\verbatim
|
||||
CofR (0 0 0); // Centre of rotation
|
||||
dragDir (1 0 0);
|
||||
liftDir (0 0 1);
|
||||
\endverbatim
|
||||
|
||||
\verbatim
|
||||
origin (0 0 0);
|
||||
e1 (1 0 0);
|
||||
e3 (0 0 1); // combinations: (e1, e2) or (e2, e3) or (e3, e1)
|
||||
\endverbatim
|
||||
|
||||
\verbatim
|
||||
coordinateSystem
|
||||
{
|
||||
origin (0 0 0);
|
||||
rotation
|
||||
{
|
||||
type axes;
|
||||
e1 (1 0 0);
|
||||
e3 (0 0 1); // combinations: (e1, e2) or (e2, e3) or (e3, e1)
|
||||
}
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
The default direction relations are shown below:
|
||||
|
||||
\table
|
||||
Property | Description | Alias | Direction
|
||||
dragDir | Drag direction | e1 | (1 0 0)
|
||||
sideDir | Side force direction | e2 | (0 1 0)
|
||||
liftDir | Lift direction | e3 | (0 0 1)
|
||||
rollAxis | Roll axis | e1 | (1 0 0)
|
||||
pitchAxis | Pitch axis | e2 | (0 1 0)
|
||||
yawAxis | Yaw axis | e3 | (0 0 1)
|
||||
\endtable
|
||||
|
||||
See also
|
||||
@ -130,30 +183,18 @@ class forceCoeffs
|
||||
{
|
||||
// Private data
|
||||
|
||||
// Force coefficient geometry
|
||||
|
||||
//- Lift
|
||||
vector liftDir_;
|
||||
|
||||
//- Drag
|
||||
vector dragDir_;
|
||||
|
||||
//- Pitch
|
||||
vector pitchAxis_;
|
||||
|
||||
|
||||
// Free-stream conditions
|
||||
|
||||
//- Velocity magnitude
|
||||
//- Free-stream velocity magnitude
|
||||
scalar magUInf_;
|
||||
|
||||
|
||||
// Reference scales
|
||||
|
||||
//- Length
|
||||
//- Reference length [m]
|
||||
scalar lRef_;
|
||||
|
||||
//- Area
|
||||
//- Reference area [m^2]
|
||||
scalar Aref_;
|
||||
|
||||
|
||||
@ -162,15 +203,24 @@ class forceCoeffs
|
||||
//- Integrated coefficients
|
||||
autoPtr<OFstream> coeffFilePtr_;
|
||||
|
||||
//- Moment coefficient
|
||||
autoPtr<OFstream> CmBinFilePtr_;
|
||||
|
||||
//- Drag coefficient
|
||||
autoPtr<OFstream> CdBinFilePtr_;
|
||||
|
||||
//- Side coefficient
|
||||
autoPtr<OFstream> CsBinFilePtr_;
|
||||
|
||||
//- Lift coefficient
|
||||
autoPtr<OFstream> ClBinFilePtr_;
|
||||
|
||||
//- Roll moment coefficient
|
||||
autoPtr<OFstream> CmRollBinFilePtr_;
|
||||
|
||||
//- Pitch moment coefficient
|
||||
autoPtr<OFstream> CmPitchBinFilePtr_;
|
||||
|
||||
//- Yaw moment coefficient
|
||||
autoPtr<OFstream> CmYawBinFilePtr_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
@ -223,7 +273,7 @@ public:
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~forceCoeffs();
|
||||
virtual ~forceCoeffs() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
@ -231,7 +281,7 @@ public:
|
||||
//- Read the forces data
|
||||
virtual bool read(const dictionary&);
|
||||
|
||||
//- Execute, currently does nothing
|
||||
//- Execute
|
||||
virtual bool execute();
|
||||
|
||||
//- Write the forces
|
||||
@ -249,3 +299,4 @@ public:
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
|
||||
@ -71,22 +71,6 @@ void Foam::functionObjects::forces::createFiles()
|
||||
momentBinFilePtr_ = createFile("momentBin");
|
||||
writeBinHeader("Moment", momentBinFilePtr_());
|
||||
}
|
||||
|
||||
if (localSystem_)
|
||||
{
|
||||
localForceFilePtr_ = createFile("localForce");
|
||||
writeIntegratedHeader("Force", localForceFilePtr_());
|
||||
localMomentFilePtr_ = createFile("localMoment");
|
||||
writeIntegratedHeader("Moment", localMomentFilePtr_());
|
||||
|
||||
if (nBin_ > 1)
|
||||
{
|
||||
localForceBinFilePtr_ = createFile("localForceBin");
|
||||
writeBinHeader("Force", localForceBinFilePtr_());
|
||||
localMomentBinFilePtr_ = createFile("localMomentBin");
|
||||
writeBinHeader("Moment", localMomentBinFilePtr_());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,6 +153,49 @@ void Foam::functionObjects::forces::writeBinHeader
|
||||
}
|
||||
|
||||
|
||||
void Foam::functionObjects::forces::setCoordinateSystem
|
||||
(
|
||||
const dictionary& dict,
|
||||
const word& e3Name,
|
||||
const word& e1Name
|
||||
)
|
||||
{
|
||||
coordSys_.clear();
|
||||
|
||||
if (dict.readIfPresent<point>("CofR", coordSys_.origin()))
|
||||
{
|
||||
const vector e3 = e3Name == word::null ?
|
||||
vector(0, 0, 1) : dict.get<vector>(e3Name);
|
||||
const vector e1 = e1Name == word::null ?
|
||||
vector(1, 0, 0) : dict.get<vector>(e1Name);
|
||||
|
||||
coordSys_ =
|
||||
coordSystem::cartesian(coordSys_.origin(), e3, e1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// The 'coordinateSystem' sub-dictionary is optional,
|
||||
// but enforce use of a cartesian system if not found.
|
||||
|
||||
if (dict.found(coordinateSystem::typeName_()))
|
||||
{
|
||||
// New() for access to indirect (global) coordinate system
|
||||
coordSys_ =
|
||||
coordinateSystem::New
|
||||
(
|
||||
obr_,
|
||||
dict,
|
||||
coordinateSystem::typeName_()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
coordSys_ = coordSystem::cartesian(dict);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Foam::functionObjects::forces::initialise()
|
||||
{
|
||||
@ -586,41 +613,20 @@ void Foam::functionObjects::forces::writeForces()
|
||||
writeIntegratedForceMoment
|
||||
(
|
||||
"forces",
|
||||
force_[0],
|
||||
force_[1],
|
||||
force_[2],
|
||||
coordSys_.localVector(force_[0]),
|
||||
coordSys_.localVector(force_[1]),
|
||||
coordSys_.localVector(force_[2]),
|
||||
forceFilePtr_
|
||||
);
|
||||
|
||||
writeIntegratedForceMoment
|
||||
(
|
||||
"moments",
|
||||
moment_[0],
|
||||
moment_[1],
|
||||
moment_[2],
|
||||
momentFilePtr_
|
||||
);
|
||||
|
||||
if (localSystem_)
|
||||
{
|
||||
writeIntegratedForceMoment
|
||||
(
|
||||
"local forces",
|
||||
coordSys_.localVector(force_[0]),
|
||||
coordSys_.localVector(force_[1]),
|
||||
coordSys_.localVector(force_[2]),
|
||||
localForceFilePtr_
|
||||
);
|
||||
|
||||
writeIntegratedForceMoment
|
||||
(
|
||||
"local moments",
|
||||
coordSys_.localVector(moment_[0]),
|
||||
coordSys_.localVector(moment_[1]),
|
||||
coordSys_.localVector(moment_[2]),
|
||||
localMomentFilePtr_
|
||||
momentFilePtr_
|
||||
);
|
||||
}
|
||||
|
||||
Log << endl;
|
||||
}
|
||||
@ -672,11 +678,6 @@ void Foam::functionObjects::forces::writeBinnedForceMoment
|
||||
|
||||
|
||||
void Foam::functionObjects::forces::writeBins()
|
||||
{
|
||||
writeBinnedForceMoment(force_, forceBinFilePtr_);
|
||||
writeBinnedForceMoment(moment_, momentBinFilePtr_);
|
||||
|
||||
if (localSystem_)
|
||||
{
|
||||
List<Field<vector>> lf(3);
|
||||
List<Field<vector>> lm(3);
|
||||
@ -687,9 +688,8 @@ void Foam::functionObjects::forces::writeBins()
|
||||
lm[1] = coordSys_.localVector(moment_[1]);
|
||||
lm[2] = coordSys_.localVector(moment_[2]);
|
||||
|
||||
writeBinnedForceMoment(lf, localForceBinFilePtr_);
|
||||
writeBinnedForceMoment(lm, localMomentBinFilePtr_);
|
||||
}
|
||||
writeBinnedForceMoment(lf, forceBinFilePtr_);
|
||||
writeBinnedForceMoment(lm, momentBinFilePtr_);
|
||||
}
|
||||
|
||||
|
||||
@ -711,10 +711,6 @@ Foam::functionObjects::forces::forces
|
||||
momentFilePtr_(),
|
||||
forceBinFilePtr_(),
|
||||
momentBinFilePtr_(),
|
||||
localForceFilePtr_(),
|
||||
localMomentFilePtr_(),
|
||||
localForceBinFilePtr_(),
|
||||
localMomentBinFilePtr_(),
|
||||
patchSet_(),
|
||||
pName_(word::null),
|
||||
UName_(word::null),
|
||||
@ -724,7 +720,6 @@ Foam::functionObjects::forces::forces
|
||||
rhoRef_(VGREAT),
|
||||
pRef_(0),
|
||||
coordSys_(),
|
||||
localSystem_(false),
|
||||
porosity_(false),
|
||||
nBin_(1),
|
||||
binDir_(Zero),
|
||||
@ -738,6 +733,7 @@ Foam::functionObjects::forces::forces
|
||||
if (readFields)
|
||||
{
|
||||
read(dict);
|
||||
setCoordinateSystem(dict);
|
||||
Log << endl;
|
||||
}
|
||||
}
|
||||
@ -759,10 +755,6 @@ Foam::functionObjects::forces::forces
|
||||
momentFilePtr_(),
|
||||
forceBinFilePtr_(),
|
||||
momentBinFilePtr_(),
|
||||
localForceFilePtr_(),
|
||||
localMomentFilePtr_(),
|
||||
localForceBinFilePtr_(),
|
||||
localMomentBinFilePtr_(),
|
||||
patchSet_(),
|
||||
pName_(word::null),
|
||||
UName_(word::null),
|
||||
@ -772,7 +764,6 @@ Foam::functionObjects::forces::forces
|
||||
rhoRef_(VGREAT),
|
||||
pRef_(0),
|
||||
coordSys_(),
|
||||
localSystem_(false),
|
||||
porosity_(false),
|
||||
nBin_(1),
|
||||
binDir_(Zero),
|
||||
@ -786,6 +777,7 @@ Foam::functionObjects::forces::forces
|
||||
if (readFields)
|
||||
{
|
||||
read(dict);
|
||||
setCoordinateSystem(dict);
|
||||
Log << endl;
|
||||
}
|
||||
|
||||
@ -843,32 +835,6 @@ bool Foam::functionObjects::forces::read(const dictionary& dict)
|
||||
Info<< " Reference pressure (pRef) set to " << pRef_ << endl;
|
||||
}
|
||||
|
||||
coordSys_.clear();
|
||||
localSystem_ = false;
|
||||
|
||||
// Centre of rotation for moment calculations
|
||||
// specified directly, from coordinate system, or implicitly (0 0 0)
|
||||
if (!dict.readIfPresent<point>("CofR", coordSys_.origin()))
|
||||
{
|
||||
// The 'coordinateSystem' sub-dictionary is optional,
|
||||
// but enforce use of a cartesian system.
|
||||
|
||||
if (dict.found(coordinateSystem::typeName_()))
|
||||
{
|
||||
// New() for access to indirect (global) coordinate system
|
||||
coordSys_ =
|
||||
coordinateSystem::New
|
||||
(
|
||||
obr_, dict, coordinateSystem::typeName_()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
coordSys_ = coordSystem::cartesian(dict);
|
||||
}
|
||||
|
||||
localSystem_ = true;
|
||||
}
|
||||
|
||||
dict.readIfPresent("porosity", porosity_);
|
||||
if (porosity_)
|
||||
|
||||
@ -192,18 +192,6 @@ protected:
|
||||
//- Moment bins
|
||||
autoPtr<OFstream> momentBinFilePtr_;
|
||||
|
||||
//- Local force
|
||||
autoPtr<OFstream> localForceFilePtr_;
|
||||
|
||||
//- Local moment
|
||||
autoPtr<OFstream> localMomentFilePtr_;
|
||||
|
||||
//- Local force bins
|
||||
autoPtr<OFstream> localForceBinFilePtr_;
|
||||
|
||||
//- Local moment bins
|
||||
autoPtr<OFstream> localMomentBinFilePtr_;
|
||||
|
||||
|
||||
// Read from dictionary
|
||||
|
||||
@ -234,9 +222,6 @@ protected:
|
||||
//- Coordinate system used when evaluting forces/moments
|
||||
coordSystem::cartesian coordSys_;
|
||||
|
||||
//- Flag to indicate whether we are using a local coordinates
|
||||
bool localSystem_;
|
||||
|
||||
//- Flag to include porosity effects
|
||||
bool porosity_;
|
||||
|
||||
@ -283,6 +268,14 @@ protected:
|
||||
//- Write header for binned data
|
||||
void writeBinHeader(const word& header, Ostream& os) const;
|
||||
|
||||
//- Set the co-ordinate system from dictionary and axes names
|
||||
void setCoordinateSystem
|
||||
(
|
||||
const dictionary& dict,
|
||||
const word& e3Name = word::null,
|
||||
const word& e1Name = word::null
|
||||
);
|
||||
|
||||
//- Initialise the fields
|
||||
void initialise();
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ Description
|
||||
\heading Dictionary parameters
|
||||
\table
|
||||
Property | Description | Required | Default
|
||||
type | code / searchableCone | selector |
|
||||
type | cone / searchableCone | selector |
|
||||
point1 | coordinate of endpoint | yes |
|
||||
radius1 | radius at point1 | yes |
|
||||
innerRadius1| inner radius at point1 | no | 0
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v1812 |
|
||||
| \\ / A nd | Web: www.OpenFOAM.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volVectorField;
|
||||
location "0";
|
||||
object U;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -1 0 0 0 0];
|
||||
|
||||
|
||||
internalField uniform (0 0 0);
|
||||
|
||||
boundaryField
|
||||
{
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform (0 0 0);
|
||||
}
|
||||
bound
|
||||
{
|
||||
type calculated;
|
||||
value uniform (0 0 0);
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform (0 0 0);
|
||||
}
|
||||
bottom
|
||||
{
|
||||
type calculated;
|
||||
value uniform (0 0 0);
|
||||
}
|
||||
top
|
||||
{
|
||||
type calculated;
|
||||
value uniform (0.05 0 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -2,12 +2,7 @@
|
||||
cd ${0%/*} || exit 1 # Run from this directory
|
||||
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
||||
|
||||
cleanTimeDirectories
|
||||
|
||||
cleanPostProcessing
|
||||
|
||||
cleanCase
|
||||
cleanFaMesh
|
||||
|
||||
rm -rf processor*
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
@ -10,7 +10,7 @@ residuals
|
||||
{
|
||||
type solverInfo;
|
||||
libs ("libutilityFunctionObjects.so");
|
||||
writeFields true;
|
||||
writeResidualFields true;
|
||||
writeControl outputTime;
|
||||
fields (p);
|
||||
}
|
||||
|
||||
@ -10,44 +10,20 @@ FoamFile
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
location "0";
|
||||
object Cvf;
|
||||
object MangrovesIndex;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 -1 0 0 0 0 0];
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
inlet
|
||||
".*"
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
bound
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
bottom
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
top
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
type zeroGradient;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,3 +1,4 @@
|
||||
solid C
|
||||
facet normal 0.0 1.0 0.0
|
||||
outer loop
|
||||
vertex 4.065 0.5475 0.25
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#-------------------------------*- makefile -*---------------------------------
|
||||
WM_VERSION = OPENFOAM=1904
|
||||
WM_VERSION = OPENFOAM=1906
|
||||
|
||||
AR = ar
|
||||
ARFLAGS = cr
|
||||
|
||||
Reference in New Issue
Block a user