da_smooth_anl.inc
References to this file elsewhere.
1 subroutine da_smooth_anl(slab,imx,jmx,kx,npass,icrsdot)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: spatially smooth (usually slab) to remove high
5 ! frequency waves
6 !-----------------------------------------------------------------------
7
8 implicit none
9
10 real, intent(inout) :: SLAB(:,:,:)
11 integer, intent(in) :: imx, jmx, kx
12 integer, intent(in) :: npass
13 integer, intent(in) :: icrsdot
14
15 real, allocatable :: SLABNEW(:,:)
16 real :: XNU(1:2)
17 integer :: ie, je, k
18 integer :: loop, n, i, j
19
20 allocate (SLABNEW(IMX,JMX))
21
22 IE=IMX-1-ICRSdoT
23 JE=JMX-1-ICRSdoT
24 XNU(1)=0.50
25 XNU(2)=-0.52
26 do K=1,KX
27 do LOOP=1,NPASS*2
28 N=2-MOD(LOOP,2)
29
30 ! FIRST SMOOTH in THE IMX DIRECTION
31
32 do I=2,IE
33 do J=2,JE
34 SLABNEW(I,J)=SLAB(I,J,K)+XNU(N) * &
35 ((SLAB(I,J+1,K)+SLAB(I,J-1,K))*0.5-SLAB(I,J,K))
36 end do
37 end do
38 do I=2,IE
39 do J=2,JE
40 SLAB(I,J,K)=SLABNEW(I,J)
41 end do
42 end do
43
44 ! NOW SMOOTH in THE JMX DIRECTION
45
46 do J=2,JE
47 do I=2,IE
48 SLABNEW(I,J)=SLAB(I,J,K)+XNU(N) * &
49 ((SLAB(I+1,J,K)+SLAB(I-1,J,K))*0.5-SLAB(I,J,K))
50 end do
51 end do
52
53 do I=2,IE
54 do J=2,JE
55 SLAB(I,J,K)=SLABNEW(I,J)
56 end do
57 end do
58 end do
59 end do
60
61 deallocate (SLABNEW)
62
63 end subroutine da_smooth_anl
64
65