Simple test for pushing source terms to the cell mesh. Notice that the time step lag results in a final result that is off by a dt

particles/coupledParticles2D.yaml

---
test:
  # a unique test name for this integration tests
  name: coupledParticles2D
  # create a default assert that compares the log file
  assert: "inputs/particles/coupledParticles2D.txt"

# metadata for the simulation
environment:
  title: _2DInertialParticlesInCompressibleFlow
  tagDirectory: false
arguments: { }
# set up the time stepper responsible for marching in time
timestepper:
  name: theMainTimeStepper
  # io controls how often the results are saved to a file for visualization and restart
  io: # by default the ablate::io::Hdf5Serializer serializer is used
    interval: 0
  # time stepper specific input arguments.  By default, the time stepper will use TSADAPTBASIC
  arguments:
    ts_type: euler
    ts_max_steps: 20
    ts_adapt_safety: 1.0
    ts_adapt_dt_max: .1
  # sets a single box domain with periodic boundary conditions
  domain: !ablate::domain::BoxMesh
    name: simpleBoxField
    faces: [ 5, 5 ]
    lower: [ 0, 0 ]
    upper: [ 1, 1 ]
    simplex: false
    # pass in these options to petsc when setting up the domain.  Using an option list here prevents command line arguments from being seen.
    options:
      dm_refine: 0
    modifiers:
      # if using mpi, this modifier distributes cells
      - !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.0

      # specify the extra pressure field for testing coupling
      - !ablate::domain::FieldDescription
        name: alpha
        type: FV
        location: sol
      # specify the extra pressure field for testing coupling
      - !ablate::domain::FieldDescription
        name: beta
        type: FV
        location: sol
        components: ["beta0", "beta1"]
  # set the initial conditions of the flow field
  initialization:
    - !ablate::finiteVolume::fieldFunctions::Euler
      state: &flowFieldState
        eos: *eos
        pressure: 101325.0
        temperature: 300.0
        velocity: "0.0, 0.0"

    # set the alpha field to zero  
    - fieldName: "alpha"
      field: 0.0

    # set the beta field to zero
    - fieldName: "beta"
      field: "0.0, 0.0"
solvers:
  # the CompressibleFlowSolver is used to just to update the velocity and Yi field, it does not do anything else
  - !ablate::finiteVolume::CompressibleFlowSolver
    id: flowField

    # output the increasing alpha values
    monitors:
      - !ablate::monitors::MaxMinAverage
        field: alpha
      - !ablate::monitors::MaxMinAverage
        field: beta

    # share the existing eos with the compressible flow solver
    eos: *eos

  # use a particle solver with an inertial process
  - !ablate::particles::CoupledParticleSolver
    id: flowParticles
    # Petsc options used for the timestepper
    options:
      ts_dt: 0.005
    # create a single particle per cell
    initializer: !ablate::particles::initializers::CellInitializer
      particlesPerCellPerDim: 1

    # only couple the alpha field
    coupledFields:
      - alpha
      - beta

    # all fields except the coordinate must be specified
    fields:
      - name: ParticleVelocity
        location: SOL # Solution means that it is part of the time stepping in the particle solver
        components: [ u, v ]
      - name: ParticleDiameter
        location: AUX
      - name: ParticleDensity
        location: AUX
    # processes used to add source terms for the particle solver
    processes:
      # add an arbitrary source in alpha
      - !ablate::particles::processes::ArbitraryEulerianSource
        coupledField: alpha
        sourceFunction: 1.0
      # add an arbitrary source in beta
      - !ablate::particles::processes::ArbitraryEulerianSource
        coupledField: beta
        sourceFunction: "10.0, -10.0"
    # Initialize the specified particle fields
    fieldInitialization:
      - fieldName: ParticleDiameter
        field: 0.01
      - fieldName: ParticleDensity
        field: 90.0
      - fieldName: ParticleVelocity
        field: "0.0, 0.0"
    # Monitor particle statistics
    monitors:
      - !ablate::monitors::TimeStepMonitor