source: palm/trunk/SOURCE/asselin_filter.f90 @ 550

Last change on this file since 550 was 484, checked in by raasch, 14 years ago

typo in file headers removed

  • Property svn:keywords set to Id
File size: 3.2 KB
Line 
1 SUBROUTINE asselin_filter
2
3!------------------------------------------------------------------------------!
4! Current revisions:
5! -----------------
6!
7!
8! Former revisions:
9! ---------------------
10! $Id: asselin_filter.f90 484 2010-02-05 07:36:54Z maronga $
11!
12! 75 2007-03-22 09:54:05Z raasch
13! moisture renamed humidity
14!
15! RCS Log replace by Id keyword, revision history cleaned up
16!
17! Revision 1.8  2004/01/30 10:14:02  raasch
18! Scalar lower k index nzb replaced by 2d-array nzb_2d
19!
20! Revision 1.1  2002/05/02  13:43:53  13:43:53  raasch (Siegfried Raasch)
21! Initial revision
22!
23!
24! Description:
25! -------------
26! Time filter needed for the leap-frog method
27!------------------------------------------------------------------------------!
28
29    USE arrays_3d
30    USE control_parameters
31    USE cpulog 
32    USE indices
33    USE interfaces
34
35    IMPLICIT NONE
36
37    INTEGER ::  i, j, k
38
39
40    CALL cpu_log( log_point(9), 'timefilter', 'start' )
41
42!
43!-- Return to the calling routine, if time filter is not to be applied
44    IF ( asselin_filter_factor == 0.0 )  RETURN
45
46!
47!-- Apply the time filter
48#if defined( __ibm )
49!$OMP PARALLEL PRIVATE (i,j,k)
50!$OMP DO
51    DO  i = nxl-1, nxr+1
52       DO  j = nys-1, nyn+1
53
54          DO  k = nzb_2d(j,i), nzt+1
55             u(k,j,i) = u(k,j,i) + asselin_filter_factor * &
56                                   ( u_p(k,j,i) - 2.0 * u(k,j,i) + u_m(k,j,i) )
57             v(k,j,i) = v(k,j,i) + asselin_filter_factor * &
58                                   ( v_p(k,j,i) - 2.0 * v(k,j,i) + v_m(k,j,i) )
59             w(k,j,i) = w(k,j,i) + asselin_filter_factor * &
60                                   ( w_p(k,j,i) - 2.0 * w(k,j,i) + w_m(k,j,i) )
61          ENDDO
62
63          IF ( scalar_advec /= 'bc-scheme' )  THEN
64             DO  k = nzb_2d(j,i), nzt+1
65                pt(k,j,i) = pt(k,j,i) + asselin_filter_factor * &
66                            ( pt_p(k,j,i) - 2.0 * pt(k,j,i) + pt_m(k,j,i) )
67             ENDDO
68          ENDIF
69
70          IF ( .NOT. constant_diffusion  .AND.  scalar_advec /= 'bc-scheme' ) &
71          THEN
72             DO  k = nzb_2d(j,i), nzt+1
73                e(k,j,i) = e(k,j,i) + asselin_filter_factor * &
74                           ( e_p(k,j,i) - 2.0 * e(k,j,i) + e_m(k,j,i) )
75             ENDDO
76          ENDIF
77
78          IF ( ( humidity .OR. passive_scalar )  .AND. &
79             scalar_advec /= 'bc-scheme' )  THEN
80             DO  k = nzb_2d(j,i), nzt+1
81                q(k,j,i) = q(k,j,i) + asselin_filter_factor * &
82                           ( q_p(k,j,i) - 2.0 * q(k,j,i) + q_m(k,j,i) )
83             ENDDO
84          ENDIF
85
86       ENDDO
87    ENDDO
88!$OMP END PARALLEL
89#else
90    u = u + asselin_filter_factor * ( u_p - 2.0 * u + u_m )
91    v = v + asselin_filter_factor * ( v_p - 2.0 * v + v_m )
92    w = w + asselin_filter_factor * ( w_p - 2.0 * w + w_m )
93
94    IF ( scalar_advec /= 'bc-scheme' )  THEN
95       pt = pt + asselin_filter_factor * ( pt_p - 2.0 * pt + pt_m )
96    ENDIF
97
98    IF ( .NOT. constant_diffusion  .AND.  scalar_advec /= 'bc-scheme' )  THEN
99       e = e + asselin_filter_factor * ( e_p - 2.0 * e + e_m )
100    ENDIF
101
102    IF ( ( humidity .OR. passive_scalar )  .AND. &
103         scalar_advec /= 'bc-scheme' )  THEN
104       q = q + asselin_filter_factor * ( q_p - 2.0 * q + q_m )
105    ENDIF
106#endif
107
108    CALL cpu_log( log_point(9), 'timefilter', 'stop' )
109
110 END SUBROUTINE asselin_filter
Note: See TracBrowser for help on using the repository browser.