This test shows how to create a compressible flow (Couette) field without using the compressible flow object. The fields and processes are added individually instead of using predefined classes.
compressibleFlow/customCouetteCompressibleFlow.yaml
---
testingIgnore: true
#test:
# # a unique test name for this integration tests
# name: customCouetteCompressibleFlow
# # create a default assert that compares the log file
# assert: "inputs/compressibleFlow/customCouetteCompressibleFlow.txt"
## metadata for the simulation
environment:
title: _compressibleCouette
tagDirectory: false
arguments:
dm_plex_separate_marker: ""
# set up the time stepper responsible for marching in time
timestepper:
name: theMainTimeStepper
arguments:
ts_type: rk
ts_adapt_type: physics # overwrite and set the time step based upon the CFL constraint
ts_max_steps: 20
# sets a single box domain
domain: !ablate::domain::BoxMesh
name: simpleBoxField
faces: [ 12, 12 ]
lower: [ 0, 0 ]
upper: [ 1, 1 ]
boundary: [ "PERIODIC", "NONE" ]
simplex: false
# all fields must be defined before solvers. In this example this is done by specify each .
fields:
# instead of using the !ablate::finiteVolume::CompressibleFlowFields the euler field can be specified manually
- name: euler
components: [ "rho", "rhoE", "rhoVel0", "rhoVel1" ] # this order is always assumed
type: FVM # the field must be FVM to use with the finite volume method
options:
# use least squares reconstruction for the cell based operations without a limiter
petscfv_type: leastsquares
petsclimiter_type: none
# the !ablate::finiteVolume::CompressibleFlowFields class usually adds temperature, but it can be done manually instead
- name: temperature
location: AUX # the AUX location indicated that the field is computed from other fields and not integrated directly in the timesteppper
type: FVM
options:
petscfv_type: leastsquares
petsclimiter_type: none
- name: velocity
components: [ "vel0", "vel1" ] # fields can have multiple components, such as velocity
location: AUX
type: FVM
options:
petscfv_type: leastsquares
petsclimiter_type: none
modifiers:
# if using mpi, this modifier distributes cells
- !ablate::domain::modifiers::DistributeWithGhostCells
# if using a FVM ghost boundary cells must be added
- !ablate::domain::modifiers::GhostBoundaryCells
initialization:
- fieldName: "euler" #for euler all components are in a single field
field: >-
1.0,
215250.0,
0.0,
0.0
exactSolution:
- fieldName: "euler" # rho, rho_e = rho*(CvT + u^2/2), rho_u, rho_v
field: >-
1.0,
1.0 * (215250.0 + (0.5 * (50 * y)^2)),
1.0 * 50 * y,
1.0 * 0.0
# this problem uses a single solver (!ablate::finiteVolume::FiniteVolumeSolver) instead of the CompressibleFlowSolver.
solver: !ablate::finiteVolume::FiniteVolumeSolver
id: compressibleFlowField
# all the processes must be specified because FiniteVolumeSolver was specified directly
processes:
# the NavierStokesTransport processes handles bulk advection and diffusion
- !ablate::finiteVolume::processes::NavierStokesTransport
parameters:
cfl: 0.5
# a flux calculator must be specified to so solver for advection
fluxCalculator: !ablate::finiteVolume::fluxCalculator::Ausm
# define a perfect gas eos to use with transport
eos: !ablate::eos::PerfectGas
parameters:
gamma: 1.4
Rgas : 287.0
# the default transport object assumes constant values for k, mu, diff
transport:
k: 0.0
mu: 1.0
# using constant boundary condition values on sides 1,3 with the specified values for euler
boundaryConditions:
- !ablate::finiteVolume::boundaryConditions::EssentialGhost
boundaryName: "walls"
labelIds: [1]
boundaryValue:
fieldName: euler
field: "1.0, 215250.0, 0.0, 0.0"
- !ablate::finiteVolume::boundaryConditions::EssentialGhost
boundaryName: "walls"
labelIds: [3]
boundaryValue:
fieldName: euler
field: "1.0, 216500.0, 50.0, 0.0"
monitors:
# computes the standard l2 norm error and outputs to standard out
- !ablate::monitors::SolutionErrorMonitor
scope: component
type: l2_norm