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

Last change on this file since 1 was 1, checked in by raasch, 15 years ago

Initial repository layout and content

File size: 3.7 KB
Line 
1 SUBROUTINE asselin_filter
2
3!-------------------------------------------------------------------------------!
4! Actual revisions:
5! -----------------
6!
7!
8! Former revisions:
9! ---------------------
10! $Log: asselin_filter.f90,v $
11! Revision 1.8  2004/01/30 10:14:02  raasch
12! Scalar lower k index nzb replaced by 2d-array nzb_2d
13!
14! Revision 1.7  2003/03/16 09:26:58  raasch
15! Two underscores (_) are placed in front of all define-strings
16!
17! Revision 1.6  2003/03/14 13:37:38  raasch
18! Do loop constructs only for IBM, otherwise array notation re-introduced
19!
20! Revision 1.5  2002/12/19 13:45:57  raasch
21! Array notation changed to do-loop constructs due to better performance,
22! OpenMP directives added
23!
24! Revision 1.4  2002/05/15 10:00:18  raasch
25! Nothing changed
26!
27! Revision 1.3  2002/05/02  19:39:07  19:39:07  raasch (Siegfried Raasch)
28! Use of module interfaces included
29!
30! Revision 1.2  2002/05/02 14:06:02  raasch
31! *** empty log message ***
32!
33! Revision 1.1  2002/05/02  13:43:53  13:43:53  raasch (Siegfried Raasch)
34! Initial revision
35!
36!
37! Description:
38! -------------
39! Time filter needed for the leap-frog method
40!-------------------------------------------------------------------------------!
41
42    USE arrays_3d
43    USE control_parameters
44    USE cpulog
45    USE indices
46    USE interfaces
47
48    IMPLICIT NONE
49
50    INTEGER ::  i, j, k
51
52
53    CALL cpu_log( log_point(9), 'timefilter', 'start' )
54
55!
56!-- Return to the calling routine, if time filter is not to be applied
57    IF ( asselin_filter_factor == 0.0 )  RETURN
58
59!
60!-- Apply the time filter
61#if defined( __ibm )
62!$OMP PARALLEL PRIVATE (i,j,k)
63!$OMP DO
64    DO  i = nxl-1, nxr+1
65       DO  j = nys-1, nyn+1
66
67          DO  k = nzb_2d(j,i), nzt+1
68             u(k,j,i) = u(k,j,i) + asselin_filter_factor * &
69                                   ( u_p(k,j,i) - 2.0 * u(k,j,i) + u_m(k,j,i) )
70             v(k,j,i) = v(k,j,i) + asselin_filter_factor * &
71                                   ( v_p(k,j,i) - 2.0 * v(k,j,i) + v_m(k,j,i) )
72             w(k,j,i) = w(k,j,i) + asselin_filter_factor * &
73                                   ( w_p(k,j,i) - 2.0 * w(k,j,i) + w_m(k,j,i) )
74          ENDDO
75
76          IF ( scalar_advec /= 'bc-scheme' )  THEN
77             DO  k = nzb_2d(j,i), nzt+1
78                pt(k,j,i) = pt(k,j,i) + asselin_filter_factor * &
79                            ( pt_p(k,j,i) - 2.0 * pt(k,j,i) + pt_m(k,j,i) )
80             ENDDO
81          ENDIF
82
83          IF ( .NOT. constant_diffusion  .AND.  scalar_advec /= 'bc-scheme' ) &
84          THEN
85             DO  k = nzb_2d(j,i), nzt+1
86                e(k,j,i) = e(k,j,i) + asselin_filter_factor * &
87                           ( e_p(k,j,i) - 2.0 * e(k,j,i) + e_m(k,j,i) )
88             ENDDO
89          ENDIF
90
91          IF ( ( moisture .OR. passive_scalar )  .AND. &
92             scalar_advec /= 'bc-scheme' )  THEN
93             DO  k = nzb_2d(j,i), nzt+1
94                q(k,j,i) = q(k,j,i) + asselin_filter_factor * &
95                           ( q_p(k,j,i) - 2.0 * q(k,j,i) + q_m(k,j,i) )
96             ENDDO
97          ENDIF
98
99       ENDDO
100    ENDDO
101!$OMP END PARALLEL
102#else
103    u = u + asselin_filter_factor * ( u_p - 2.0 * u + u_m )
104    v = v + asselin_filter_factor * ( v_p - 2.0 * v + v_m )
105    w = w + asselin_filter_factor * ( w_p - 2.0 * w + w_m )
106
107    IF ( scalar_advec /= 'bc-scheme' )  THEN
108       pt = pt + asselin_filter_factor * ( pt_p - 2.0 * pt + pt_m )
109    ENDIF
110
111    IF ( .NOT. constant_diffusion  .AND.  scalar_advec /= 'bc-scheme' )  THEN
112       e = e + asselin_filter_factor * ( e_p - 2.0 * e + e_m )
113    ENDIF
114
115    IF ( ( moisture .OR. passive_scalar )  .AND. &
116         scalar_advec /= 'bc-scheme' )  THEN
117       q = q + asselin_filter_factor * ( q_p - 2.0 * q + q_m )
118    ENDIF
119#endif
120
121    CALL cpu_log( log_point(9), 'timefilter', 'stop' )
122
123 END SUBROUTINE asselin_filter
Note: See TracBrowser for help on using the repository browser.