3D Euler Smooth#
This problem solves the 3D Euler equations in conservative form for a smooth field. The gas dynamics is governed by a system of PDE
where the pressure \(p\) is related to the conserved quantities through the equation of the state
Initial conditions (primitive variables):
\(\rho = 1 + 0.2\sin(\pi (x+y+z))\)
\(u = 1, v = 1, w = 1, p = 1\)
These are used to create the initial conditions in conservative variables.
By default, \(\gamma = 1.4\)
Domain is \([-1, 1]^3\) with periodic BC
Analytical density as function of time is given as: \(\rho(t) = 1 + 0.2\sin(\pi (x+y+z - 3 t))\)
Typically, integration is performed for \(t \in (0, 2)\)
The problem is adopted from this paper:
in the original paper, they used \(v = -0.5\), while we use \(v = 1\)
Caution
Currently, this problem only works for first order and Weno3 inviscid flux reconstruction.
Mesh#
python3 pressio-demoapps/meshing_scripts/create_full_mesh_for.py \
--problem euler3dsmooth_s<stencilSize> -n Nx Ny Nz --outDir <destination-path>
where
Nx, Ny, Nz
is the number of cells you want along \(x\), \(y\), \(z\) respectively<stencilSize> = 3 or 5
: defines the neighboring connectivity of each cell<destination-path>
: full path to where you want the mesh files to be generated. The script creates the directory if it does not exist.
Important
When you set the <stencilSize>
, keep in mind the following constraints (more on this below):
InviscidFluxReconstruction::FirstOrder
requires<stencilSize> >= 3
InviscidFluxReconstruction::Weno3
requires<stencilSize> >= 5
C++ synopsis#
#include "pressiodemoapps/euler3d.hpp"
int main(){
namespace pda = pressiodemoapps;
const auto meshObj = pda::load_cellcentered_uniform_mesh_eigen("path-to-mesh");
const auto probId = pda::Euler3d::PeriodicSmooth;
const auto scheme = pda::InviscidFluxReconstruction::FirstOrder; //or Weno3
auto problem = pda::create_problem_eigen(meshObj, probId, scheme);
auto state = problem.initialCondition();
}
Python synopsis#
import pressiodemoapps as pda
meshObj = pda.load_cellcentered_uniform_mesh("path-to-mesh")
probId = pda.Euler3d.PeriodicSmooth
scheme = pda.InviscidFluxReconstruction.FirstOrder # or Weno3
problem = pda.create_problem(meshObj, probId, scheme)
state = problem.initialCondition()