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