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

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

preliminary update of bugfixes and extensions for non-cyclic BCs

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