source: palm/trunk/SOURCE/advec_u_up.f90 @ 3

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

RCS Log replace by Id keyword, revision history cleaned up

File size: 4.6 KB
Line 
1 MODULE advec_u_up_mod
2
3!------------------------------------------------------------------------------!
4! Actual revisions:
5! -----------------
6!
7!
8! Former revisions:
9! -----------------
10! $Id$
11! RCS Log replace by Id keyword, revision history cleaned up
12!
13! Revision 1.12  2006/02/23 09:45:04  raasch
14! nzb_2d replaced by nzb_u_inner
15!
16! Revision 1.1  1997/08/29 08:55:25  raasch
17! Initial revision
18!
19!
20! Description:
21! ------------
22! Advection term for the u velocity-component using upstream scheme.
23! NOTE: vertical advection at k=1 still has wrong grid spacing for w>0!
24!       The same problem occurs for all topography boundaries!
25!------------------------------------------------------------------------------!
26
27    PRIVATE
28    PUBLIC advec_u_up
29
30    INTERFACE advec_u_up
31       MODULE PROCEDURE advec_u_up
32       MODULE PROCEDURE advec_u_up_ij
33    END INTERFACE advec_u_up
34
35 CONTAINS
36
37
38!------------------------------------------------------------------------------!
39! Call for all grid points
40!------------------------------------------------------------------------------!
41    SUBROUTINE advec_u_up
42
43       USE arrays_3d
44       USE control_parameters
45       USE grid_variables
46       USE indices
47
48       IMPLICIT NONE
49
50       INTEGER ::  i, j, k
51
52       REAL ::  ukomp, vkomp, wkomp
53
54
55       DO  i = nxl, nxr+uxrp
56          DO  j = nys, nyn
57             DO  k = nzb_u_inner(j,i)+1, nzt
58!
59!--             x-direction
60                ukomp = u(k,j,i) - u_gtrans
61                IF ( ukomp > 0.0 )  THEN
62                   tend(k,j,i) = tend(k,j,i) - ukomp * &
63                                         ( u(k,j,i) - u(k,j,i-1) ) * ddx
64                ELSE
65                   tend(k,j,i) = tend(k,j,i) - ukomp * &
66                                          ( u(k,j,i+1) - u(k,j,i) ) * ddx
67                ENDIF
68!
69!--             y-direction
70                vkomp = 0.25 * ( v(k,j,i)   + v(k,j+1,i) + &
71                                 v(k,j,i-1) + v(k,j+1,i-1) ) - v_gtrans
72                IF ( vkomp > 0.0 )  THEN
73                   tend(k,j,i) = tend(k,j,i) - vkomp * &
74                                         ( u(k,j,i) - u(k,j-1,i) ) * ddy
75                ELSE
76                   tend(k,j,i) = tend(k,j,i) - vkomp * &
77                                         ( u(k,j+1,i) - u(k,j,i) ) * ddy
78                ENDIF
79!
80!--             z-direction
81                wkomp = 0.25 * ( w(k,j,i)   + w(k-1,j,i) + &
82                                 w(k,j,i-1) + w(k-1,j,i-1) )
83                IF ( wkomp > 0.0 )  THEN
84                   tend(k,j,i) = tend(k,j,i) - wkomp * &
85                                         ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)
86                ELSE
87                   tend(k,j,i) = tend(k,j,i) - wkomp * &
88                                         ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1)
89                ENDIF
90
91             ENDDO
92          ENDDO
93       ENDDO
94
95    END SUBROUTINE advec_u_up
96
97
98!------------------------------------------------------------------------------!
99! Call for grid point i,j
100!------------------------------------------------------------------------------!
101    SUBROUTINE advec_u_up_ij( i, j )
102
103       USE arrays_3d
104       USE control_parameters
105       USE grid_variables
106       USE indices
107
108       IMPLICIT NONE
109
110       INTEGER ::  i, j, k
111
112       REAL ::  ukomp, vkomp, wkomp
113
114
115       DO  k = nzb_u_inner(j,i)+1, nzt
116!
117!--       x-direction
118          ukomp = u(k,j,i) - u_gtrans
119          IF ( ukomp > 0.0 )  THEN
120             tend(k,j,i) = tend(k,j,i) - ukomp * &
121                                         ( u(k,j,i) - u(k,j,i-1) ) * ddx
122          ELSE
123             tend(k,j,i) = tend(k,j,i) - ukomp * &
124                                         ( u(k,j,i+1) - u(k,j,i) ) * ddx
125          ENDIF
126!
127!--       y-direction
128          vkomp = 0.25 * ( v(k,j,i) + v(k,j+1,i) + v(k,j,i-1) + v(k,j+1,i-1) &
129                         ) - v_gtrans
130          IF ( vkomp > 0.0 )  THEN
131             tend(k,j,i) = tend(k,j,i) - vkomp * &
132                                         ( u(k,j,i) - u(k,j-1,i) ) * ddy
133          ELSE
134             tend(k,j,i) = tend(k,j,i) - vkomp * &
135                                         ( u(k,j+1,i) - u(k,j,i) ) * ddy
136          ENDIF
137!
138!--       z-direction
139          wkomp = 0.25 * ( w(k,j,i) + w(k-1,j,i) + w(k,j,i-1) + w(k-1,j,i-1) )
140          IF ( wkomp > 0.0 )  THEN
141             tend(k,j,i) = tend(k,j,i) - wkomp * &
142                                         ( u(k,j,i) - u(k-1,j,i) ) * ddzu(k)
143          ELSE
144             tend(k,j,i) = tend(k,j,i) - wkomp * &
145                                         ( u(k+1,j,i) - u(k,j,i) ) * ddzu(k+1)
146          ENDIF
147
148       ENDDO
149
150    END SUBROUTINE advec_u_up_ij
151
152 END MODULE advec_u_up_mod
Note: See TracBrowser for help on using the repository browser.