source: palm/trunk/SOURCE/init_slope.f90 @ 646

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

last commit documented

  • Property svn:keywords set to Id
File size: 3.5 KB
RevLine 
[1]1 SUBROUTINE init_slope
2
[3]3!------------------------------------------------------------------------------!
[484]4! Current revisions:
[1]5! -----------------
[623]6!
[1]7!
8! Former revisions:
9! -----------------
[3]10! $Id: init_slope.f90 623 2010-12-10 08:52:17Z raasch $
[623]11!
12! 622 2010-12-10 08:08:13Z raasch
13! optional barriers included in order to speed up collective operations
14!
15! Feb. 2007
[3]16! RCS Log replace by Id keyword, revision history cleaned up
17!
[1]18! Revision 1.5  2006/02/23 12:35:34  raasch
19! nanz_2dh renamed ngp_2dh
20!
21! Revision 1.1  2000/04/27 07:06:24  raasch
22! Initial revision
23!
24!
25! Description:
26! ------------
27! Initialization of the temperature field and other variables used in case
28! of a sloping surface.
29! Remember: when a sloping surface is used, only one constant temperature
30!           gradient is allowed!
[3]31!------------------------------------------------------------------------------!
[1]32
33    USE arrays_3d
34    USE constants
35    USE grid_variables
36    USE indices
37    USE pegrid
38    USE control_parameters
39
40    IMPLICIT NONE
41
42    INTEGER ::  i, j, k
43    REAL    ::  alpha, height, pt_value, radius
44    REAL, DIMENSION(:), ALLOCATABLE ::  pt_init_local
45
46!
47!-- Calculate reference temperature field needed for computing buoyancy
48    ALLOCATE( pt_slope_ref(nzb:nzt+1,nxl-1:nxr+1) )
49
50    DO  i = nxl-1, nxr+1
51       DO  k = nzb, nzt+1
52
53!
54!--       Compute height of grid-point relative to lower left corner of
55!--       the total domain.
56!--       First compute the distance between the actual grid point and the
57!--       lower left corner as well as the angle between the line connecting
58!--       these points and the bottom of the model.
59          IF ( k /= nzb )  THEN
60             radius = SQRT( ( i * dx )**2 + zu(k)**2 )
61             height = zu(k)
62          ELSE
63             radius = SQRT( ( i * dx )**2 )
64             height = 0.0
65          ENDIF
66          IF ( radius /= 0.0 )  THEN
67             alpha = ASIN( height / radius )
68          ELSE
69             alpha = 0.0
70          ENDIF
71!
72!--       Compute temperatures in the rotated coordinate system
73          alpha    = alpha + alpha_surface / 180.0 * pi
74          pt_value = pt_surface + radius * SIN( alpha ) * &
75                                  pt_vertical_gradient(1) / 100.0
76          pt_slope_ref(k,i) = pt_value
77       ENDDO               
78    ENDDO
79
80!
81!-- Temperature difference between left and right boundary of the total domain,
82!-- used for the cyclic boundary in x-direction
83    pt_slope_offset = (nx+1) * dx * sin_alpha_surface * &
84                      pt_vertical_gradient(1) / 100.0
85
86
87!
88!-- Following action must only be executed for initial runs
89    IF ( TRIM( initializing_actions ) /= 'read_restart_data' )  THEN
90!
91!--    Set initial temperature equal to the reference temperature field
92       DO  j = nys-1, nyn+1
93          pt(:,j,:) = pt_slope_ref
94       ENDDO
95
96!
97!--    Recompute the mean initial temperature profile (mean along x-direction of
98!--    the rotated coordinate system)
99       ALLOCATE( pt_init_local(nzb:nzt+1) )
100       pt_init_local = 0.0
101       DO  i = nxl, nxr
102          DO  j =  nys, nyn
103             DO  k = nzb, nzt+1
104                pt_init_local(k) = pt_init_local(k) + pt(k,j,i)
105             ENDDO
106          ENDDO
[622]107       ENDDO
[1]108
109#if defined( __parallel )
[622]110       IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
111       CALL MPI_ALLREDUCE( pt_init_local, pt_init, nzt+2-nzb, MPI_REAL, &
112                            MPI_SUM, comm2d, ierr )
[1]113#else
[622]114       pt_init = pt_init_local
[1]115#endif
116
[622]117       pt_init = pt_init / ngp_2dh(0)
118       DEALLOCATE( pt_init_local )
[1]119
[622]120    ENDIF
[1]121
122 END SUBROUTINE init_slope
Note: See TracBrowser for help on using the repository browser.