cdifs Module

Constant Density Incompressible Flow Solver. Available Features: + HYPRE solvers for the pressure-Poisson equation + Immersed Boundaries + Resolved Particles x Lagrangian point-particles (to-do)



Uses

  • module~~cdifs~~UsesGraph module~cdifs cdifs module~collisions collisions module~cdifs->module~collisions module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~leapbc leapBC module~cdifs->module~leapbc module~leapblock leapBlock module~cdifs->module~leapblock module~leapdiffop leapDiffOp module~cdifs->module~leapdiffop module~leapeulerian leapEulerian module~cdifs->module~leapeulerian module~leaphypre leapHypre module~cdifs->module~leaphypre module~leapio leapIO module~cdifs->module~leapio module~leapkinds leapKinds module~cdifs->module~leapkinds module~leapmonitor leapMonitor module~cdifs->module~leapmonitor module~leapparallel leapParallel module~cdifs->module~leapparallel module~leapparser leapParser module~cdifs->module~leapparser module~leapsolver leapSolver module~cdifs->module~leapsolver module~leaptimer leapTimer module~cdifs->module~leaptimer module~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~collisions->module~immersed_boundaries module~collisions->module~leapblock module~collisions->module~leapkinds module~collisions->module~leapmonitor module~collisions->module~leapparallel module~collisions->module~leapparser module~collisions->module~leaptimer module~collisions->module~particles_resolved module~leaputils leapUtils module~collisions->module~leaputils module~particles_point particles_point module~collisions->module~particles_point module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries->module~immersed_boundaries_solids module~leapbc->module~leapblock module~leapbc->module~leapeulerian module~leapbc->module~leapio module~leapbc->module~leapkinds module~leapbc->module~leapparallel iso_fortran_env iso_fortran_env module~leapbc->iso_fortran_env module~leapbc->module~leaputils mpi_f08 mpi_f08 module~leapbc->mpi_f08 module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->iso_fortran_env module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapblock->mpi_f08 module~leapdiffop->module~leapbc module~leapdiffop->module~leapblock module~leapdiffop->module~leapeulerian module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->iso_fortran_env module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leaphypre->module~leapkinds module~leaphypre->module~leapparallel iso_c_binding iso_c_binding module~leaphypre->iso_c_binding module~leaphypre->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapkinds->iso_fortran_env module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->iso_fortran_env module~leapmonitor->module~leaputils module~leapparallel->module~leapkinds module~leapparallel->iso_fortran_env module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapparser->iso_fortran_env module~leapcli leapCli module~leapparser->module~leapcli module~leapsolver->module~leapio module~leapsolver->module~leapkinds module~leapsolver->module~leapparallel module~leapsolver->module~leapparser module~leapsolver->module~leaptimer module~leaptimer->module~leapkinds module~leaptimer->module~leapparallel module~leaptimer->module~leapparser module~leaptimer->module~leaputils module~particles_resolved->module~immersed_boundaries module~particles_resolved->module~leapbc module~particles_resolved->module~leapblock module~particles_resolved->module~leapdiffop module~particles_resolved->module~leapeulerian module~particles_resolved->module~leapio module~particles_resolved->module~leapkinds module~particles_resolved->module~leapmonitor module~particles_resolved->module~leapparallel module~particles_resolved->module~leapparser module~particles_resolved->module~leaptimer module~leaplagrangian leapLagrangian module~particles_resolved->module~leaplagrangian module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leaphypre module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leapkinds module~immersed_boundaries_markers->module~leapmonitor module~immersed_boundaries_markers->module~leapparallel module~immersed_boundaries_markers->module~leapparser module~immersed_boundaries_markers->module~leaptimer module~immersed_boundaries_markers->iso_fortran_env module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~leapkinds module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~immersed_boundaries_markers module~immersed_boundaries_solids->module~leaplagrangian module~leapcli->module~leapkinds module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leaputils module~leaplagrangian->mpi_f08 module~leapfilters leapfilters module~leaplagrangian->module~leapfilters module~leaputils->module~leapkinds module~particles_point->module~immersed_boundaries module~particles_point->module~leapblock module~particles_point->module~leapdiffop module~particles_point->module~leapeulerian module~particles_point->module~leapio module~particles_point->module~leapkinds module~particles_point->module~leapmonitor module~particles_point->module~leapparallel module~particles_point->module~leapparser module~particles_point->module~leaptimer module~particles_point->module~leaplagrangian module~leapfilters->module~leapkinds

Used by


Interfaces

interface

  • private module subroutine cdifs_obj_AdvanceSolution(this)

    Advances solution from n to n+1.

    Arguments

    Type IntentOptional Attributes Name
    class(cdifs_obj), intent(inout) :: this

    CDIFS solver

interface

  • private module subroutine cdifs_obj_Monitor(this)

    Analyzes data and posts to monitors.

    Arguments

    Type IntentOptional Attributes Name
    class(cdifs_obj), intent(inout) :: this

    CDIFS solver

interface

  • private module subroutine cdifs_obj_PrepareSolver(this)

    Prepares data for run.

    Arguments

    Type IntentOptional Attributes Name
    class(cdifs_obj), intent(inout) :: this

    CDIFS solver

interface

  • private module subroutine cdifs_obj_WriteOutputData(this)

    Processes and outputs single-precision data for visualization.

    Arguments

    Type IntentOptional Attributes Name
    class(cdifs_obj), intent(inout) :: this

    CDIFS solver

interface

  • private module subroutine cdifs_obj_WriteRestartData(this)

    Writes restart data to disk.

    Arguments

    Type IntentOptional Attributes Name
    class(cdifs_obj), intent(inout) :: this

    CDIFS solver


Derived Types

type, public, extends(solver_obj) ::  cdifs_obj

Constant Density Incompressible Flow Solver

Components

Type Visibility Attributes Name Initial
real(kind=wp), public, allocatable :: DIV(:,:,:,:,:)

Divergence operator for velocity

type(marker_set), public :: IB

Immersed boundaries

real(kind=wp), public, allocatable :: LAP(:,:,:,:,:,:)

Viscous Laplacian for velocity

type(eulerian_obj_r), public :: P

Fluid pressure

type(ResPart_set), public :: RP

Resolved particles

type(eulerian_obj_r), public :: V(3)

Fluid velocity fields

type(hypre_obj), public :: VFSolver

HYPRE Solver for the volume-fraction equation

type(eulerian_obj_r), public :: Vm(3)

Velocities at mid points

type(eulerian_obj_r), public :: Vold(3)

Old fluid velocity (at n)

type(bc_set), public :: bcs

Boundary conditions

type(block_obj), public :: block

Block information

class(bodyforce_obj), public, allocatable :: bodyforce

Bodyforce

type(collision_obj), public :: collisions

Utility that handles collisions

type(eulerian_obj_r), public :: dP

Pressure correction

type(eulerian_obj_r), public :: divu

Divergence field

type(eulerian_set), public :: fields

Eulerian data container

real(kind=wp), public :: gravity(3) = 0.0_wp

Gravity

type(hdf5_obj), public, pointer :: hdf5 => null()

Associated hdf5 object

type(hypre_obj), public :: hypre

HYPRE Solver for the pressure-Poisson equation

type(eulerian_obj_r), public :: ibF(3)

Immersed boundary force

type(eulerian_obj_r), public :: ibN(3)

IB normals field

type(eulerian_obj_r), public :: ibS

Surface density function

type(eulerian_obj_r), public :: ibVF

Solid volume fraction

type(eulerian_obj_i), public :: maskV(3)

Velocity field masks

integer, public :: maxitp = 1

Collision substeps

type(monitor_set), public :: monitors

Monitors to print to stdout and files at end of each time step

character(len=:), public, allocatable :: name

Solver's name.

type(op_obj), public :: op

Differential Operators

character(len=str8), public, allocatable :: output_var(:)

Names of variables to output

character(len=str8), public, allocatable :: outputs(:)

List of outputs (one output can contain multiple variables)

real(kind=wp), public, allocatable :: pGRAD(:,:,:,:,:)

Gradient operator for pressure

type(parallel_obj), public, pointer :: parallel => null()

Associated parallel structure

type(parser_obj), public, pointer :: parser => null()

Associated parser

type(monitor_set), public :: pmonitor

Monitor for the pressure-Poisson equation, prints at each substep

type(eulerian_obj_r), public :: resV(3)

Velocity residual

real(kind=wp), public :: rho = 1.0_wp

Fluid density

type(eulerian_obj_r), public :: rhs

Right-hand side

logical, public :: singularVF = .false.

Flag for singular volume fraction Poisson equation

type(eulerian_obj_r), public :: srcV(3)

Momentum source

integer, public :: subit = 2

Solver sub-iteration

type(timer_obj), public, pointer :: timer => null()

Associated timer

logical, public :: use_IB = .false.

Use Immersed Boundaries

logical, public :: use_RP = .false.

Use Resolved Particles

logical, public :: use_col = .false.

Use collisions

real(kind=wp), public :: visc = 1.0_wp

Fluid viscosity

Type-Bound Procedures

procedure, public :: AdvanceSolution => cdifs_obj_AdvanceSolution
procedure, public :: ComputeSolidVF => cdifs_obj_ComputeSolidVF
procedure, public :: Finalize => cdifs_obj_Final
procedure, public :: Initialize => cdifs_obj_Init
procedure, public :: LinkHDF5Object => cdifs_obj_LinkHDF5Object
procedure, public :: Monitor => cdifs_obj_Monitor
procedure, public :: PrepareSolver => cdifs_obj_PrepareSolver
procedure, public :: WriteOutputData => cdifs_obj_WriteOutputData
procedure, public :: WriteRestartData => cdifs_obj_WriteRestartData

type, private, extends(bodyforce_obj) ::  bodyforce_CPG

Constant Pressure Gradient bodyforce

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: CPG(3)
integer, public :: type

type, private, extends(bodyforce_obj) ::  bodyforce_NONE

Null bodyforce

Components

Type Visibility Attributes Name Initial
integer, public :: type

type, private, abstract ::  bodyforce_obj

Object that specifies bodyforce type

Components

Type Visibility Attributes Name Initial
integer, public :: type

Subroutines

private subroutine cdifs_obj_ComputeSolidVF(this)

Computes the solid volume fraction (ibVF) by solving a Poisson equation. This subroutine computes the IB normals fields, applies approriate boundary conditions, and takes the divergence, which forms the right-hand side of the poisson equation. It then uses a HYPRE solver to solve this equation. In case where the Poisson operator is singular and using resolved particles, this subroutine will apply a correction that sets the solid volume fraction at particle centroids.

Arguments

Type IntentOptional Attributes Name
class(cdifs_obj), intent(inout) :: this

CDIFS solver

private subroutine cdifs_obj_Final(this)

Finalizes solver and frees memory.

Arguments

Type IntentOptional Attributes Name
class(cdifs_obj), intent(inout) :: this

CDIFS solver

private subroutine cdifs_obj_Init(this, timer, parallel, parser)

Initializes the CDIFS solver.

Arguments

Type IntentOptional Attributes Name
class(cdifs_obj), intent(inout) :: this

CDIFS solver

type(timer_obj), intent(in), target :: timer

Timer utility

type(parallel_obj), intent(in), target :: parallel

Parallel machinery

type(parser_obj), intent(in), target :: parser

Parser for input file

private subroutine cdifs_obj_LinkHDF5Object(this, hdf5)

Links HDF5 Object.

Arguments

Type IntentOptional Attributes Name
class(cdifs_obj), intent(inout) :: this

CDIFS solver

type(hdf5_obj), intent(in), target :: hdf5

HDF5 utility