source: palm/trunk/SOURCE/advec_w_pw.f90 @ 2

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

Initial repository layout and content

File size: 4.4 KB
Line 
1 MODULE advec_w_pw_mod
2
3!------------------------------------------------------------------------------!
4! Actual revisions:
5! -----------------
6!
7!
8! Former revisions:
9! -----------------
10! $Log: advec_w_pw.f90,v $
11! Revision 1.15  2006/02/23 09:47:01  raasch
12! nzb_2d replaced by nzb_w_inner
13!
14! Revision 1.14  2004/01/30 10:13:07  raasch
15! Scalar lower k index nzb replaced by 2d-array nzb_2d
16!
17! Revision 1.13  2003/03/12 16:19:29  raasch
18! Full code replaced in the call for all gridpoints instead of calling the
19! _ij version (required by NEC, because otherwise no vectorization)
20!
21! Revision 1.12  2002/06/11 12:27:33  raasch
22! Former subroutine changed to a module which allows to be called for all grid
23! points of a single vertical column with index i,j or for all grid points by
24! using function overloading.
25!
26! Revision 1.11  2001/03/29 17:37:10  raasch
27! Translation of remaining German identifiers (variables, subroutines, etc.)
28!
29! Revision 1.10  2001/01/22 05:19:42  raasch
30! Module test_variables removed
31!
32! Revision 1.9  2000/01/20 10:18:31  letzel
33! All comments translated into English
34!
35! Revision 1.8  1998/08/05 06:51:10  raasch
36! Alle Gitterpunkte werden gleich behandelt (keine zentralen Differenzenquotien-
37! ten mehr bei Vertikaladvektion bei k=1)
38!
39! Revision 1.1  1997/08/11 06:10:29  raasch
40! Initial revision
41!
42!
43! Description:
44! ------------
45! Advection term for w velocity-component using Piacsek and Williams.
46! Vertical advection at the first grid point above the surface is done with
47! normal centred differences, because otherwise no information from the surface
48! would be communicated upwards due to w=0 at k=nzb.
49!------------------------------------------------------------------------------!
50
51    PRIVATE
52    PUBLIC advec_w_pw
53
54    INTERFACE advec_w_pw
55       MODULE PROCEDURE advec_w_pw
56       MODULE PROCEDURE advec_w_pw_ij
57    END INTERFACE advec_w_pw
58 
59 CONTAINS
60
61
62!------------------------------------------------------------------------------!
63! Call for all grid points
64!------------------------------------------------------------------------------!
65    SUBROUTINE advec_w_pw
66
67       USE arrays_3d
68       USE control_parameters
69       USE grid_variables
70       USE indices
71
72       IMPLICIT NONE
73
74       INTEGER ::  i, j, k
75       REAL    ::  gu, gv
76
77 
78       gu = 2.0 * u_gtrans
79       gv = 2.0 * v_gtrans
80       DO  i = nxl, nxr
81          DO  j = nys, nyn
82             DO  k = nzb_w_inner(j,i)+1, nzt
83                tend(k,j,i) = tend(k,j,i) - 0.25 * (                           &
84                         ( w(k,j,i+1) * ( u(k+1,j,i+1) + u(k,j,i+1) - gu )     &
85                         - w(k,j,i-1) * ( u(k+1,j,i) + u(k,j,i) - gu ) ) * ddx &
86                       + ( w(k,j+1,i) * ( v(k+1,j+1,i) + v(k,j+1,i) - gv )     &
87                         - w(k,j-1,i) * ( v(k+1,j,i) + v(k,j,i) - gv ) ) * ddy &
88                       + ( w(k+1,j,i) * ( w(k+1,j,i) + w(k,j,i) )              &
89                         - w(k-1,j,i) * ( w(k,j,i) + w(k-1,j,i) ) )            &
90                                                                  * ddzu(k+1)  &
91                                                   )
92             ENDDO
93          ENDDO
94       ENDDO
95
96    END SUBROUTINE advec_w_pw
97
98
99!------------------------------------------------------------------------------!
100! Call for grid point i,j
101!------------------------------------------------------------------------------!
102    SUBROUTINE advec_w_pw_ij( i, j )
103
104       USE arrays_3d
105       USE control_parameters
106       USE grid_variables
107       USE indices
108
109       IMPLICIT NONE
110
111       INTEGER ::  i, j, k
112       REAL    ::  gu, gv
113
114
115       gu = 2.0 * u_gtrans
116       gv = 2.0 * v_gtrans
117       DO  k = nzb_w_inner(j,i)+1, nzt
118          tend(k,j,i) = tend(k,j,i) - 0.25 * (                              &
119                         ( w(k,j,i+1) * ( u(k+1,j,i+1) + u(k,j,i+1) - gu )     &
120                         - w(k,j,i-1) * ( u(k+1,j,i) + u(k,j,i) - gu ) ) * ddx &
121                       + ( w(k,j+1,i) * ( v(k+1,j+1,i) + v(k,j+1,i) - gv )     &
122                         - w(k,j-1,i) * ( v(k+1,j,i) + v(k,j,i) - gv ) ) * ddy &
123                       + ( w(k+1,j,i) * ( w(k+1,j,i) + w(k,j,i) )              &
124                         - w(k-1,j,i) * ( w(k,j,i) + w(k-1,j,i) ) )            &
125                                                                  * ddzu(k+1)  &
126                                                )
127       ENDDO
128
129    END SUBROUTINE advec_w_pw_ij
130
131 END MODULE advec_w_pw_mod
Note: See TracBrowser for help on using the repository browser.