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