In this work, we present HODG, an open-source component-based development framework based on high order Discontinuous Galerkin (DG) methods for solving compressible Euler and Navier-Stokes equations. This framework is written in pure C++11, and proposes “component” as the basic function unit, which is the key to the Interface-Oriented Programming principle and Aspect-Oriented Programming (AOP) technology. Built on the top-level design of components, HODG is a flexible yet pragmatic development framework that works right out of the box and is easy to use for starters and developers.The current release of HODG supports structured, unstructured, hybrid, and second-order meshes available. It is capable of solving Euler and Navier-Stokes (N-S) equations in two dimensions and three dimensions. In this development framework, spatial accuracy is easy to be extended to higher orders, and DG-P0, DG-P1, DG-P2 (up to third order) are implemented in the current version. Moreover, implicit temporal discretization and explicit discretization are available. Especially for viscous fluxes, the direct Discontinuous Galerkin (DDG) formulation and Bassi and Rebay II (BR2) scheme are implemented. In the case of strong discontinuities or shock waves, artificial viscosity is applied to capture shock waves. Various benchmark numerical examples are provided to demonstrate the full capabilities of HODG. The software is freely available under an MIT license. Program summaryProgram Title: HODG v2.0.0CPC Library link to program files:https://doi.org/10.17632/835732yz8s.1Code Ocean capsule:https://codeocean.com/capsule/4788938Licensing provisions: MITProgramming language: C++11Nature of problem: Compressible Euler and Navier–Stokes equations of fluid dynamics; potential for any advection–diffusion type problem.Solution method: DG-P0, DG-P1, DG-P2 spatial discretization, combining with DDG and BR2 schemes for viscous fluxes, explicit and implicit time schemes, and supporting structured, unstructured, hybrid, and high-order meshes.unusual features: developed based on modern C++11 features; propose the “component” as basic function unit, which follows the practice of Interface-Oriented Programming principle; Special component named “action” is used, and is the key to AOP technology in this framework; Implicitly implements the Dependency Injection (DI) technology; Flexible yet pragmatic, and works right out of the box.
Read full abstract