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