This is the les of isotropic turbulence case in a 3D box with periodic boundary conditions case to test the lesTransport solver for large eddy simulations of compressible flows. parameters The initial velocity field is created using modified Kraichnanโs method. Please refer to โT. Saad, D. Cline, R. Stoll, and J.C. Sutherland. Scalable tools for generating synthetic isotropic turbulence with arbitrary spectra. AIAA Journal, 55(1):327โ331, 2017โ for detail of initial velocity field calculation.
The domain comprises a 3D box with a side length is l=0.09ร2ฯ m c refers to the number of mesh in each direction Periodic conditions are applied to all patches
compressibleFlow/lesIsotropicTurbulence.yaml
---
testingIgnore: true
#test:
## # a unique test name for this integration tests
# name: lesIsotropicTurbulence
# # create a list of asserts to compare
# asserts:
# # create a default assert that compares the log file
# - "inputs/compressibleFlow/lesIsotropicTurbulence/lesIsotropicTurbulence.txt"
# - !testingResources::asserts::TextFileAssert
# expected: "inputs/compressibleFlow/lesIsotropicTurbulence/domain.xmf"
# actual: "domain.xmf"
# metadata for the simulation
environment:
title: _lesIsotropicTurbulence
tagDirectory: false
arguments: {}
# set up the time stepper responsible for marching in time
timestepper:
# use io to save results to a file allowing visualization and restart
io:
interval: 1
name: theMainTimeStepper
# time stepper specific input arguments
arguments:
ts_type: rk
ts_adapt_type: physics # overwrite and set the time step based upon the CFL constraint
ts_max_steps: 20
ts_adapt_safety: 1.0
# the domain/mesh must be specified at the start of a simulation
domain: !ablate::domain::BoxMesh
name: simpleBoxField
faces: [ 5 ,5 ,5]
lower: [ 0, 0, 0]
upper: [ 0.565, 0.565 , 0.565]
boundary: [ "PERIODIC", "PERIODIC", "PERIODIC", "PERIODIC" ]
simplex: false
options:
dm_refine: 1
# specify any modifications to be performed to the mesh/domain
modifiers:
# if using mpi, this modifier distributes cells
- !ablate::domain::modifiers::GhostBoundaryCells
# if using a FVM ghost boundary cells must be added
- !ablate::domain::modifiers::DistributeWithGhostCells
fields:
# all fields must be defined before solvers. The ablate::finiteVolume::CompressibleFlowFields is a helper
# class that creates the required fields for the compressible flow solver (rho, rhoE, rhoU, ...)
- !ablate::finiteVolume::CompressibleFlowFields
eos: !ablate::eos::PerfectGas &eos
parameters:
gamma: 1.4
Rgas: 287
# a field should be created for turbulent kinetic energy (tke)
- !ablate::finiteVolume::TurbulenceFlowFields
initialization:
# the ablate::finiteVolume::fieldFunctions::Euler helper can define the "euler" field (rho, rhoE, rhoU, rhoV) from more common inputs
- !ablate::finiteVolume::fieldFunctions::Euler
state: &flowFieldState
eos: *eos
temperature: "332"
pressure: "95325.0"
velocity: !ablate::mathFunctions::ParsedSeries
upperBound: 50
lowerBound: 1
formula: 2 * sqrt(alpha * exp(-2 * (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) / kappa_eta) ^ 2) * (uPrime^2 /kappa_e * (((kappa_o)+ (kappa_max)- (kappa_o)) * (i - 1) / n)/ kappa_e) ^ 4 / (1* (1 + (((kappa_o) + (kappa_max)- (kappa_o)) * (i - 1) / n) / kappa_e) )^ (17/6)* cos( (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) * (kappa_max)*sin(.5* ((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n)* (kappa_max)*sin( acos(pRand(LO,HI)))* cos(pRand(LO1,HI1) )* x + (pRand(LO2,HI2))),2 * sqrt(alpha * exp(-2 * (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) / kappa_eta) ^ 2) * (uPrime^2 /kappa_e * (((kappa_o)+ (kappa_max)- (kappa_o)) * (i - 1) / n)/ kappa_e) ^ 4 / (1* (1 + (((kappa_o) + (kappa_max)- (kappa_o)) * (i - 1) / n) / kappa_e) )^ (17/6)* cos( (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) * (kappa_max)*sin(.5* ((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n)* (kappa_max)*sin( acos(pRand(LO,HI)))* sin(pRand(LO1,HI1) )* y + (pRand(LO2,HI2))),2 * sqrt(alpha * exp(-2 * (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) / kappa_eta) ^ 2) * (uPrime^2 /kappa_e * (((kappa_o)+ (kappa_max)- (kappa_o)) * (i - 1) / n)/ kappa_e) ^ 4 / (1* (1 + (((kappa_o) + (kappa_max)- (kappa_o)) * (i - 1) / n) / kappa_e) )^ (17/6)* cos( (((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n) * (kappa_max)*sin(.5* ((kappa_o) + (kappa_max) - (kappa_o)) * (i - 1) / n)* (kappa_max)*cos( acos(pRand(LO,HI)) )* z + (pRand(LO2,HI2)))
constants:
n: 5000
alpha: 1.453
c: 5
l: 2*pi*9/100
delta: (l/c)
kappa_eta: 0.8573*5624
uPrime: 0.25
kappa_e: 25.82
kappa_o: 100/9
kappa_max: pi/delta
HI: 1
LO: -1
HI1: 2*pi
LO1: 0
HI2: pi/2
LO2: -pi/2
# the density*ev field must be specified. The DensityExtraVariables class helps by computing density and each ev value using the specified list functions
- !ablate::finiteVolume::fieldFunctions::DensityExtraVariables
# introduce initial value for tke
name: tke
state: *flowFieldState
functions:
- .09 # ev1 is set to initial value for tke
# this problem uses a single solver (!ablate::finiteVolume::LesCompressibleFlowSolver)
solver: !ablate::finiteVolume::CompressibleFlowSolver
id: evExample
parameters:
cfl: .5
# a flux calculator must be specified to so solver for advection
fluxCalculator: !ablate::finiteVolume::fluxCalculator::AusmpUp
mInf: .5
# the default transport object assumes constant values for k, mu, diff
transport:
diff: 1E-4
k: 0.025
mu: 1E-5
# share the existing eos with the compressible flow solver
eos: *eos
# introduce the initial value of tke to LES application
additionalProcesses:
- !ablate::finiteVolume::processes::LES
monitors:
# output the time and dt at each time step
- !ablate::monitors::TimeStepMonitor