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