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

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

Initial repository layout and content

File size: 5.8 KB
Line 
1 SUBROUTINE swap_timelevel
2
3!-------------------------------------------------------------------------------!
4! Actual revisions:
5! -----------------
6!
7!
8! Former revisions:
9! -----------------
10! $Log: swap_timelevel.f90,v $
11! Revision 1.8  2004/01/28 15:28:18  raasch
12! Swaping for Runge-Kutta schemes implemented
13!
14! Revision 1.7  2002/05/02 18:58:36  raasch
15! Swaping of prognostic quantities re-changed to three timelevels
16!
17! Revision 1.6  2001/08/21  10:01:58  10:01:58  raasch (Siegfried Raasch)
18! Surface momentum fluxes are swapped also when they are prescribed
19!
20! Revision 1.5  2001/03/30 07:54:39  raasch
21! Swaping of prognostic quantities changed over from three to two timelevels,
22! Translation of remaining German identifiers (variables, subroutines, etc.)
23!
24! Revision 1.4  2001/01/29 12:36:03  raasch
25! Passive scalar is considered
26!
27! Revision 1.3  2001/01/25 07:26:48  raasch
28! Sensible and latent heat fluxes are swaped, when use_surface_fluxes = .TRUE.,
29! module test_variables removed
30!
31! Revision 1.2  2000/04/13 13:59:26  schroeter
32! + swapping timelevels of moisture variables
33!
34! Revision 1.1  2000/01/10  10:08:58  10:08:58  raasch (Siegfried Raasch)
35! Initial revision
36!
37!
38! Description:
39! ------------
40! Swap of timelevels of variables after each timestep
41!-------------------------------------------------------------------------------!
42
43    USE arrays_3d
44    USE cpulog
45    USE interfaces
46    USE control_parameters
47
48    IMPLICIT NONE
49
50
51    CALL cpu_log( log_point(28), 'swap_timelevel', 'start' )
52
53!
54!-- Incrementing timestep counter
55    timestep_count = timestep_count + 1
56
57!
58!-- Swap of 3-level variables
59    IF ( timestep_scheme(1:5) /= 'runge' )  THEN
60
61       SELECT CASE ( MOD( timestep_count, 3 ) )
62
63          CASE ( 0 )
64
65             u_m  => u_1;   u  => u_2;  u_p  => u_3
66             v_m  => v_1;   v  => v_2;  v_p  => v_3
67             w_m  => w_1;   w  => w_2;  w_p  => w_3
68             pt_m => pt_1;  pt => pt_2; pt_p => pt_3
69             IF ( .NOT. constant_diffusion )  THEN
70                e_m => e_1;  e => e_2;  e_p => e_3
71             ENDIF
72             IF ( moisture  .OR.  passive_scalar )  THEN
73                q_m => q_1;  q => q_2;  q_p => q_3
74             ENDIF
75
76          CASE ( 1 )
77
78             u_m  => u_2;   u  => u_3;  u_p  => u_1
79             v_m  => v_2;   v  => v_3;  v_p  => v_1
80             w_m  => w_2;   w  => w_3;  w_p  => w_1
81             pt_m => pt_2;  pt => pt_3; pt_p => pt_1
82             IF ( .NOT. constant_diffusion )  THEN
83                e_m => e_2;  e => e_3;  e_p => e_1
84             ENDIF
85             IF ( moisture  .OR.  passive_scalar )  THEN
86                q_m => q_2;  q => q_3;  q_p => q_1
87             ENDIF
88
89          CASE ( 2 )
90
91             u_m  => u_3;   u  => u_1;  u_p  => u_2
92             v_m  => v_3;   v  => v_1;  v_p  => v_2
93             w_m  => w_3;   w  => w_1;  w_p  => w_2
94             pt_m => pt_3;  pt => pt_1; pt_p => pt_2
95             IF ( .NOT. constant_diffusion )  THEN
96                e_m => e_3;  e => e_1;  e_p => e_2
97             ENDIF
98             IF ( moisture  .OR.  passive_scalar )  THEN
99                q_m => q_3;  q => q_1;  q_p => q_2
100             ENDIF
101
102       END SELECT
103
104    ENDIF
105
106!
107!-- Swap of 2-level variables
108    SELECT CASE ( MOD( timestep_count, 2 ) )
109
110       CASE ( 0 )
111
112          IF ( timestep_scheme(1:5) == 'runge' )  THEN
113
114             u  => u_1;   u_p  => u_2
115             v  => v_1;   v_p  => v_2
116             w  => w_1;   w_p  => w_2
117             pt => pt_1;  pt_p => pt_2
118             IF ( .NOT. constant_diffusion )  THEN
119                e => e_1;  e_p => e_2
120             ENDIF
121             IF ( moisture  .OR.  passive_scalar )  THEN
122                q => q_1;  q_p => q_2
123             ENDIF
124
125          ELSE
126!
127!--          Old timelevels are needed for explicit diffusion within leapfrog
128             IF ( .NOT. constant_diffusion )  THEN
129                kh_m => kh_1;  kh => kh_2
130                km_m => km_1;  km => km_2
131                IF ( use_surface_fluxes )  THEN
132                   usws_m => usws_1;  usws => usws_2
133                   vsws_m => vsws_1;  vsws => vsws_2
134                   shf_m  => shf_1;   shf  => shf_2
135                   IF ( moisture  .OR.  passive_scalar )  THEN
136                      qsws_m => qsws_1;  qsws => qsws_2
137                   ENDIF
138                ENDIF
139                IF ( prandtl_layer )  THEN
140                   rif_m  => rif_1;   rif  => rif_2
141                ENDIF
142             ENDIF
143
144             IF ( moisture )  THEN
145                vpt_m => vpt_1;  vpt => vpt_2
146             ENDIF
147
148          ENDIF
149
150       CASE ( 1 )
151
152          IF ( timestep_scheme(1:5) == 'runge' )  THEN
153
154             u  => u_2;   u_p  => u_1
155             v  => v_2;   v_p  => v_1
156             w  => w_2;   w_p  => w_1
157             pt => pt_2;  pt_p => pt_1
158             IF ( .NOT. constant_diffusion )  THEN
159                e => e_2;  e_p => e_1
160             ENDIF
161             IF ( moisture  .OR.  passive_scalar )  THEN
162                q => q_2;  q_p => q_1
163             ENDIF
164
165          ELSE
166
167             IF ( .NOT. constant_diffusion )  THEN
168                kh_m => kh_2;  kh => kh_1
169                km_m => km_2;  km => km_1
170                IF ( use_surface_fluxes )  THEN
171                   usws_m => usws_2;  usws => usws_1
172                   vsws_m => vsws_2;  vsws => vsws_1
173                   shf_m  => shf_2;   shf  => shf_1
174                   IF ( moisture  .OR.  passive_scalar )  THEN
175                      qsws_m => qsws_2;  qsws => qsws_1
176                   ENDIF
177                ENDIF
178                IF ( prandtl_layer )  THEN
179                   rif_m  => rif_2;   rif  => rif_1
180                ENDIF
181             ENDIF
182
183             IF ( moisture )  THEN
184                vpt_m => vpt_2;  vpt => vpt_1
185             ENDIF
186
187          ENDIF
188
189    END SELECT
190
191    CALL cpu_log( log_point(28), 'swap_timelevel', 'stop' )
192
193 END SUBROUTINE swap_timelevel
194
195
Note: See TracBrowser for help on using the repository browser.