Skip to content

Releases: WENO-OF/WENOEXT

WENO Version 4.1

28 May 12:02
f4099a2
Compare
Choose a tag to compare

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

20 Dec 21:58
Compare
Choose a tag to compare

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

20 Apr 10:44
Compare
Choose a tag to compare

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

26 Jan 14:42
Compare
Choose a tag to compare

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.