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
|
patch=0
|
||||||
|
|||||||
@ -33,9 +33,9 @@ Please see the relevant guides:
|
|||||||
[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
[repo openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
||||||
[repo third]: https://develop.openfoam.com/Development/ThirdParty-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-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-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 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-readme]: https://develop.openfoam.com/Development/ThirdParty-plus/blob/develop/README.md
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
|
vsm.mapToVolume(Cs, Cvf.boundaryFieldRef());
|
||||||
Cvf.write();
|
//Cvf.write();
|
||||||
|
|
||||||
volVectorField U
|
volVectorField U
|
||||||
(
|
(
|
||||||
@ -33,4 +33,4 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
vsm.mapToVolume(Us, U.boundaryFieldRef());
|
vsm.mapToVolume(Us, U.boundaryFieldRef());
|
||||||
U.write();
|
//U.write();
|
||||||
|
|||||||
@ -30,6 +30,7 @@ License
|
|||||||
#include "LLTMatrix.H"
|
#include "LLTMatrix.H"
|
||||||
#include "Random.H"
|
#include "Random.H"
|
||||||
#include "SortList.H"
|
#include "SortList.H"
|
||||||
|
#include "Switch.H"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
@ -237,22 +238,14 @@ int main(int argc, char *argv[])
|
|||||||
Info<< "# SquareMatrix<scalar> example:" << nl;
|
Info<< "# SquareMatrix<scalar> example:" << nl;
|
||||||
printMatrix(Info, S) << 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
|
Info
|
||||||
<< "Number of rows =" << tab << mRows << nl
|
<< "Number of rows =" << tab << S.m() << nl
|
||||||
<< "Number of columns = " << tab << nCols << nl
|
<< "Number of columns = " << tab << S.n() << nl
|
||||||
<< "Number of elements = " << tab << size << nl
|
<< "Number of elements = " << tab << S.size() << nl
|
||||||
<< "Number of rows/columns = " << tab << sizes << nl
|
<< "Number of rows/columns = " << tab << S.sizes() << nl
|
||||||
<< "Matrix is empty = " << tab << isEmpty << nl
|
<< "Matrix is empty = " << tab << Switch(S.empty()) << nl
|
||||||
<< "Constant pointer = " << tab << constPointer << nl
|
<< "Constant pointer = " << tab << uintptr_t(S.cdata()) << nl
|
||||||
<< "Pointer = " << tab << pointer << nl
|
<< "Pointer = " << tab << uintptr_t(S.data()) << nl
|
||||||
<< nl;
|
<< nl;
|
||||||
|
|
||||||
horizontalLine();
|
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].
|
[build guide][link third-build].
|
||||||
|
|
||||||
Some known build issues related to specific compiler and VTK library versions
|
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,
|
If you need to change the default versions for third-party libraries,
|
||||||
or use system libraries for some components, please some additional
|
or use system libraries for some components, please some additional
|
||||||
@ -94,10 +95,10 @@ simpleFoam
|
|||||||
OpenFOAM ships with ParaView sources for post-processing OpenFOAM
|
OpenFOAM ships with ParaView sources for post-processing OpenFOAM
|
||||||
field results. However, the paraview version distributed with
|
field results. However, the paraview version distributed with
|
||||||
the operating system or a [binary package][download ParaView]
|
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
|
If you do wish to compile ParaView from source, it is recommended
|
||||||
that you do so *after* completing an initial compilation of OpenFOAM.
|
that you do so ***after*** completing an initial compilation of OpenFOAM.
|
||||||
This gets the process started much more quickly. At a later stage,
|
This gets the process started much more quickly. At a later stage,
|
||||||
OpenFOAM can be updated to compile with paraview. Only the affected
|
OpenFOAM can be updated to compile with paraview. Only the affected
|
||||||
applications will be compiled (eg, the blockMesh reader module) and the
|
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 openfoam]: https://develop.openfoam.com/Development/OpenFOAM-plus/
|
||||||
[repo third]: https://develop.openfoam.com/Development/ThirdParty-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-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 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-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)
|
- fftw: 3.3.7 (recommended - required for FFT-related functionality)
|
||||||
- paraview: 5.5.2 (for visualization)
|
- 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
|
To check the installed versions
|
||||||
|
|
||||||
| Program | To check the version |
|
| Program | To check the version |
|
||||||
|---------------|-----------------------|
|
|---------------|-----------------------|
|
||||||
| gcc | gcc --version |
|
| gcc | gcc --version |
|
||||||
|
| icc | icc --version |
|
||||||
| cmake | cmake --version |
|
| cmake | cmake --version |
|
||||||
| openmpi | orterun --version |
|
| openmpi | orterun --version |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Additional utilities
|
### Additional utilities
|
||||||
|
|
||||||
- flex
|
- flex
|
||||||
@ -81,7 +87,6 @@ sudo zypper install cmake boost-devel mpfr-devel gmp-devel openmpi-devel gnuplot
|
|||||||
|
|
||||||
This installs
|
This installs
|
||||||
|
|
||||||
|
|
||||||
| Program | openSUSE | Program version |
|
| Program | openSUSE | Program version |
|
||||||
|-----------|-----------|-----------------|
|
|-----------|-----------|-----------------|
|
||||||
| gcc | 15.0 | 7.4.3 |
|
| gcc | 15.0 | 7.4.3 |
|
||||||
@ -157,7 +162,7 @@ A partial list is given in the [ThirdParty requirements][link third-require].
|
|||||||
<!-- OpenFOAM -->
|
<!-- OpenFOAM -->
|
||||||
|
|
||||||
[link openfoam-readme]: https://develop.openfoam.com/Development/OpenFOAM-plus/blob/develop/README.md
|
[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-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 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-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)
|
# 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.
|
# the 'plain' VTK sources.
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
|
# 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)
|
# 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.
|
# the 'plain' VTK sources.
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
|
# USER EDITABLE PART: Changes made here may be lost with the next upgrade
|
||||||
|
|||||||
@ -68,7 +68,8 @@ InfoSwitches
|
|||||||
allowSystemOperations 1;
|
allowSystemOperations 1;
|
||||||
|
|
||||||
// Allow space character in fileName (use with caution)
|
// 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
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Convert api number (YYMM) -> 20YY. Eg, 1906 -> 2019
|
||||||
|
static inline int apiYear()
|
||||||
|
{
|
||||||
|
return 2000 + (foamVersion::api / 100);
|
||||||
|
}
|
||||||
|
|
||||||
// manpage Footer
|
// manpage Footer
|
||||||
static inline void printManFooter()
|
static inline void printManFooter()
|
||||||
{
|
{
|
||||||
@ -40,7 +46,7 @@ static inline void printManFooter()
|
|||||||
<< "Online documentation "
|
<< "Online documentation "
|
||||||
<< "https://www.openfoam.com/documentation/" << nl
|
<< "https://www.openfoam.com/documentation/" << nl
|
||||||
<< ".SH COPYRIGHT" << 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 * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
const char* const Foam::fileName::typeName = "fileName";
|
const char* const Foam::fileName::typeName = "fileName";
|
||||||
|
|
||||||
int Foam::fileName::debug(Foam::debug::debugSwitch(fileName::typeName, 0));
|
int Foam::fileName::debug(Foam::debug::debugSwitch(fileName::typeName, 0));
|
||||||
|
|
||||||
int Foam::fileName::allowSpaceInFileName
|
int Foam::fileName::allowSpaceInFileName
|
||||||
(
|
(
|
||||||
|
#ifdef _WIN32
|
||||||
|
Foam::debug::infoSwitch("allowSpaceInFileName", 1)
|
||||||
|
#else
|
||||||
Foam::debug::infoSwitch("allowSpaceInFileName", 0)
|
Foam::debug::infoSwitch("allowSpaceInFileName", 0)
|
||||||
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
const Foam::fileName Foam::fileName::null;
|
const Foam::fileName Foam::fileName::null;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -109,12 +109,13 @@ bool Foam::functionObjects::stabilityBlendingFactor::init(bool first)
|
|||||||
if (!residualPtr)
|
if (!residualPtr)
|
||||||
{
|
{
|
||||||
WarningInFunction
|
WarningInFunction
|
||||||
<< "Could not find residual file : " << residualName_
|
<< "Could not find residual field : " << residualName_
|
||||||
<< ".The residual mode won't be " << nl
|
<< ". The residual mode won't be " << nl
|
||||||
<< " considered for the blended field in the stability "
|
<< " considered for the blended field in the stability "
|
||||||
<< "blending factor. " << nl
|
<< "blending factor. " << nl
|
||||||
<< " Add the corresponding residual function object. " << nl
|
<< " Please add the corresponding 'solverInfo'"
|
||||||
<< " If the residual function object is already set "
|
<< " function object with 'writeResidualFields true'." << nl
|
||||||
|
<< " If the solverInfo function object is already enabled "
|
||||||
<< "you might need to wait " << nl
|
<< "you might need to wait " << nl
|
||||||
<< " for the first iteration."
|
<< " for the first iteration."
|
||||||
<< nl << endl;
|
<< nl << endl;
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015-2017 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2015-2019 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
@ -42,7 +42,6 @@ namespace Foam
|
|||||||
namespace functionObjects
|
namespace functionObjects
|
||||||
{
|
{
|
||||||
defineTypeNameAndDebug(forceCoeffs, 0);
|
defineTypeNameAndDebug(forceCoeffs, 0);
|
||||||
|
|
||||||
addToRunTimeSelectionTable(functionObject, forceCoeffs, dictionary);
|
addToRunTimeSelectionTable(functionObject, forceCoeffs, dictionary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -61,12 +60,23 @@ void Foam::functionObjects::forceCoeffs::createFiles()
|
|||||||
|
|
||||||
if (nBin_ > 1)
|
if (nBin_ > 1)
|
||||||
{
|
{
|
||||||
CmBinFilePtr_ = createFile("CmBin");
|
|
||||||
writeBinHeader("Moment coefficient bins", CmBinFilePtr_());
|
|
||||||
CdBinFilePtr_ = createFile("CdBin");
|
CdBinFilePtr_ = createFile("CdBin");
|
||||||
writeBinHeader("Drag coefficient bins", CdBinFilePtr_());
|
writeBinHeader("Drag coefficient bins", CdBinFilePtr_());
|
||||||
|
|
||||||
|
CsBinFilePtr_ = createFile("CsBin");
|
||||||
|
writeBinHeader("Side coefficient bins", CsBinFilePtr_());
|
||||||
|
|
||||||
ClBinFilePtr_ = createFile("ClBin");
|
ClBinFilePtr_ = createFile("ClBin");
|
||||||
writeBinHeader("Lift coefficient bins", ClBinFilePtr_());
|
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
|
) const
|
||||||
{
|
{
|
||||||
writeHeader(os, "Force coefficients");
|
writeHeader(os, "Force coefficients");
|
||||||
writeHeaderValue(os, "liftDir", liftDir_);
|
writeHeaderValue(os, "dragDir", coordSys_.e1());
|
||||||
writeHeaderValue(os, "dragDir", dragDir_);
|
writeHeaderValue(os, "sideDir", coordSys_.e2());
|
||||||
writeHeaderValue(os, "pitchAxis", pitchAxis_);
|
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, "magUInf", magUInf_);
|
||||||
writeHeaderValue(os, "lRef", lRef_);
|
writeHeaderValue(os, "lRef", lRef_);
|
||||||
writeHeaderValue(os, "Aref", Aref_);
|
writeHeaderValue(os, "Aref", Aref_);
|
||||||
writeHeaderValue(os, "CofR", coordSys_.origin());
|
writeHeaderValue(os, "CofR", coordSys_.origin());
|
||||||
writeHeader(os, "");
|
writeHeader(os, "");
|
||||||
writeCommented(os, "Time");
|
writeCommented(os, "Time");
|
||||||
writeTabbed(os, "Cm");
|
|
||||||
writeTabbed(os, "Cd");
|
writeTabbed(os, "Cd");
|
||||||
|
writeTabbed(os, "Cs");
|
||||||
writeTabbed(os, "Cl");
|
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(f)");
|
||||||
writeTabbed(os, "Cl(r)");
|
writeTabbed(os, "Cl(r)");
|
||||||
os << endl;
|
os << endl;
|
||||||
@ -135,9 +155,9 @@ void Foam::functionObjects::forceCoeffs::writeBinHeader
|
|||||||
writeHeader(os, "");
|
writeHeader(os, "");
|
||||||
writeCommented(os, "Time");
|
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 + "total");
|
||||||
writeTabbed(os, jn + "pressure");
|
writeTabbed(os, jn + "pressure");
|
||||||
writeTabbed(os, jn + "viscous");
|
writeTabbed(os, jn + "viscous");
|
||||||
@ -163,13 +183,13 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
scalar pressure = sum(coeff[0]);
|
const scalar pressure = sum(coeff[0]);
|
||||||
scalar viscous = sum(coeff[1]);
|
const scalar viscous = sum(coeff[1]);
|
||||||
scalar porous = sum(coeff[2]);
|
const scalar porous = sum(coeff[2]);
|
||||||
scalar total = pressure + viscous + porous;
|
const scalar total = pressure + viscous + porous;
|
||||||
|
|
||||||
Info<< " " << title << " : " << total << token::TAB
|
Info<< " " << title << " : " << total << token::TAB
|
||||||
<< "("
|
<< '('
|
||||||
<< "pressure: " << pressure << token::TAB
|
<< "pressure: " << pressure << token::TAB
|
||||||
<< "viscous: " << viscous;
|
<< "viscous: " << viscous;
|
||||||
|
|
||||||
@ -178,7 +198,7 @@ void Foam::functionObjects::forceCoeffs::writeIntegratedData
|
|||||||
Info<< token::TAB << "porous: " << porous;
|
Info<< token::TAB << "porous: " << porous;
|
||||||
}
|
}
|
||||||
|
|
||||||
Info<< ")" << endl;
|
Info<< ')' << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -190,7 +210,7 @@ void Foam::functionObjects::forceCoeffs::writeBinData
|
|||||||
{
|
{
|
||||||
writeTime(os);
|
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];
|
scalar total = coeffs[0][bini] + coeffs[1][bini] + coeffs[2][bini];
|
||||||
|
|
||||||
@ -216,45 +236,35 @@ Foam::functionObjects::forceCoeffs::forceCoeffs
|
|||||||
)
|
)
|
||||||
:
|
:
|
||||||
forces(name, runTime, dict),
|
forces(name, runTime, dict),
|
||||||
liftDir_(Zero),
|
magUInf_(Zero),
|
||||||
dragDir_(Zero),
|
lRef_(Zero),
|
||||||
pitchAxis_(Zero),
|
Aref_(Zero),
|
||||||
magUInf_(0.0),
|
|
||||||
lRef_(0.0),
|
|
||||||
Aref_(0.0),
|
|
||||||
coeffFilePtr_(),
|
coeffFilePtr_(),
|
||||||
CmBinFilePtr_(),
|
|
||||||
CdBinFilePtr_(),
|
CdBinFilePtr_(),
|
||||||
ClBinFilePtr_()
|
CsBinFilePtr_(),
|
||||||
|
ClBinFilePtr_(),
|
||||||
|
CmRollBinFilePtr_(),
|
||||||
|
CmPitchBinFilePtr_(),
|
||||||
|
CmYawBinFilePtr_()
|
||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
|
setCoordinateSystem(dict, "liftDir", "dragDir");
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
Foam::functionObjects::forceCoeffs::~forceCoeffs()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
|
bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
|
||||||
{
|
{
|
||||||
forces::read(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
|
// Free stream velocity magnitude
|
||||||
dict.readEntry("magUInf", magUInf_);
|
dict.readEntry("magUInf", magUInf_);
|
||||||
|
|
||||||
// If case is compressible we must read rhoInf (store in rhoRef_) to
|
// If case is compressible we must read rhoInf (store in rhoRef_) to
|
||||||
// calculate the reference dynamic pressure
|
// calculate the reference dynamic pressure
|
||||||
// - note: for incompressible, rhoRef_ is already initialised
|
// Note: for incompressible, rhoRef_ is already initialised
|
||||||
if (rhoName_ != "rhoInf")
|
if (rhoName_ != "rhoInf")
|
||||||
{
|
{
|
||||||
dict.readEntry("rhoInf", rhoRef_);
|
dict.readEntry("rhoInf", rhoRef_);
|
||||||
@ -315,55 +325,94 @@ bool Foam::functionObjects::forceCoeffs::execute()
|
|||||||
|
|
||||||
createFiles();
|
createFiles();
|
||||||
|
|
||||||
scalar pDyn = 0.5*rhoRef_*magUInf_*magUInf_;
|
|
||||||
|
|
||||||
// Storage for pressure, viscous and porous contributions to coeffs
|
// Storage for pressure, viscous and porous contributions to coeffs
|
||||||
List<Field<scalar>> momentCoeffs(3);
|
|
||||||
List<Field<scalar>> dragCoeffs(3);
|
List<Field<scalar>> dragCoeffs(3);
|
||||||
|
List<Field<scalar>> sideCoeffs(3);
|
||||||
List<Field<scalar>> liftCoeffs(3);
|
List<Field<scalar>> liftCoeffs(3);
|
||||||
|
List<Field<scalar>> rollMomentCoeffs(3);
|
||||||
|
List<Field<scalar>> pitchMomentCoeffs(3);
|
||||||
|
List<Field<scalar>> yawMomentCoeffs(3);
|
||||||
|
|
||||||
forAll(liftCoeffs, i)
|
forAll(liftCoeffs, i)
|
||||||
{
|
{
|
||||||
momentCoeffs[i].setSize(nBin_);
|
|
||||||
dragCoeffs[i].setSize(nBin_);
|
dragCoeffs[i].setSize(nBin_);
|
||||||
|
sideCoeffs[i].setSize(nBin_);
|
||||||
liftCoeffs[i].setSize(nBin_);
|
liftCoeffs[i].setSize(nBin_);
|
||||||
|
rollMomentCoeffs[i].setSize(nBin_);
|
||||||
|
pitchMomentCoeffs[i].setSize(nBin_);
|
||||||
|
yawMomentCoeffs[i].setSize(nBin_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate coefficients
|
// Calculate coefficients
|
||||||
scalar CmTot = 0;
|
|
||||||
scalar CdTot = 0;
|
scalar CdTot = 0;
|
||||||
|
scalar CsTot = 0;
|
||||||
scalar ClTot = 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)
|
forAll(liftCoeffs, i)
|
||||||
{
|
{
|
||||||
momentCoeffs[i] = (moment_[i] & pitchAxis_)/(Aref_*pDyn*lRef_);
|
const Field<vector> localForce(coordSys_.localVector(force_[i]));
|
||||||
dragCoeffs[i] = (force_[i] & dragDir_)/(Aref_*pDyn);
|
const Field<vector> localMoment(coordSys_.localVector(moment_[i]));
|
||||||
liftCoeffs[i] = (force_[i] & liftDir_)/(Aref_*pDyn);
|
|
||||||
|
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]);
|
CdTot += sum(dragCoeffs[i]);
|
||||||
|
CsTot += sum(sideCoeffs[i]);
|
||||||
ClTot += sum(liftCoeffs[i]);
|
ClTot += sum(liftCoeffs[i]);
|
||||||
|
CmRollTot += sum(rollMomentCoeffs[i]);
|
||||||
|
CmPitchTot += sum(pitchMomentCoeffs[i]);
|
||||||
|
CmYawTot += sum(yawMomentCoeffs[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
scalar ClfTot = ClTot/2.0 + CmTot;
|
// Single contributions to the front and rear
|
||||||
scalar ClrTot = ClTot/2.0 - CmTot;
|
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
|
Log << type() << " " << name() << " execute:" << nl
|
||||||
<< " Coefficients" << nl;
|
<< " Coefficients" << nl;
|
||||||
|
|
||||||
writeIntegratedData("Cm", momentCoeffs);
|
|
||||||
writeIntegratedData("Cd", dragCoeffs);
|
writeIntegratedData("Cd", dragCoeffs);
|
||||||
|
writeIntegratedData("Cs", sideCoeffs);
|
||||||
writeIntegratedData("Cl", liftCoeffs);
|
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
|
Log << " Cl(f) : " << ClfTot << nl
|
||||||
<< " Cl(r) : " << ClrTot << nl
|
<< " Cl(r) : " << ClrTot << nl;
|
||||||
<< endl;
|
|
||||||
|
|
||||||
if (writeToFile())
|
if (writeToFile())
|
||||||
{
|
{
|
||||||
writeTime(coeffFilePtr_());
|
writeTime(coeffFilePtr_());
|
||||||
coeffFilePtr_()
|
coeffFilePtr_()
|
||||||
<< tab << CmTot << tab << CdTot
|
<< tab << CdTot << tab << CsTot << tab << ClTot
|
||||||
<< tab << ClTot << tab << ClfTot << tab << ClrTot << endl;
|
<< tab << CmRollTot << tab << CmPitchTot << tab << CmYawTot
|
||||||
|
<< tab << CdfTot << tab << CdrTot
|
||||||
|
<< tab << CsfTot << tab << CsrTot
|
||||||
|
<< tab << ClfTot << tab << ClrTot << endl;
|
||||||
|
|
||||||
if (nBin_ > 1)
|
if (nBin_ > 1)
|
||||||
{
|
{
|
||||||
@ -371,26 +420,41 @@ bool Foam::functionObjects::forceCoeffs::execute()
|
|||||||
{
|
{
|
||||||
forAll(liftCoeffs, i)
|
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];
|
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(dragCoeffs, CdBinFilePtr_());
|
||||||
|
writeBinData(sideCoeffs, CsBinFilePtr_());
|
||||||
writeBinData(liftCoeffs, ClBinFilePtr_());
|
writeBinData(liftCoeffs, ClBinFilePtr_());
|
||||||
writeBinData(momentCoeffs, CmBinFilePtr_());
|
writeBinData(rollMomentCoeffs, CmRollBinFilePtr_());
|
||||||
|
writeBinData(pitchMomentCoeffs, CmPitchBinFilePtr_());
|
||||||
|
writeBinData(yawMomentCoeffs, CmYawBinFilePtr_());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write state/results information
|
// Write state/results information
|
||||||
{
|
{
|
||||||
setResult("Cm", CmTot);
|
|
||||||
setResult("Cd", CdTot);
|
setResult("Cd", CdTot);
|
||||||
|
setResult("Cs", CsTot);
|
||||||
setResult("Cl", ClTot);
|
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(f)", ClfTot);
|
||||||
setResult("Cl(r)", ClrTot);
|
setResult("Cl(r)", ClrTot);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2015 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2019 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
| Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||||
@ -30,9 +30,18 @@ Group
|
|||||||
grpForcesFunctionObjects
|
grpForcesFunctionObjects
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Extends the forces functionObject by providing lift, drag and moment
|
Extends the \c forces functionObject by providing coefficients for:
|
||||||
coefficients. The data can optionally be output into bins, defined in a
|
- drag, side and lift forces (Cd, Cs, and Cl)
|
||||||
given direction.
|
- 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:
|
The binned data provides the total and consitituent components per bin:
|
||||||
- total coefficient
|
- total coefficient
|
||||||
@ -43,9 +52,12 @@ Description
|
|||||||
Data is written into multiple files in the
|
Data is written into multiple files in the
|
||||||
postProcessing/\<functionObjectName\> directory:
|
postProcessing/\<functionObjectName\> directory:
|
||||||
- coefficient.dat : integrated coefficients over all geometries
|
- coefficient.dat : integrated coefficients over all geometries
|
||||||
- CmBin.dat : moment coefficient bins
|
|
||||||
- CdBin.dat : drag coefficient bins
|
- CdBin.dat : drag coefficient bins
|
||||||
|
- CsBin.dat : side coefficient bins
|
||||||
- ClBin.dat : lift 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
|
Usage
|
||||||
Example of function object specification:
|
Example of function object specification:
|
||||||
@ -58,12 +70,14 @@ Usage
|
|||||||
log yes;
|
log yes;
|
||||||
writeFields yes;
|
writeFields yes;
|
||||||
patches (walls);
|
patches (walls);
|
||||||
liftDir (0 1 0);
|
|
||||||
dragDir (-1 0 0);
|
// input keywords for directions of force/moment coefficients
|
||||||
pitchAxis (0 0 1);
|
// refer below for options, and relations
|
||||||
|
|
||||||
magUInf 100;
|
magUInf 100;
|
||||||
lRef 3.5;
|
lRef 3.5;
|
||||||
Aref 2.2;
|
Aref 2.2;
|
||||||
|
porosity no;
|
||||||
|
|
||||||
binData
|
binData
|
||||||
{
|
{
|
||||||
@ -76,26 +90,65 @@ Usage
|
|||||||
|
|
||||||
Where the entries comprise:
|
Where the entries comprise:
|
||||||
\table
|
\table
|
||||||
Property | Description | Required | Default value
|
Property | Description | Required | Default
|
||||||
type | Type name: forceCoeffs | yes |
|
type | Type name: forceCoeffs | yes |
|
||||||
log | Write force data to standard output | no | no
|
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 |
|
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 |
|
magUInf | Free stream velocity magnitude | yes |
|
||||||
lRef | Reference length scale for moment calculations | yes |
|
lRef | Reference length scale for moment calculations | yes |
|
||||||
Aref | Reference area | yes |
|
Aref | Reference area | yes |
|
||||||
porosity | Flag to include porosity contributions | no | no
|
porosity | Include porosity contributions | no | false
|
||||||
\endtable
|
\endtable
|
||||||
|
|
||||||
Bin data is optional, but if the dictionary is present, the entries must
|
Bin data is optional, but if the dictionary is present, the entries must
|
||||||
be defined according o
|
be defined according to following:
|
||||||
\table
|
\table
|
||||||
nBin | number of data bins | yes |
|
nBin | Number of data bins | yes |
|
||||||
direction | direction along which bins are defined | yes |
|
direction | Direction along which bins are defined | yes |
|
||||||
cumulative | bin data accumulated with incresing distance | 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
|
\endtable
|
||||||
|
|
||||||
See also
|
See also
|
||||||
@ -130,30 +183,18 @@ class forceCoeffs
|
|||||||
{
|
{
|
||||||
// Private data
|
// Private data
|
||||||
|
|
||||||
// Force coefficient geometry
|
|
||||||
|
|
||||||
//- Lift
|
|
||||||
vector liftDir_;
|
|
||||||
|
|
||||||
//- Drag
|
|
||||||
vector dragDir_;
|
|
||||||
|
|
||||||
//- Pitch
|
|
||||||
vector pitchAxis_;
|
|
||||||
|
|
||||||
|
|
||||||
// Free-stream conditions
|
// Free-stream conditions
|
||||||
|
|
||||||
//- Velocity magnitude
|
//- Free-stream velocity magnitude
|
||||||
scalar magUInf_;
|
scalar magUInf_;
|
||||||
|
|
||||||
|
|
||||||
// Reference scales
|
// Reference scales
|
||||||
|
|
||||||
//- Length
|
//- Reference length [m]
|
||||||
scalar lRef_;
|
scalar lRef_;
|
||||||
|
|
||||||
//- Area
|
//- Reference area [m^2]
|
||||||
scalar Aref_;
|
scalar Aref_;
|
||||||
|
|
||||||
|
|
||||||
@ -162,15 +203,24 @@ class forceCoeffs
|
|||||||
//- Integrated coefficients
|
//- Integrated coefficients
|
||||||
autoPtr<OFstream> coeffFilePtr_;
|
autoPtr<OFstream> coeffFilePtr_;
|
||||||
|
|
||||||
//- Moment coefficient
|
|
||||||
autoPtr<OFstream> CmBinFilePtr_;
|
|
||||||
|
|
||||||
//- Drag coefficient
|
//- Drag coefficient
|
||||||
autoPtr<OFstream> CdBinFilePtr_;
|
autoPtr<OFstream> CdBinFilePtr_;
|
||||||
|
|
||||||
|
//- Side coefficient
|
||||||
|
autoPtr<OFstream> CsBinFilePtr_;
|
||||||
|
|
||||||
//- Lift coefficient
|
//- Lift coefficient
|
||||||
autoPtr<OFstream> ClBinFilePtr_;
|
autoPtr<OFstream> ClBinFilePtr_;
|
||||||
|
|
||||||
|
//- Roll moment coefficient
|
||||||
|
autoPtr<OFstream> CmRollBinFilePtr_;
|
||||||
|
|
||||||
|
//- Pitch moment coefficient
|
||||||
|
autoPtr<OFstream> CmPitchBinFilePtr_;
|
||||||
|
|
||||||
|
//- Yaw moment coefficient
|
||||||
|
autoPtr<OFstream> CmYawBinFilePtr_;
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
@ -223,7 +273,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~forceCoeffs();
|
virtual ~forceCoeffs() = default;
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
@ -231,7 +281,7 @@ public:
|
|||||||
//- Read the forces data
|
//- Read the forces data
|
||||||
virtual bool read(const dictionary&);
|
virtual bool read(const dictionary&);
|
||||||
|
|
||||||
//- Execute, currently does nothing
|
//- Execute
|
||||||
virtual bool execute();
|
virtual bool execute();
|
||||||
|
|
||||||
//- Write the forces
|
//- Write the forces
|
||||||
@ -249,3 +299,4 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|
||||||
|
|||||||
@ -71,22 +71,6 @@ void Foam::functionObjects::forces::createFiles()
|
|||||||
momentBinFilePtr_ = createFile("momentBin");
|
momentBinFilePtr_ = createFile("momentBin");
|
||||||
writeBinHeader("Moment", momentBinFilePtr_());
|
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()
|
void Foam::functionObjects::forces::initialise()
|
||||||
{
|
{
|
||||||
@ -586,41 +613,20 @@ void Foam::functionObjects::forces::writeForces()
|
|||||||
writeIntegratedForceMoment
|
writeIntegratedForceMoment
|
||||||
(
|
(
|
||||||
"forces",
|
"forces",
|
||||||
force_[0],
|
coordSys_.localVector(force_[0]),
|
||||||
force_[1],
|
coordSys_.localVector(force_[1]),
|
||||||
force_[2],
|
coordSys_.localVector(force_[2]),
|
||||||
forceFilePtr_
|
forceFilePtr_
|
||||||
);
|
);
|
||||||
|
|
||||||
writeIntegratedForceMoment
|
writeIntegratedForceMoment
|
||||||
(
|
(
|
||||||
"moments",
|
"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_[0]),
|
||||||
coordSys_.localVector(moment_[1]),
|
coordSys_.localVector(moment_[1]),
|
||||||
coordSys_.localVector(moment_[2]),
|
coordSys_.localVector(moment_[2]),
|
||||||
localMomentFilePtr_
|
momentFilePtr_
|
||||||
);
|
);
|
||||||
}
|
|
||||||
|
|
||||||
Log << endl;
|
Log << endl;
|
||||||
}
|
}
|
||||||
@ -673,11 +679,6 @@ void Foam::functionObjects::forces::writeBinnedForceMoment
|
|||||||
|
|
||||||
void Foam::functionObjects::forces::writeBins()
|
void Foam::functionObjects::forces::writeBins()
|
||||||
{
|
{
|
||||||
writeBinnedForceMoment(force_, forceBinFilePtr_);
|
|
||||||
writeBinnedForceMoment(moment_, momentBinFilePtr_);
|
|
||||||
|
|
||||||
if (localSystem_)
|
|
||||||
{
|
|
||||||
List<Field<vector>> lf(3);
|
List<Field<vector>> lf(3);
|
||||||
List<Field<vector>> lm(3);
|
List<Field<vector>> lm(3);
|
||||||
lf[0] = coordSys_.localVector(force_[0]);
|
lf[0] = coordSys_.localVector(force_[0]);
|
||||||
@ -687,9 +688,8 @@ void Foam::functionObjects::forces::writeBins()
|
|||||||
lm[1] = coordSys_.localVector(moment_[1]);
|
lm[1] = coordSys_.localVector(moment_[1]);
|
||||||
lm[2] = coordSys_.localVector(moment_[2]);
|
lm[2] = coordSys_.localVector(moment_[2]);
|
||||||
|
|
||||||
writeBinnedForceMoment(lf, localForceBinFilePtr_);
|
writeBinnedForceMoment(lf, forceBinFilePtr_);
|
||||||
writeBinnedForceMoment(lm, localMomentBinFilePtr_);
|
writeBinnedForceMoment(lm, momentBinFilePtr_);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -711,10 +711,6 @@ Foam::functionObjects::forces::forces
|
|||||||
momentFilePtr_(),
|
momentFilePtr_(),
|
||||||
forceBinFilePtr_(),
|
forceBinFilePtr_(),
|
||||||
momentBinFilePtr_(),
|
momentBinFilePtr_(),
|
||||||
localForceFilePtr_(),
|
|
||||||
localMomentFilePtr_(),
|
|
||||||
localForceBinFilePtr_(),
|
|
||||||
localMomentBinFilePtr_(),
|
|
||||||
patchSet_(),
|
patchSet_(),
|
||||||
pName_(word::null),
|
pName_(word::null),
|
||||||
UName_(word::null),
|
UName_(word::null),
|
||||||
@ -724,7 +720,6 @@ Foam::functionObjects::forces::forces
|
|||||||
rhoRef_(VGREAT),
|
rhoRef_(VGREAT),
|
||||||
pRef_(0),
|
pRef_(0),
|
||||||
coordSys_(),
|
coordSys_(),
|
||||||
localSystem_(false),
|
|
||||||
porosity_(false),
|
porosity_(false),
|
||||||
nBin_(1),
|
nBin_(1),
|
||||||
binDir_(Zero),
|
binDir_(Zero),
|
||||||
@ -738,6 +733,7 @@ Foam::functionObjects::forces::forces
|
|||||||
if (readFields)
|
if (readFields)
|
||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
|
setCoordinateSystem(dict);
|
||||||
Log << endl;
|
Log << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -759,10 +755,6 @@ Foam::functionObjects::forces::forces
|
|||||||
momentFilePtr_(),
|
momentFilePtr_(),
|
||||||
forceBinFilePtr_(),
|
forceBinFilePtr_(),
|
||||||
momentBinFilePtr_(),
|
momentBinFilePtr_(),
|
||||||
localForceFilePtr_(),
|
|
||||||
localMomentFilePtr_(),
|
|
||||||
localForceBinFilePtr_(),
|
|
||||||
localMomentBinFilePtr_(),
|
|
||||||
patchSet_(),
|
patchSet_(),
|
||||||
pName_(word::null),
|
pName_(word::null),
|
||||||
UName_(word::null),
|
UName_(word::null),
|
||||||
@ -772,7 +764,6 @@ Foam::functionObjects::forces::forces
|
|||||||
rhoRef_(VGREAT),
|
rhoRef_(VGREAT),
|
||||||
pRef_(0),
|
pRef_(0),
|
||||||
coordSys_(),
|
coordSys_(),
|
||||||
localSystem_(false),
|
|
||||||
porosity_(false),
|
porosity_(false),
|
||||||
nBin_(1),
|
nBin_(1),
|
||||||
binDir_(Zero),
|
binDir_(Zero),
|
||||||
@ -786,6 +777,7 @@ Foam::functionObjects::forces::forces
|
|||||||
if (readFields)
|
if (readFields)
|
||||||
{
|
{
|
||||||
read(dict);
|
read(dict);
|
||||||
|
setCoordinateSystem(dict);
|
||||||
Log << endl;
|
Log << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -843,32 +835,6 @@ bool Foam::functionObjects::forces::read(const dictionary& dict)
|
|||||||
Info<< " Reference pressure (pRef) set to " << pRef_ << endl;
|
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_);
|
dict.readIfPresent("porosity", porosity_);
|
||||||
if (porosity_)
|
if (porosity_)
|
||||||
|
|||||||
@ -192,18 +192,6 @@ protected:
|
|||||||
//- Moment bins
|
//- Moment bins
|
||||||
autoPtr<OFstream> momentBinFilePtr_;
|
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
|
// Read from dictionary
|
||||||
|
|
||||||
@ -234,9 +222,6 @@ protected:
|
|||||||
//- Coordinate system used when evaluting forces/moments
|
//- Coordinate system used when evaluting forces/moments
|
||||||
coordSystem::cartesian coordSys_;
|
coordSystem::cartesian coordSys_;
|
||||||
|
|
||||||
//- Flag to indicate whether we are using a local coordinates
|
|
||||||
bool localSystem_;
|
|
||||||
|
|
||||||
//- Flag to include porosity effects
|
//- Flag to include porosity effects
|
||||||
bool porosity_;
|
bool porosity_;
|
||||||
|
|
||||||
@ -283,6 +268,14 @@ protected:
|
|||||||
//- Write header for binned data
|
//- Write header for binned data
|
||||||
void writeBinHeader(const word& header, Ostream& os) const;
|
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
|
//- Initialise the fields
|
||||||
void initialise();
|
void initialise();
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ Description
|
|||||||
\heading Dictionary parameters
|
\heading Dictionary parameters
|
||||||
\table
|
\table
|
||||||
Property | Description | Required | Default
|
Property | Description | Required | Default
|
||||||
type | code / searchableCone | selector |
|
type | cone / searchableCone | selector |
|
||||||
point1 | coordinate of endpoint | yes |
|
point1 | coordinate of endpoint | yes |
|
||||||
radius1 | radius at point1 | yes |
|
radius1 | radius at point1 | yes |
|
||||||
innerRadius1| inner radius at point1 | no | 0
|
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
|
cd ${0%/*} || exit 1 # Run from this directory
|
||||||
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions # Tutorial clean functions
|
||||||
|
|
||||||
cleanTimeDirectories
|
cleanCase
|
||||||
|
|
||||||
cleanPostProcessing
|
|
||||||
|
|
||||||
cleanFaMesh
|
cleanFaMesh
|
||||||
|
|
||||||
rm -rf processor*
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|||||||
@ -10,7 +10,7 @@ residuals
|
|||||||
{
|
{
|
||||||
type solverInfo;
|
type solverInfo;
|
||||||
libs ("libutilityFunctionObjects.so");
|
libs ("libutilityFunctionObjects.so");
|
||||||
writeFields true;
|
writeResidualFields true;
|
||||||
writeControl outputTime;
|
writeControl outputTime;
|
||||||
fields (p);
|
fields (p);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,44 +10,20 @@ FoamFile
|
|||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format ascii;
|
||||||
class volScalarField;
|
class volScalarField;
|
||||||
location "0";
|
object MangrovesIndex;
|
||||||
object Cvf;
|
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
dimensions [0 -1 0 0 0 0 0];
|
dimensions [0 0 0 0 0 0 0];
|
||||||
|
|
||||||
|
|
||||||
internalField uniform 0;
|
internalField uniform 0;
|
||||||
|
|
||||||
boundaryField
|
boundaryField
|
||||||
{
|
{
|
||||||
inlet
|
".*"
|
||||||
{
|
{
|
||||||
type calculated;
|
type zeroGradient;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -1,3 +1,4 @@
|
|||||||
|
solid C
|
||||||
facet normal 0.0 1.0 0.0
|
facet normal 0.0 1.0 0.0
|
||||||
outer loop
|
outer loop
|
||||||
vertex 4.065 0.5475 0.25
|
vertex 4.065 0.5475 0.25
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
#-------------------------------*- makefile -*---------------------------------
|
#-------------------------------*- makefile -*---------------------------------
|
||||||
WM_VERSION = OPENFOAM=1904
|
WM_VERSION = OPENFOAM=1906
|
||||||
|
|
||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = cr
|
ARFLAGS = cr
|
||||||
|
|||||||
Reference in New Issue
Block a user