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