da_filter.inc

References to this file elsewhere.
1 subroutine da_filter(grid, var)
2 
3    !-----------------------------------------------------------------------
4    ! Purpose: TBD
5    !-----------------------------------------------------------------------
6 
7    implicit none
8 
9    type(domain), intent(inout) :: grid
10    real,         intent(inout) :: var(ims:ime,jms:jme,kms:kme)
11 
12    integer :: i, j, k
13    real    :: w(3)
14 
15    data  w/0.25,0.5,0.25/
16 
17    if (trace_use) call da_trace_entry("da_filter")
18 
19    ! Copy var for transpose.
20 
21    grid%xp%v1z(its:ite,jts:jte,kts:kte) = &
22       var(its:ite,jts:jte,kts:kte)
23 
24    ! Apply (i',j',k -> i,j',k') transpose (v1z -> v1x).
25 
26    call da_transpose_z2x (grid)
27 
28    ! Perform x-direction filter:
29 
30    do k = grid%xp%ktsx, grid%xp%ktex
31       do j=grid%xp%jtsx, grid%xp%jtex
32          ! Forward 
33          do i=ids+1, ide-1
34             grid%xp%v1x(i,j,k) = w(1)*grid%xp%v1x(i-1,j,k) + w(2)*grid%xp%v1x(i,j,k) + &
35                w(3)*grid%xp%v1x(i+1,j,k)
36          end do
37 
38          ! Backward
39          do i=ide-1,ids+1,-1
40             grid%xp%v1x(i,j,k) = w(1)*grid%xp%v1x(i-1,j,k) + w(2)*grid%xp%v1x(i,j,k) + &
41                w(3)*grid%xp%v1x(i+1,j,k)
42          end do
43       end do
44    end do
45 
46 
47    ! Apply (i,j',k' -> i',j,k') transpose (v1x -> v1y).
48 
49    call da_transpose_x2y (grid)
50 
51    ! Perform y-direction filter:
52 
53    do k=grid%xp%ktsy, grid%xp%ktey
54       do i=grid%xp%itsy, grid%xp%itey
55          ! Forward
56          do j=jds+1, jde-1
57             grid%xp%v1y(i,j,k) = w(1)*grid%xp%v1y(i,j-1,k) + w(2)*grid%xp%v1y(i,j,k) + &
58                w(3)*grid%xp%v1y(i,j+1,k)
59          end do
60 
61          ! Backward
62          do j=jde-1,jds+1,-1
63             grid%xp%v1y(i,j,k) = w(1)*grid%xp%v1y(i,j-1,k) + w(2)*grid%xp%v1y(i,j,k) + &
64                w(3)*grid%xp%v1y(i,j+1,k)
65          end do
66       end do
67    end do
68 
69    ! Apply (i',j,k' -> i',j',k) transpose (v1y -> v1z).
70 
71    call da_transpose_y2z (grid)
72 
73    var(its:ite,jts:jte,kts:kte) = grid%xp%v1z(its:ite,jts:jte,kts:kte)
74 
75    if (trace_use) call da_trace_exit("da_filter")
76 
77 end subroutine da_filter
78 
79