Changeset 4525 for palm/trunk/SOURCE/plant_canopy_model_mod.f90
- Timestamp:
- May 10, 2020 5:05:07 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/plant_canopy_model_mod.f90
r4517 r4525 27 27 ! ----------------- 28 28 ! $Id$ 29 ! bugfix for reading/writing pcm_...rate_av with MPI-IO 30 ! 31 ! 4517 2020-05-03 14:29:30Z raasch 29 32 ! added restart with MPI-IO for reading local arrays 30 33 ! … … 1771 1774 LOGICAL :: array_found !< 1772 1775 1773 1774 !> TODO: following code does not work because arrays are sized 0:pch_index along k!!!!! 1776 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tmp_3d !< temporary array to store pcm data with 1777 !< non-standard vertical index bounds 1778 1779 ! 1780 !-- Plant canopy arrays have non standard reduced vertical index bounds. They are stored with 1781 !-- full vertical bounds (bzb:nzt+1) in the restart file and must be re-stored after reading. 1775 1782 CALL rd_mpi_io_check_array( 'pcm_heatrate_av' , found = array_found ) 1776 1783 IF ( array_found ) THEN 1777 IF ( .NOT. ALLOCATED( pcm_heatrate_av ) ) ALLOCATE( pcm_heatrate_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1778 CALL rrd_mpi_io( 'pcm_heatrate_av', pcm_heatrate_av ) 1784 IF ( .NOT. ALLOCATED( pcm_heatrate_av ) ) THEN 1785 ALLOCATE( pcm_heatrate_av(nzb:pch_index,nysg:nyng,nxlg:nxrg) ) 1786 ENDIF 1787 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1788 CALL rrd_mpi_io( 'pcm_heatrate_av', tmp_3d ) 1789 pcm_heatrate_av = tmp_3d(nzb:pch_index,:,:) 1790 DEALLOCATE( tmp_3d ) 1779 1791 ENDIF 1780 1792 1781 1793 CALL rd_mpi_io_check_array( 'pcm_latentrate_av' , found = array_found ) 1782 1794 IF ( array_found ) THEN 1783 IF ( .NOT. ALLOCATED( pcm_latentrate_av ) ) ALLOCATE( pcm_latentrate_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1784 CALL rrd_mpi_io( 'pcm_latentrate_av', pcm_latentrate_av ) 1795 IF ( .NOT. ALLOCATED( pcm_latentrate_av ) ) THEN 1796 ALLOCATE( pcm_latentrate_av(nzb:pch_index,nysg:nyng,nxlg:nxrg) ) 1797 ENDIF 1798 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1799 CALL rrd_mpi_io( 'pcm_latentrate_av', tmp_3d ) 1800 pcm_latentrate_av = tmp_3d(nzb:pch_index,:,:) 1801 DEALLOCATE( tmp_3d ) 1785 1802 ENDIF 1786 1803 1787 1804 CALL rd_mpi_io_check_array( 'pcm_transpirationrate_av' , found = array_found ) 1788 1805 IF ( array_found ) THEN 1789 IF ( .NOT. ALLOCATED( pcm_transpirationrate_av ) ) ALLOCATE( pcm_transpirationrate_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1790 CALL rrd_mpi_io( 'pcm_transpirationrate_av', pcm_transpirationrate_av ) 1806 IF ( .NOT. ALLOCATED( pcm_transpirationrate_av ) ) THEN 1807 ALLOCATE( pcm_transpirationrate_av(nzb:pch_index,nysg:nyng,nxlg:nxrg) ) 1808 ENDIF 1809 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 1810 CALL rrd_mpi_io( 'pcm_transpirationrate_av', tmp_3d ) 1811 pcm_transpirationrate_av = tmp_3d(nzb:pch_index,:,:) 1812 DEALLOCATE( tmp_3d ) 1791 1813 ENDIF 1792 1814 … … 2570 2592 SUBROUTINE pcm_wrd_local 2571 2593 2594 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: tmp_3d !< temporary array to store pcm data with 2595 !< non-standard vertical index bounds 2596 2572 2597 IF ( TRIM( restart_data_format_output ) == 'fortran_binary' ) THEN 2573 2598 … … 2589 2614 ELSEIF ( TRIM( restart_data_format_output ) == 'mpi' ) THEN 2590 2615 2591 IF ( ALLOCATED( pcm_heatrate_av ) ) CALL wrd_mpi_io( 'pcm_heatrate_av', pcm_heatrate_av ) 2616 ! 2617 !-- Plant canopy arrays have non standard reduced vertical index bounds. They are stored with 2618 !-- full vertical bounds (bzb:nzt+1) in the restart file and must be re-stored before writing. 2619 IF ( ALLOCATED( pcm_heatrate_av ) ) THEN 2620 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 2621 tmp_3d(nzb:pch_index,:,:) = pcm_heatrate_av 2622 tmp_3d(pch_index+1:nzt+1,:,:) = 0.0_wp 2623 CALL wrd_mpi_io( 'pcm_heatrate_av', tmp_3d ) 2624 DEALLOCATE( tmp_3d ) 2625 ENDIF 2592 2626 IF ( ALLOCATED( pcm_latentrate_av ) ) THEN 2593 CALL wrd_mpi_io( 'pcm_latentrate_av', pcm_latentrate_av ) 2627 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 2628 tmp_3d(nzb:pch_index,:,:) = pcm_latentrate_av 2629 tmp_3d(pch_index+1:nzt+1,:,:) = 0.0_wp 2630 CALL wrd_mpi_io( 'pcm_latentrate_av', tmp_3d ) 2631 DEALLOCATE( tmp_3d ) 2594 2632 ENDIF 2595 2633 IF ( ALLOCATED( pcm_transpirationrate_av ) ) THEN 2596 CALL wrd_write_string( 'pcm_transpirationrate_av', pcm_transpirationrate_av ) 2634 ALLOCATE( tmp_3d(nzb:nzt+1,nysg:nyng,nxlg:nxrg) ) 2635 tmp_3d(nzb:pch_index,:,:) = pcm_transpirationrate_av 2636 tmp_3d(pch_index+1:nzt+1,:,:) = 0.0_wp 2637 CALL wrd_mpi_io( 'pcm_transpirationrate_av', tmp_3d ) 2638 DEALLOCATE( tmp_3d ) 2597 2639 ENDIF 2598 2640
Note: See TracChangeset
for help on using the changeset viewer.