Changeset 1551 for palm/trunk/SOURCE/data_output_3d.f90
- Timestamp:
- Mar 3, 2015 2:18:16 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/data_output_3d.f90
r1360 r1551 20 20 ! Current revisions: 21 21 ! ------------------ 22 ! 22 ! Added suppport for land surface model and radiation model output. In the course 23 ! of this action, the limits for vertical loops have been changed (from nzb and 24 ! nzt+1 to nzb_do and nzt_do, respectively in order to allow soil model output). 25 ! Moreover, a new vertical grid zs was introduced. 23 26 ! 24 27 ! Former revisions: … … 112 115 USE kinds 113 116 117 USE land_surface_model_mod, & 118 ONLY: m_soil, m_soil_av, nzb_soil, nzt_soil, t_soil, t_soil_av 119 114 120 USE netcdf_control 115 121 … … 130 136 INTEGER(iwp) :: k !: 131 137 INTEGER(iwp) :: n !: 138 INTEGER(iwp) :: nzb_do !: vertical lower limit for data output 139 INTEGER(iwp) :: nzt_do !: vertical upper limit for data output 132 140 INTEGER(iwp) :: pos !: 133 141 INTEGER(iwp) :: prec !: … … 183 191 184 192 ! 185 !-- Allocate a temporary array with the desired output dimensions.186 ALLOCATE( local_pf(nxlg:nxrg,nysg:nyng,nzb:nz_do3d) )187 188 !189 193 !-- Update the netCDF time axis 190 194 !-- In case of parallel output, this is only done by PE0 to increase the … … 209 213 !-- Store the array chosen on the temporary array. 210 214 resorted = .FALSE. 215 nzb_do = nzb 216 nzt_do = nz_do3d 217 218 ! 219 !-- Allocate a temporary array with the desired output dimensions. 220 ALLOCATE( local_pf(nxlg:nxrg,nysg:nyng,nzb_do:nzt_do) ) 221 211 222 SELECT CASE ( TRIM( do3d(av,if) ) ) 212 223 … … 223 234 ELSE 224 235 to_be_resorted => lpt_av 236 ENDIF 237 238 CASE ( 'm_soil' ) 239 nzb_do = nzb_soil 240 nzt_do = nzt_soil 241 ! 242 !-- For soil model quantities, it is required to re-allocate local_pf 243 DEALLOCATE ( local_pf ) 244 ALLOCATE( local_pf(nxlg:nxrg,nysg:nyng,nzb_do:nzt_do) ) 245 246 IF ( av == 0 ) THEN 247 to_be_resorted => m_soil 248 ELSE 249 to_be_resorted => m_soil_av 225 250 ENDIF 226 251 … … 251 276 DO i = nxlg, nxrg 252 277 DO j = nysg, nyng 253 DO k = nzb , nz_do3d278 DO k = nzb_do, nzt_do 254 279 local_pf(i,j,k) = tend(k,j,i) 255 280 ENDDO … … 267 292 DO i = nxl, nxr 268 293 DO j = nys, nyn 269 DO k = nzb , nz_do3d294 DO k = nzb_do, nzt_do 270 295 number_of_particles = prt_count(k,j,i) 271 296 IF (number_of_particles <= 0) CYCLE … … 296 321 DO i = nxlg, nxrg 297 322 DO j = nysg, nyng 298 DO k = nzb , nz_do3d323 DO k = nzb_do, nzt_do 299 324 local_pf(i,j,k) = tend(k,j,i) 300 325 ENDDO … … 336 361 DO i = nxlg, nxrg 337 362 DO j = nysg, nyng 338 DO k = nzb , nz_do3d363 DO k = nzb_do, nzt_do 339 364 local_pf(i,j,k) = pt(k,j,i) + l_d_cp * & 340 365 pt_d_t(k) * & … … 389 414 DO i = nxl, nxr 390 415 DO j = nys, nyn 391 DO k = nzb , nz_do3d416 DO k = nzb_do, nzt_do 392 417 number_of_particles = prt_count(k,j,i) 393 418 IF (number_of_particles <= 0) CYCLE … … 409 434 DO i = nxlg, nxrg 410 435 DO j = nysg, nyng 411 DO k = nzb , nz_do3d436 DO k = nzb_do, nzt_do 412 437 local_pf(i,j,k) = tend(k,j,i) 413 438 ENDDO … … 431 456 DO i = nxlg, nxrg 432 457 DO j = nysg, nyng 433 DO k = nzb , nz_do3d458 DO k = nzb_do, nzt_do 434 459 local_pf(i,j,k) = q(k,j,i) - ql(k,j,i) 435 460 ENDDO … … 462 487 ENDIF 463 488 489 CASE ( 't_soil' ) 490 nzb_do = nzb_soil 491 nzt_do = nzt_soil 492 ! 493 !-- For soil model quantities, it is required to re-allocate local_pf 494 DEALLOCATE ( local_pf ) 495 ALLOCATE( local_pf(nxlg:nxrg,nysg:nyng,nzb_do:nzt_do) ) 496 497 IF ( av == 0 ) THEN 498 to_be_resorted => t_soil 499 ELSE 500 to_be_resorted => t_soil_av 501 ENDIF 502 464 503 CASE ( 'u' ) 465 504 IF ( av == 0 ) THEN … … 494 533 !-- User defined quantity 495 534 CALL user_data_output_3d( av, do3d(av,if), found, local_pf, & 496 nz _do3d)535 nzb_do, nzt_do ) 497 536 resorted = .TRUE. 498 537 … … 510 549 DO i = nxlg, nxrg 511 550 DO j = nysg, nyng 512 DO k = nzb , nz_do3d551 DO k = nzb_do, nzt_do 513 552 local_pf(i,j,k) = to_be_resorted(k,j,i) 514 553 ENDDO … … 531 570 DO i = 0, io_blocks-1 532 571 IF ( i == io_group ) THEN 533 WRITE ( 30 ) nxlg, nxrg, nysg, nyng, nzb , nz_do3d534 WRITE ( 30 ) local_pf 572 WRITE ( 30 ) nxlg, nxrg, nysg, nyng, nzb_do, nzt_do 573 WRITE ( 30 ) local_pf(:,:,nzb_do:nzt_do) 535 574 ENDIF 536 575 #if defined( __parallel ) … … 547 586 IF ( nxr == nx .AND. nyn /= ny ) THEN 548 587 nc_stat = NF90_PUT_VAR( id_set_3d(av), id_var_do3d(av,if), & 549 local_pf(nxl:nxr+1,nys:nyn,nzb :nz_do3d),&550 start = (/ nxl+1, nys+1, nzb +1, do3d_time_count(av) /), &551 count = (/ nxr-nxl+2, nyn-nys+1, nz _do3d-nzb+1, 1 /) )588 local_pf(nxl:nxr+1,nys:nyn,nzb_do:nzt_do), & 589 start = (/ nxl+1, nys+1, nzb_do+1, do3d_time_count(av) /), & 590 count = (/ nxr-nxl+2, nyn-nys+1, nzt_do-nzb_do+1, 1 /) ) 552 591 ELSEIF ( nxr /= nx .AND. nyn == ny ) THEN 553 592 nc_stat = NF90_PUT_VAR( id_set_3d(av), id_var_do3d(av,if), & 554 local_pf(nxl:nxr,nys:nyn+1,nzb :nz_do3d),&555 start = (/ nxl+1, nys+1, nzb +1, do3d_time_count(av) /), &556 count = (/ nxr-nxl+1, nyn-nys+2, nz _do3d-nzb+1, 1 /) )593 local_pf(nxl:nxr,nys:nyn+1,nzb_do:nzt_do), & 594 start = (/ nxl+1, nys+1, nzb_do+1, do3d_time_count(av) /), & 595 count = (/ nxr-nxl+1, nyn-nys+2, nzt_do-nzb_do+1, 1 /) ) 557 596 ELSEIF ( nxr == nx .AND. nyn == ny ) THEN 558 597 nc_stat = NF90_PUT_VAR( id_set_3d(av), id_var_do3d(av,if), & 559 local_pf(nxl:nxr+1,nys:nyn+1,nzb :nz_do3d), &560 start = (/ nxl+1, nys+1, nzb +1, do3d_time_count(av) /), &561 count = (/ nxr-nxl+2, nyn-nys+2, nz _do3d-nzb+1, 1 /) )598 local_pf(nxl:nxr+1,nys:nyn+1,nzb_do:nzt_do ), & 599 start = (/ nxl+1, nys+1, nzb_do+1, do3d_time_count(av) /), & 600 count = (/ nxr-nxl+2, nyn-nys+2, nzt_do-nzb_do+1, 1 /) ) 562 601 ELSE 563 602 nc_stat = NF90_PUT_VAR( id_set_3d(av), id_var_do3d(av,if), & 564 local_pf(nxl:nxr,nys:nyn,nzb :nz_do3d),&565 start = (/ nxl+1, nys+1, nzb +1, do3d_time_count(av) /), &566 count = (/ nxr-nxl+1, nyn-nys+1, nz _do3d-nzb+1, 1 /) )603 local_pf(nxl:nxr,nys:nyn,nzb_do:nzt_do), & 604 start = (/ nxl+1, nys+1, nzb_do+1, do3d_time_count(av) /), & 605 count = (/ nxr-nxl+1, nyn-nys+1, nzt_do-nzb_do+1, 1 /) ) 567 606 ENDIF 568 607 CALL handle_netcdf_error( 'data_output_3d', 386 ) … … 572 611 #if defined( __netcdf ) 573 612 nc_stat = NF90_PUT_VAR( id_set_3d(av), id_var_do3d(av,if), & 574 local_pf(nxl:nxr+1,nys:nyn+1,nzb :nz_do3d),&613 local_pf(nxl:nxr+1,nys:nyn+1,nzb_do:nzt_do), & 575 614 start = (/ 1, 1, 1, do3d_time_count(av) /), & 576 count = (/ nx+2, ny+2, nz _do3d-nzb+1, 1 /) )615 count = (/ nx+2, ny+2, nzt_do-nzb_do+1, 1 /) ) 577 616 CALL handle_netcdf_error( 'data_output_3d', 446 ) 578 617 #endif … … 581 620 if = if + 1 582 621 622 ! 623 !-- Deallocate temporary array 624 DEALLOCATE ( local_pf ) 625 583 626 ENDDO 584 585 !586 !-- Deallocate temporary array.587 DEALLOCATE( local_pf )588 589 627 590 628 CALL cpu_log( log_point(14), 'data_output_3d', 'stop' )
Note: See TracChangeset
for help on using the changeset viewer.