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    if (trace_use) call da_trace_entry("da_perform_2drf")
20 
21    e = 0.25 * num_passes / (rf_scale * rf_scale)
22    alpha = 1 + e - sqrt(e * (e + 2.0))
23 
24    mean_field = sum(field(1:ni,1:nj)) / real(ni*nj)
25 
26    do pass = 1, num_passes
27       ! Perform filter in I-direction:
28       do j = 1, nj
29          call da_recursive_filter_1d(pass, alpha, field(1:ni,j), ni)
30       end do
31 
32       ! Perform filter in J-direction:
33       do i = 1, ni
34          call da_recursive_filter_1d(pass, alpha, field(i,1:nj), nj)
35       end do
36    end do
37 
38    if (trace_use) call da_trace_exit("da_perform_2drf")
39 
40 end subroutine da_perform_2drf
41 
42