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