Changeset 1833 for palm/trunk/SOURCE/spectra_mod.f90
- Timestamp:
- Apr 7, 2016 2:23:03 PM (8 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/spectra_mod.f90
r1832 r1833 1 !> @file spectr um.f901 !> @file spectra_mod.f90 2 2 !--------------------------------------------------------------------------------! 3 3 ! This file is part of PALM. … … 19 19 ! Current revisions: 20 20 ! ----------------- 21 ! 21 ! file renamed, reading the spectra_par NAMELIST moved from package_parin to 22 ! here 22 23 ! 23 24 ! Former revisions: … … 91 92 !> transpose_zyd needs modification). 92 93 !------------------------------------------------------------------------------! 93 MODULE spectr um94 MODULE spectra_mod 94 95 95 96 USE kinds … … 97 98 PRIVATE 98 99 99 CHARACTER (LEN=6), DIMENSION(1:5) :: header_char = (/ 'PS(u) ', 'PS(v) ',& 100 'PS(w) ', 'PS(pt)', 'PS(q) ' /) 101 CHARACTER (LEN=2), DIMENSION(10) :: spectra_direction = 'x' 102 CHARACTER (LEN=10), DIMENSION(10) :: data_output_sp = ' ' 103 CHARACTER (LEN=25), DIMENSION(1:5) :: utext_char = & 104 (/ '-power spectrum of u ', & 105 '-power spectrum of v ', & 106 '-power spectrum of w ', & 107 '-power spectrum of ^1185 ', & 108 '-power spectrum of q ' /) 109 CHARACTER (LEN=39), DIMENSION(1:5) :: ytext_char = & 110 (/ 'k ^2236 ^2566^2569<u(k) in m>2s>->2 ', & 111 'k ^2236 ^2566^2569<v(k) in m>2s>->2 ', & 112 'k ^2236 ^2566^2569<w(k) in m>2s>->2 ', & 113 'k ^2236 ^2566^2569<^1185(k) in m>2s>->2', & 114 'k ^2236 ^2566^2569<q(k) in m>2s>->2 ' /) 115 116 INTEGER(iwp) :: klist_x = 0, klist_y = 0, n_sp_x = 0, n_sp_y = 0 117 118 INTEGER(iwp) :: comp_spectra_level(100) = 999999, & 119 lstyles(100) = (/ 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 120 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 121 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 122 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 123 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 124 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 125 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 126 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 127 0, 7, 3, 10, 1, 4, 9, 2, 6, 8, & 128 0, 7, 3, 10, 1, 4, 9, 2, 6, 8 /), & 129 plot_spectra_level(100) = 999999 130 131 REAL(wp) :: time_to_start_sp = 0.0_wp 132 133 PUBLIC comp_spectra_level, data_output_sp, header_char, klist_x, klist_y, & 134 lstyles, n_sp_x, n_sp_y, plot_spectra_level, spectra_direction, & 135 utext_char, ytext_char 100 CHARACTER (LEN=2), DIMENSION(10) :: spectra_direction = 'x' 101 CHARACTER (LEN=10), DIMENSION(10) :: data_output_sp = ' ' 102 103 INTEGER(iwp) :: average_count_sp = 0 104 INTEGER(iwp) :: dosp_time_count = 0 105 INTEGER(iwp) :: n_sp_x = 0, n_sp_y = 0 106 107 INTEGER(iwp) :: comp_spectra_level(100) = 999999 108 109 LOGICAL :: calculate_spectra = .FALSE. !< internal switch that spectra are calculated 110 LOGICAL :: spectra_initialized = .FALSE. !< internal switch that spectra related quantities are initialized 111 112 REAL(wp) :: averaging_interval_sp = 9999999.9_wp !< averaging interval for spectra output 113 REAL(wp) :: dt_dosp = 9999999.9_wp !< time interval for spectra output 114 REAL(wp) :: skip_time_dosp = 9999999.9_wp !< no output of spectra data before this interval has passed 115 116 REAL(wp), DIMENSION(:), ALLOCATABLE :: var_d 117 118 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: spectrum_x, spectrum_y 136 119 137 120 SAVE … … 153 136 END INTERFACE calc_spectra_y 154 137 155 PUBLIC calc_spectra 138 INTERFACE spectra_check_parameters 139 MODULE PROCEDURE spectra_check_parameters 140 END INTERFACE spectra_check_parameters 141 142 INTERFACE spectra_header 143 MODULE PROCEDURE spectra_header 144 END INTERFACE spectra_header 145 146 INTERFACE spectra_init 147 MODULE PROCEDURE spectra_init 148 END INTERFACE spectra_init 149 150 INTERFACE spectra_parin 151 MODULE PROCEDURE spectra_parin 152 END INTERFACE spectra_parin 153 154 PUBLIC average_count_sp, averaging_interval_sp, calc_spectra, & 155 calculate_spectra, comp_spectra_level, data_output_sp, & 156 dosp_time_count, dt_dosp, n_sp_x, n_sp_y, plot_spectra_level, & 157 skip_time_dosp, spectra_check_parameters, spectra_direction, & 158 spectra_header, spectra_init, spectra_parin, spectrum_x, & 159 spectrum_y, var_d 156 160 157 161 158 162 CONTAINS 163 164 !------------------------------------------------------------------------------! 165 ! Description: 166 ! ------------ 167 !> Parin for &spectra_par for calculating spectra 168 !------------------------------------------------------------------------------! 169 SUBROUTINE spectra_parin 170 171 USE control_parameters, & 172 ONLY: dt_data_output 173 174 IMPLICIT NONE 175 176 CHARACTER (LEN=80) :: line !< dummy string that contains the current & 177 !< line of the parameter file 178 179 NAMELIST /spectra_par/ averaging_interval_sp, comp_spectra_level, & 180 data_output_sp, dt_dosp, skip_time_dosp, & 181 spectra_direction 182 183 184 ! 185 !-- Position the namelist-file at the beginning (it was already opened in 186 !-- parin), search for the namelist-group of the package and position the 187 !-- file at this line. 188 line = ' ' 189 190 ! 191 !-- Try to find the spectra package 192 REWIND ( 11 ) 193 line = ' ' 194 DO WHILE ( INDEX( line, '&spectra_par' ) == 0 ) 195 READ ( 11, '(A)', END=10 ) line 196 ENDDO 197 BACKSPACE ( 11 ) 198 199 ! 200 !-- Read namelist 201 READ ( 11, spectra_par ) 202 203 ! 204 !-- Default setting of dt_dosp here (instead of check_parameters), because 205 !-- its current value is needed in init_pegrid 206 IF ( dt_dosp == 9999999.9_wp ) dt_dosp = dt_data_output 207 208 ! 209 !-- Set general switch that spectra shall be calculated 210 calculate_spectra = .TRUE. 211 212 10 CONTINUE 213 214 END SUBROUTINE spectra_parin 215 216 217 218 !------------------------------------------------------------------------------! 219 ! Description: 220 ! ------------ 221 !> Initialization of spectra related variables 222 !------------------------------------------------------------------------------! 223 SUBROUTINE spectra_init 224 225 USE indices, & 226 ONLY: nx, ny, nzb, nzt 227 228 IMPLICIT NONE 229 230 IF ( spectra_initialized ) RETURN 231 232 IF ( dt_dosp /= 9999999.9_wp ) THEN 233 ALLOCATE( spectrum_x( 1:nx/2, 1:10, 1:10 ), & 234 spectrum_y( 1:ny/2, 1:10, 1:10 ) ) 235 spectrum_x = 0.0_wp 236 spectrum_y = 0.0_wp 237 238 ALLOCATE( var_d(nzb:nzt+1) ) 239 var_d = 0.0_wp 240 ENDIF 241 242 spectra_initialized = .TRUE. 243 244 END SUBROUTINE spectra_init 245 246 247 248 !------------------------------------------------------------------------------! 249 ! Description: 250 ! ------------ 251 !> Check spectra related quantities 252 !------------------------------------------------------------------------------! 253 SUBROUTINE spectra_check_parameters 254 255 USE control_parameters, & 256 ONLY: averaging_interval, message_string, skip_time_data_output 257 258 IMPLICIT NONE 259 260 ! 261 !-- Check the average interval 262 IF ( averaging_interval_sp == 9999999.9_wp ) THEN 263 averaging_interval_sp = averaging_interval 264 ENDIF 265 266 IF ( averaging_interval_sp > dt_dosp ) THEN 267 WRITE( message_string, * ) 'averaging_interval_sp = ', & 268 averaging_interval_sp, ' must be <= dt_dosp = ', dt_dosp 269 CALL message( 'spectra_check_parameters', 'PA0087', 1, 2, 0, 6, 0 ) 270 ENDIF 271 272 ! 273 !-- Set the default skip time interval for data output, if necessary 274 IF ( skip_time_dosp == 9999999.9_wp ) & 275 skip_time_dosp = skip_time_data_output 276 277 END SUBROUTINE spectra_check_parameters 278 279 280 281 !------------------------------------------------------------------------------! 282 ! Description: 283 ! ------------ 284 !> Header output for spectra 285 !> 286 !> @todo Output of netcdf data format and compression level 287 !------------------------------------------------------------------------------! 288 SUBROUTINE spectra_header ( io ) 289 290 USE control_parameters, & 291 ONLY: dt_averaging_input_pr 292 293 ! USE netcdf_interface, & 294 ! ONLY: netcdf_data_format_string, netcdf_deflate 295 296 IMPLICIT NONE 297 298 CHARACTER (LEN=40) :: output_format !< internal string 299 300 INTEGER(iwp) :: i !< internal counter 301 INTEGER(iwp), INTENT(IN) :: io !< Unit of the output file 302 303 ! 304 !-- Spectra output 305 IF ( dt_dosp /= 9999999.9_wp ) THEN 306 WRITE ( io, 1 ) 307 308 ! output_format = netcdf_data_format_string 309 ! IF ( netcdf_deflate == 0 ) THEN 310 ! WRITE ( io, 2 ) output_format 311 ! ELSE 312 ! WRITE ( io, 3 ) TRIM( output_format ), netcdf_deflate 313 ! ENDIF 314 WRITE ( io, 2 ) 'see profiles or other quantities' 315 WRITE ( io, 4 ) dt_dosp 316 IF ( skip_time_dosp /= 0.0_wp ) WRITE ( io, 5 ) skip_time_dosp 317 WRITE ( io, 6 ) ( data_output_sp(i), i = 1,10 ), & 318 ( spectra_direction(i), i = 1,10 ), & 319 ( comp_spectra_level(i), i = 1,100 ), & 320 averaging_interval_sp, dt_averaging_input_pr 321 ENDIF 322 323 1 FORMAT (' Spectra:') 324 2 FORMAT (' Output format: ',A/) 325 3 FORMAT (' Output format: ',A, ' compressed with level: ',I1/) 326 4 FORMAT (' Output every ',F7.1,' s'/) 327 5 FORMAT (' No output during initial ',F8.2,' s') 328 6 FORMAT (' Arrays: ', 10(A5,',')/ & 329 ' Directions: ', 10(A5,',')/ & 330 ' height levels k = ', 20(I3,',')/ & 331 ' ', 20(I3,',')/ & 332 ' ', 20(I3,',')/ & 333 ' ', 20(I3,',')/ & 334 ' ', 19(I3,','),I3,'.'/ & 335 ' Time averaged over ', F7.1, ' s,' / & 336 ' Profiles for the time averaging are taken every ', & 337 F6.1,' s') 338 339 END SUBROUTINE spectra_header 340 341 159 342 160 343 SUBROUTINE calc_spectra … … 164 347 165 348 USE control_parameters, & 166 ONLY: average_count_sp,bc_lr_cyc, bc_ns_cyc, message_string, psolver349 ONLY: bc_lr_cyc, bc_ns_cyc, message_string, psolver 167 350 168 351 USE cpulog, & … … 191 374 192 375 CALL cpu_log( log_point(30), 'calc_spectra', 'start' ) 376 377 ! 378 !-- Initialize spectra related quantities 379 CALL spectra_init 193 380 194 381 ! … … 308 495 309 496 USE statistics, & 310 ONLY: hom , var_d497 ONLY: hom 311 498 312 499 … … 411 598 ONLY: comm2d, ierr, myid 412 599 413 USE statistics, &414 ONLY: spectrum_x, var_d415 416 600 USE transpose_indices, & 417 601 ONLY: nyn_x, nys_x, nzb_x, nzt_x … … 554 738 ONLY: comm2d, ierr, myid 555 739 556 USE statistics, &557 ONLY: spectrum_y, var_d558 559 740 USE transpose_indices, & 560 741 ONLY: nxl_yd, nxr_yd, nzb_yd, nzt_yd … … 669 850 END SUBROUTINE calc_spectra_y 670 851 671 END MODULE spectr um852 END MODULE spectra_mod
Note: See TracChangeset
for help on using the changeset viewer.