Ignore:
Timestamp:
May 10, 2020 5:05:07 PM (4 years ago)
Author:
raasch
Message:

salsa: added reading/writing of global restart data + reading/writing restart data with MPI-IO, bugfix for MPI-IO in plant_canopy_model_mod, tutorial user-interface dispersion_eularian_and_lpm_extended updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/plant_canopy_model_mod.f90

    r4517 r4525  
    2727! -----------------
    2828! $Id$
     29! bugfix for reading/writing pcm_...rate_av with MPI-IO
     30!
     31! 4517 2020-05-03 14:29:30Z raasch
    2932! added restart with MPI-IO for reading local arrays
    3033!
     
    17711774       LOGICAL ::  array_found  !<
    17721775
    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.
    17751782       CALL rd_mpi_io_check_array( 'pcm_heatrate_av' , found = array_found )
    17761783       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 )
    17791791       ENDIF
    17801792
    17811793       CALL rd_mpi_io_check_array( 'pcm_latentrate_av' , found = array_found )
    17821794       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 )
    17851802       ENDIF
    17861803
    17871804       CALL rd_mpi_io_check_array( 'pcm_transpirationrate_av' , found = array_found )
    17881805       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 )
    17911813       ENDIF
    17921814
     
    25702592    SUBROUTINE pcm_wrd_local
    25712593
     2594       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  tmp_3d  !< temporary array to store pcm data with
     2595                                                           !< non-standard vertical index bounds
     2596
    25722597       IF ( TRIM( restart_data_format_output ) == 'fortran_binary' )  THEN
    25732598
     
    25892614       ELSEIF ( TRIM( restart_data_format_output ) == 'mpi' )  THEN
    25902615
    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
    25922626          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 )
    25942632          ENDIF
    25952633          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 )
    25972639          ENDIF
    25982640
Note: See TracChangeset for help on using the changeset viewer.