lowpass Subroutine

public subroutine lowpass(self, af, bc_start, bc_end, sym)

Tridiagonal low-pass filter, matching Incompact3d's filter.

Motheau & Abraham (JCP 2016) tridiagonal filtering with the coefficients of Gaitonde & Visbal (1998):

affh(i-1) + fh(i) + affh(i+1) = af(i) + b(f(i+1)+f(i-1)) + c(f(i+2)+f(i-2)) + d(f(i+3)+f(i-3))

where b, c and d already absorb the halving. The transfer function vanishes at kdx = pi for any admissible af, so the 2dx mode is removed outright; af controls only how sharply the cut-off is approached. af must lie in (-0.5, 0.5), and af -> 0.5 is the sharpest, leaving resolved scales essentially untouched.

This is what keeps the collocated divergence small enough that the skew-symmetric convection conserves momentum: compact schemes cannot dissipate the 2*dx mode, and the staggered pressure projection cannot see it.

Type Bound

tdsops_t

Arguments

Type IntentOptional Attributes Name
class(tdsops_t), intent(inout) :: self
real(kind=dp), intent(in) :: af

filter parameter, -0.5 < af < 0.5

integer, intent(in) :: bc_start
integer, intent(in) :: bc_end
logical, intent(in), optional :: sym

Calls

proc~~lowpass~~CallsGraph proc~lowpass m_tdsops::tdsops_t%lowpass proc~abort_run m_logger::abort_run proc~lowpass->proc~abort_run proc~preprocess_dist m_tdsops::tdsops_t%preprocess_dist proc~lowpass->proc~preprocess_dist proc~preprocess_thom m_tdsops::tdsops_t%preprocess_thom proc~lowpass->proc~preprocess_thom interface~str m_logger::str proc~abort_run->interface~str mpi_abort mpi_abort proc~abort_run->mpi_abort mpi_barrier mpi_barrier proc~abort_run->mpi_barrier mpi_comm_rank mpi_comm_rank proc~abort_run->mpi_comm_rank mpi_comm_size mpi_comm_size proc~abort_run->mpi_comm_size mpi_finalized mpi_finalized proc~abort_run->mpi_finalized mpi_initialized mpi_initialized proc~abort_run->mpi_initialized

Called by

proc~~lowpass~~CalledByGraph proc~lowpass m_tdsops::tdsops_t%lowpass proc~tdsops_init m_tdsops::tdsops_init proc~tdsops_init->proc~lowpass interface~tdsops_t m_tdsops::tdsops_t interface~tdsops_t->proc~tdsops_init proc~cuda_tdsops_init m_cuda_tdsops::cuda_tdsops_init proc~cuda_tdsops_init->proc~tdsops_init proc~omptgt_tdsops_init m_omptgt_tdsops::omptgt_tdsops_init proc~omptgt_tdsops_init->proc~tdsops_init interface~cuda_tdsops_t m_cuda_tdsops::cuda_tdsops_t interface~cuda_tdsops_t->proc~cuda_tdsops_init