da_perform_2drf.inc

References to this file elsewhere.
1 subroutine da_perform_2drf(ni, nj, num_passes, rf_scale, field)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    integer, intent(in)   :: ni               ! Array dimension 1.
10    integer, intent(in)   :: nj               ! Array dimension 2.
11    integer, intent(in)   :: num_passes       ! Number of passes of RF.
12    real, intent(in)      :: rf_scale         ! Recursive filter scaling parameter.
13    real, intent(inout)   :: field(1:ni,1:nj) ! Field to be filtered.
14 
15    integer               :: i, j, pass       ! Loop counters.
16    real                  :: e, alpha         ! Recursive filter parameters.
17    real                  :: mean_field       ! Mean field.
18 
19    e = 0.25 * num_passes / (rf_scale * rf_scale)
20    alpha = 1 + e - sqrt(e * (e + 2.0))
21 
22    mean_field = sum(field(1:ni,1:nj)) / real(ni*nj)
23 
24    do pass = 1, num_passes
25       ! Perform filter in I-direction:
26       do j = 1, nj
27          call da_recursive_filter_1d(pass, alpha, field(1:ni,j), ni)
28       end do
29 
30       ! Perform filter in J-direction:
31       do i = 1, ni
32          call da_recursive_filter_1d(pass, alpha, field(i,1:nj), nj)
33       end do
34    end do
35 
36 end subroutine da_perform_2drf
37 
38