pyro.incompressible_viscous package#
The pyro solver for incompressible and viscous flow. This implements a second-order approximate projection method. The general flow is:
create the limited slopes of u and v (in both directions)
get the advective velocities through a piecewise linear Godunov method
enforce the divergence constraint on the velocities through a projection (the MAC projection)
recompute the interface states using the new advective velocity
Solve for U in a (decoupled) parabolic solve including viscosity term
project the final velocity to enforce the divergence constraint.
The projections are done using multigrid
Subpackages#
Submodules#
pyro.incompressible_viscous.BC module#
Solver-specific boundary conditions. Here, in particular, we implement a “moving-lid” option, i.e. fixed tangential velocity at a wall.
- pyro.incompressible_viscous.BC.user(bc_name, bc_edge, variable, ccdata)[source]#
A moving lid boundary. This fixes the tangent velocity at the boundary to 1, and the y-velocity to 0.
- Parameters:
- bc_name{‘moving_lid’}
The descriptive name for the boundary condition – this allows for pyro to have multiple types of user-supplied boundary conditions. For this module, it needs to be ‘moving_lid’.
- bc_edge{‘ylb’, ‘yrb’, ‘xlb’, ‘xrb}
The boundary to update: ylb = lower y; yrb = upper y. xlb = left x; xrb = right x
- ccdataCellCenterData2d object
The data object
pyro.incompressible_viscous.simulation module#
- class pyro.incompressible_viscous.simulation.Simulation(solver_name, problem_name, problem_func, rp, *, problem_finalize_func=None, problem_source_func=None, timers=None, data_class=<class 'pyro.mesh.patch.CellCenterData2d'>)[source]#
Bases:
Simulation
- do_other_update_velocity(U_MAC, U_INT)[source]#
Solve for U in a (decoupled) parabolic solve including viscosity term
- evolve()[source]#
Solve is all the same steps as the incompressible solver, but including a source term for the viscosity in the interface prediction, and changing the velocity update method to a double parabolic solve.