da_filter_regcoeffs.inc

References to this file elsewhere.
1 subroutine da_filter_regcoeffs(ni, nj, nk, num_bins, num_bins2d, num_passes, &
2    rf_scale, bin, regcoeff1, regcoeff2, regcoeff3)
3 
4    !-----------------------------------------------------------------------
5    ! Purpose: TBD
6    !-----------------------------------------------------------------------
7 
8    implicit none
9 
10    integer, intent(in)    :: ni, nj, nk                  ! Grid dimensions.
11    integer, intent(in)    :: num_bins                    ! Number of bins for 3D coeffs.
12    integer, intent(in)    :: num_bins2d                  ! Number of bins for 2D coeffs.
13    integer, intent(in)    :: num_passes                  ! Number of passes for RF.
14    real,    intent(in)    :: rf_scale                    ! Smoothing scale of RF.
15    integer, intent(in)    :: bin(1:ni,1:nj,1:nk)         ! Bin assigned to each point.
16    real,    intent(inout) :: regcoeff1(1:num_bins)       ! psi/chi regression cooefficient.
17    real,    intent(inout) :: regcoeff2(1:nk,1:num_bins2d)! psi/ps regression cooefficient.
18    real,    intent(inout) :: regcoeff3(1:nk,1:nk,1:num_bins2d) ! psi/T regression cooefficient.
19 
20    integer :: i, j, k              ! Loop counters.
21    integer :: b                    ! Bin index.
22    real    :: field(1:ni,1:nj)     ! Field for recursive filter.
23 
24    if (trace_use) call da_trace_entry("da_filter_regcoeffs")
25 
26    !----------------------------------------------------------------------------
27    ! [1] Filter psi/chi coefficient:
28    !----------------------------------------------------------------------------
29 
30    do k = 1, nk
31       ! Prepare field for filtering:
32       do j = 1, nj
33          do i = 1, ni
34             b = bin(i,j,k)
35             field(i,j) = regcoeff1(b)
36          end do
37       end do
38 
39       call da_perform_2drf(ni, nj, num_passes, rf_scale, field)
40 
41       do j = 1, nj
42          do i = 1, ni
43             b = bin(i,j,k)
44             regcoeff1(b) = field(i,j)
45          end do
46       end do
47    end do
48 
49    if (trace_use) call da_trace_exit("da_filter_regcoeffs")
50 
51 end subroutine da_filter_regcoeffs
52 
53