Releases: WENO-OF/WENOEXT
WENO Version 4.1
Improve calculating the Jacobi matrices if blaze library
is deactivated. The reconstruct mesh works for collated and uncollated
file I/O.
Eigenvalue Calculation for Jacobi Matrix
If the blaze library is deactivated own functions in mathFunctionsWENO.H are
used. These functions can now calculate the real Eigenvalues of any 3x3
matrix using QR decomposition. This mirrors the behavior of the blaze library.
Collated and Uncollated File I/O
The reconstruct mesh function can handle collated and uncollated file I/O
options of OpenFOAM by using MPI send/recv to gather the mesh information of
neighboring processors.
Output is still written in an uncollated manner, with processor0,..., to processorN
Update Catch2
Catch2 is updated to version 3 and implemented as a git submodule instead of using
the single header implementation.
WENO Version 4.0
Version 4.0
Expanding the options with CMake adding new parallel compilation option and options for LAPACK library or AVX support. Improving run time performance and generation of WENOBase as well as stability by using pivoting of the inverse Jacobi matrix.
Mesh and Decompositon
- Works now also for cases with collated file IO when the mesh is also decomposed with '-fileHandler uncollated'.
- Can handle meshes with refinement zones
Integration of Blaze Library
- Blaze::staticMatrix and blaze::dynamicMatrix are not also used in the geometryWENO functions
- If LAPACK library is enabled the blaze functions for LU decomposition, calculation of the determinant and eigen values are used
MPI Communication
For highly decomposed cases (processor > 2000) most of the time is spent in the communication of the WENOCoeff::collectData() function. For most MPI applications it is benefitial to use non blocking communication in combination with frequent calls of MPI_Test to move the inter processor communication. However, for unknown reasons the blocking communication with a MPI_Waitall is the fastest option. This is the same as using the UPstream buffers and the PstreamBuffers::finishedSends() which calls also an MPI_Waitall. This makes the communication blocked even though non-blocking is selected. OpenFOAM is here deceiving.
OpenFOAM Versions
- Add support for OpenFOAM v2012
User Handling
Compilation with ./Allwmake can handle user flags. A help message
can be displayed with ./Allwmake -h or ./Allwmake --help
Possible option are:
-j|--parallel <# cores> Parallel compilation with the provided
number of cores. If no number is provided the value
is determined automatically
-f|--force Force compilation on the master branch for a dirty
git repository
CMake Build Type
Three different CMake build types are available and can be selected with
./Allwmake -DCMAKE_BUILD_TYPE=
CMAKE_BUILD_TYPE | Descritpion |
---|---|
Default | Compiles the library, utilities and all tests |
Release | Compiles only the library and utilities |
Debug | Switches on the FULLDEBUG flag of OpenFOAM and the debugging flag '-g' |
Export of CMake Target
CMake exports also a target which is by default installed into the build directory in the WENOExt repo. The install directory can be changed by setting the CMAKE_INSTALL_PREFIX
variable. With the CMake target it is very easy to include the WENOExt library in other CMake projects with
include(${CMAKE_INSTALL_PREFIX}/lib/cmake/WENOEXT/WENOEXT.cmake)
Add Performance Check Repo
The performance of some of the WENO functions can be checked with the WENO-PerformanceTest. The repo also provides some basic python scripts to generate run time statistics.
Open Issues
- Reconstruction of the global mesh for decomposed meshes with the collated file IO option
- MPI improvements for send and receive. Further investigation why this is so time consuming
WENO Version 3.1
WENO Version 3.1
In version 3.1 compilation, testing and scalar transport are improved. Compilation of the library is now handled with CMake instead OpenFOAM wmake to simplify the extension to other third party libraries and the usage of third party code.
A major change has been applied to the stencil collection algorithm which now uses a stencil based compact sorting instead of the previous naive cell based approach.
Stencil Collection Algorithm
The stencil collection has been rewritten to use a stencil based compact approach instead of a naive cell based version [1]. The stencil based compact approach delivers more compact stencils and improved matrix conditions.
Additionally, the stencils are sorted consistently for different cells with the same shape. This means that the order of cells in a stencil do no longer depend on the randomly chosen base point but are consistently sorted, also for cells with the same distance. Before, the order of cells with the same distance to the base point have been random, now it is deterministic. This allows the matrix data bank system to recognize that cells with equal stencils have the same matrix leading to an improved memory reduction.
Specialized Scalar Transport Scheme
To transport a scalar between 0 and 1 a specialized version is implemented called WENOUpwindFit01
, following the naming convention of OpenFOAM. This scheme uses the proposed limiter of Zhang and Shu [2].
The general WENO scheme uses a cell limited approach if the limiter option is enabled with WENOUpwindFit 3 1
.
Compilation with CMake
The library is now compiled with CMake giving more flexibility than the OpenFOAM wmake version. Further, it simplifies the usage of the library in other CMake projects and to include additional third party code into the library.
Testing and Continuous Integration
More test cases have been added and the test program has been generalized to work for the different test cases. In addition, the test cases are executed by GitHub Actions for the OpenFOAM versions 5.x, 7, 8 and OpenFOAM v1912. The passing of the tests is displayed at the top of the README file.
The test cases can be executed locally using the provided Makefile and targets, for further details see the README.
Open Issues
- Accuracy at fixed value boundary conditions is significantly lower than in other regions of the mesh. Possibly due to the central stencil being not symmetric and only covering a section.
- Stencil collection for cyclic boundaries is still the same as it would be a normal patch.
- Treatment of AMI boundary conditions, e.g. cyclicAMI patches.
Other minor fixes
- Treatment of cyclic patches is now improved by treating it similar to a processor boundary. [f07bc57]
- Checking of LS matrices can be deactivated. This is useful for some meshes that would otherwise generate a large number of badly conditioned matrices, e.g. structured wedge meshes [521a310]
References
[1] Tsoutsanis, P. (2019). Stencil selection algorithms for WENO schemes on unstructured meshes. Journal of Computational Physics: X, 4, 100037. https://doi.org/10.1016/j.jcpx.2019.100037
[2] Zhang, X., & Shu, C.-W. (2010). On maximum-principle-satisfying high order schemes for scalar conservation laws q. https://doi.org/10.1016/j.jcp.2009.12.030
WENO Improved I/O
WENO Improve I/O and Data Structures
Summary
Use a custom List3D object instead of nested lists List<List<List<Type>>>
for storing the volume integrals.
Improve I/O of the WENOBase class and testing
Issues
- Create own List3D object as discussed in #11
- Tested usage of a BLAS backend library for Blaze, see #10
Change Log:
- Add test cases for WENOBase I/O and regression tests for geometryWENO functions
- Clean up WENOCoeff::getWENOPol() function
- Create List3D class
- WENOBase I/O writes out all fields. IntBasTrans and refFacAr fields are now read in and
not generated. Consistency with parallel runs, as otherwise globalMesh would be required.