Here, we describe the way to introduce a new equation system into the Ateles framework. For this purpose we are going to describe the modules, which need to be created or extended to introduce the one dimensional Acoustic wave equation. Hence this is a simple example, you will find comments wherever extension is required for more complex cases.
First we have to create a module to describe the acoustic equation system and in addition we also have to create some supporting helper modules.
The location of the equation specific modules is 'source/equation'. As you may have noticed the name of the modules related to the specific eqaution system should have the prefix 'atl_eqn_'. The postfix '_var_module' indicates a module in which the variables of the different equation systems should be defined, the postfix '_hlp_module' indicates a module in which helping routines are defined and last but not least the postfix '_derive_module' indicates a module in which routines are defined to calculate derived quantities of the different equation systems.
To use the subroutines and datatypes of the prescribed modules we have to extend the module atl_equation_init_module by the acoustic testcase to call for atl_eqn_acoustic_init. Furthermore atl_Equations_type needs to be extended by the new defined datatype atl_acoustic_type.
To calculate the physical and numerical flux in one dimension we create the modules atl_acoustic_physflux_module and atl_acoustic_numflux_module respectively in 'source/flux'. For the acoustic equation, the numerical flux can be calculated analytical. For nonlinear equation, the numerical flux is calculated by riemann problem solver like LaxFriedrich, HLL or Roe.
For the routines and datatypes of the Modal Discontinuous Galerkin (MODG) scheme for the acoustic equation we create the module atl_modg_acoustic_kernel_module in 'source/scheme/modg'. This is the main module where the 'numerics' happen. Hence, the calls to the one dimensional numerical and physical flux calculation are done. Take care about the correct rotation according to the corresponding direction of the flux. For nonlinear equation, the physical flux is calculated in the nodal space, though further projection (modal to nodal and vice versa) are required.
For the penealization and material properties we have to extend some modules.
Without material parameters, the computatation does not run into the physical flux calculation. The material and penalization specific modules are in 'source/material'.
For the computation some modules needs to be extended.