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