Example setup for incompressible flow that uses a finite volume solver and checks for simulation restart using output at a specified interval with an offset number of max steps.
feFlow/incompressibleFlowIntervalRestart.yaml
---
test: !IntegrationRestartTest
# specify the basic test parameters for restart test
testParameters:
# a unique test name for this integration tests
name: incompressibleFlowIntervalRestart
asserts:
- "inputs/feFlow/incompressibleFlowIntervalRestart.txt"
# upon restart, override some of the input parameters
restartOverrides:
timestepper::arguments::ts_max_steps: "10"
environment:
title: _incompressibleFlowInterval
tagDirectory: true
arguments:
dm_plex_separate_marker: ""
timestepper:
name: theMainTimeStepper
io:
interval: 5
arguments:
ts_dt: .1
ts_max_steps: 7
ksp_type: fgmres
ksp_gmres_restart: 10
ksp_rtol: 1.0e-9
ksp_atol: 1.0e-14
ksp_error_if_not_converged: ""
pc_type: fieldsplit
pc_fieldsplit_0_fields: 0,2
pc_fieldsplit_1_fields: 1
pc_fieldsplit_type: schur
pc_fieldsplit_schur_factorization_type: "full"
fieldsplit_0_pc_type: lu
fieldsplit_pressure_ksp_rtol: 1E-10
fieldsplit_pressure_pc_type: jacobi
domain: !ablate::domain::BoxMesh
name: simpleBoxField
faces: [ 2, 2 ]
lower: [ 0, 0 ]
upper: [ 1, 1 ]
options:
dm_refine: 2
fields:
- !ablate::finiteElement::LowMachFlowFields
initialization:
- &velocityField
fieldName: "velocity"
field: "t + x^2 + y^2, t + 2*x^2 - 2*x*y"
timeDerivative: "1.0, 1.0"
- &pressureField
fieldName: "pressure"
field: "x + y - 1"
timeDerivative: "0.0"
- &temperatureField
fieldName: "temperature"
field: "t + x + y"
timeDerivative: "1.0"
exactSolution:
- *velocityField
- *pressureField
- *temperatureField
solver: !ablate::finiteElement::IncompressibleFlowSolver
id: theFlowField
options: { }
parameters:
strouhal: 1.0
reynolds: 1.0
peclet: 1.0
mu: 1.0
k: 1.0
cp: 1.0
boundaryConditions:
- !ablate::finiteElement::boundaryConditions::Essential
boundaryName: "wall velocity"
labelIds: [ 3, 1, 2, 4 ]
boundaryValue: *velocityField
- !ablate::finiteElement::boundaryConditions::Essential
boundaryName: "wall temp"
labelIds: [ 3, 1, 2, 4 ]
boundaryValue: *temperatureField
monitors:
- !ablate::monitors::FieldErrorMonitor