Ignore:
Timestamp:
Apr 13, 2020 8:11:20 PM (4 years ago)
Author:
raasch
Message:

restart data handling with MPI-IO added, first part

File:
1 edited

Legend:

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

    r4450 r4495  
    2525! -----------------
    2626! $Id$
     27! restart data handling with MPI-IO added
     28!
     29! 4450 2020-03-09 19:12:57Z suehring
    2730! Missing from_file check
    2831!
     
    234237               end_time, humidity, intermediate_timestep_count,                &
    235238               initializing_actions, intermediate_timestep_count_max,          &
    236                land_surface, max_masks, pt_surface,                            &
     239               land_surface, max_masks, pt_surface, restart_data_format_output,                    &
    237240               rho_surface, spinup, spinup_pt_mean, spinup_time,               &
    238241               surface_pressure, timestep_scheme, tsc,                         &
     
    286289        ONLY:  albedo, albedo_type, emissivity, force_radiation_call,          &
    287290               radiation, radiation_scheme, unscheduled_radiation_calls
     291
     292    USE restart_data_mpi_io_mod,                                                                   &
     293        ONLY:  rd_mpi_io_surface_filetypes, wrd_mpi_io, wrd_mpi_io_surface
    288294
    289295    USE statistics,                                                            &
     
    64906496
    64916497    CHARACTER (LEN=1) ::  dum    !< dummy to create correct string for creating variable string
     6498
    64926499    INTEGER(iwp)      ::  l      !< index variable for surface orientation
    64936500
    6494     CALL wrd_write_string( 'ns_h_on_file_lsm' )
    6495     WRITE ( 14 )  surf_lsm_h%ns
    6496 
    6497     CALL wrd_write_string( 'ns_v_on_file_lsm' )
    6498     WRITE ( 14 )  surf_lsm_v(0:3)%ns
    6499 
    6500 
    6501     IF ( ALLOCATED( c_liq_av ) )  THEN
    6502        CALL wrd_write_string( 'c_liq_av' )
    6503        WRITE ( 14 )  c_liq_av
     6501    INTEGER(iwp),DIMENSION(nys:nyn,nxl:nxr) ::  global_start_index  !< index for surface data (MPI-IO)
     6502
     6503    LOGICAL ::  surface_data_to_write  !< switch for MPI-I/O if PE has surface data to write
     6504
     6505
     6506    IF ( TRIM( restart_data_format_output ) == 'fortran_binary' )  THEN
     6507
     6508       CALL wrd_write_string( 'ns_h_on_file_lsm' )
     6509       WRITE ( 14 )  surf_lsm_h%ns
     6510
     6511       CALL wrd_write_string( 'ns_v_on_file_lsm' )
     6512       WRITE ( 14 )  surf_lsm_v(0:3)%ns
     6513
     6514
     6515       IF ( ALLOCATED( c_liq_av ) )  THEN
     6516          CALL wrd_write_string( 'c_liq_av' )
     6517          WRITE ( 14 )  c_liq_av
     6518       ENDIF
     6519
     6520       IF ( ALLOCATED( c_soil_av ) )  THEN
     6521          CALL wrd_write_string( 'c_soil_av' )
     6522          WRITE ( 14 )  c_soil_av
     6523       ENDIF
     6524
     6525       IF ( ALLOCATED( c_veg_av ) )  THEN
     6526          CALL wrd_write_string( 'c_veg_av' )
     6527          WRITE ( 14 )  c_veg_av
     6528       ENDIF
     6529
     6530       IF ( ALLOCATED( lai_av ) )  THEN
     6531          CALL wrd_write_string( 'lai_av' )
     6532          WRITE ( 14 )  lai_av
     6533       ENDIF
     6534
     6535       IF ( ALLOCATED( m_liq_av ) )  THEN
     6536          CALL wrd_write_string( 'm_liq_av' )
     6537          WRITE ( 14 )  m_liq_av
     6538       ENDIF
     6539
     6540       IF ( ALLOCATED( m_soil_av ) )  THEN
     6541          CALL wrd_write_string( 'm_soil_av' )
     6542          WRITE ( 14 )  m_soil_av
     6543       ENDIF
     6544
     6545       IF ( ALLOCATED( qsws_liq_av ) )  THEN
     6546          CALL wrd_write_string( 'qsws_liq_av' )
     6547          WRITE ( 14 )  qsws_liq_av
     6548       ENDIF
     6549
     6550       IF ( ALLOCATED( qsws_soil_av ) )  THEN
     6551          CALL wrd_write_string( 'qsws_soil_av' )
     6552          WRITE ( 14 )  qsws_soil_av
     6553       ENDIF
     6554
     6555       IF ( ALLOCATED( qsws_veg_av ) )  THEN
     6556          CALL wrd_write_string( 'qsws_veg_av' )
     6557          WRITE ( 14 )  qsws_veg_av
     6558       ENDIF
     6559
     6560       IF ( ALLOCATED( t_soil_av ) )  THEN
     6561          CALL wrd_write_string( 't_soil_av' )
     6562          WRITE ( 14 )  t_soil_av
     6563       ENDIF
     6564
     6565       CALL wrd_write_string( 'lsm_start_index_h' )
     6566       WRITE ( 14 )  surf_lsm_h%start_index
     6567
     6568       CALL wrd_write_string( 'lsm_end_index_h' )
     6569       WRITE ( 14 )  surf_lsm_h%end_index
     6570
     6571       CALL wrd_write_string( 't_soil_h' )
     6572       WRITE ( 14 )  t_soil_h%var_2d
     6573
     6574       DO  l = 0, 3
     6575
     6576          CALL wrd_write_string( 'lsm_start_index_v' )
     6577          WRITE ( 14 )  surf_lsm_v(l)%start_index
     6578
     6579          CALL wrd_write_string( 'lsm_end_index_v' )
     6580          WRITE ( 14 )  surf_lsm_v(l)%end_index
     6581
     6582          WRITE( dum, '(I1)')  l
     6583          CALL wrd_write_string( 't_soil_v(' // dum // ')' )
     6584          WRITE ( 14 )  t_soil_v(l)%var_2d
     6585
     6586       ENDDO
     6587
     6588       CALL wrd_write_string( 'lsm_start_index_h' )
     6589       WRITE ( 14 )  surf_lsm_h%start_index
     6590
     6591       CALL wrd_write_string( 'lsm_end_index_h' )
     6592       WRITE ( 14 )  surf_lsm_h%end_index
     6593
     6594       CALL wrd_write_string( 'm_soil_h' )
     6595       WRITE ( 14 )  m_soil_h%var_2d
     6596
     6597       DO  l = 0, 3
     6598
     6599          CALL wrd_write_string( 'lsm_start_index_v' )
     6600          WRITE ( 14 )  surf_lsm_v(l)%start_index
     6601
     6602          CALL wrd_write_string( 'lsm_end_index_v' )
     6603          WRITE ( 14 )  surf_lsm_v(l)%end_index
     6604
     6605          WRITE( dum, '(I1)')  l
     6606          CALL wrd_write_string( 'm_soil_v(' // dum // ')' )
     6607          WRITE ( 14 )  m_soil_v(l)%var_2d
     6608
     6609       ENDDO
     6610
     6611       CALL wrd_write_string( 'lsm_start_index_h' )
     6612       WRITE ( 14 )  surf_lsm_h%start_index
     6613
     6614       CALL wrd_write_string( 'lsm_end_index_h' )
     6615       WRITE ( 14 )  surf_lsm_h%end_index
     6616
     6617       CALL wrd_write_string( 'm_liq_h' )
     6618       WRITE ( 14 )  m_liq_h%var_1d
     6619
     6620       DO  l = 0, 3
     6621
     6622          CALL wrd_write_string( 'lsm_start_index_v' )
     6623          WRITE ( 14 )  surf_lsm_v(l)%start_index
     6624
     6625          CALL wrd_write_string( 'lsm_end_index_v' )
     6626          WRITE ( 14 )  surf_lsm_v(l)%end_index
     6627
     6628          WRITE( dum, '(I1)')  l
     6629          CALL wrd_write_string( 'm_liq_v(' // dum // ')' )
     6630          WRITE ( 14 )  m_liq_v(l)%var_1d
     6631
     6632       ENDDO
     6633
     6634       CALL wrd_write_string( 'lsm_start_index_h' )
     6635       WRITE ( 14 )  surf_lsm_h%start_index
     6636
     6637       CALL wrd_write_string( 'lsm_end_index_h' )
     6638       WRITE ( 14 )  surf_lsm_h%end_index
     6639
     6640       CALL wrd_write_string( 't_surface_h' )
     6641       WRITE ( 14 )  t_surface_h%var_1d
     6642
     6643       DO  l = 0, 3
     6644
     6645          CALL wrd_write_string( 'lsm_start_index_v' )
     6646          WRITE ( 14 )  surf_lsm_v(l)%start_index
     6647
     6648          CALL wrd_write_string( 'lsm_end_index_v' )
     6649          WRITE ( 14 )  surf_lsm_v(l)%end_index
     6650
     6651          WRITE( dum, '(I1)')  l
     6652          CALL wrd_write_string( 't_surface_v(' // dum // ')' )
     6653          WRITE ( 14 )  t_surface_v(l)%var_1d
     6654
     6655       ENDDO
     6656
     6657    ELSEIF ( TRIM( restart_data_format_output ) == 'fortran_binary' )  THEN
     6658
     6659       IF ( ALLOCATED( c_liq_av ) )  CALL wrd_mpi_io( 'c_liq_av',  c_liq_av )
     6660       IF ( ALLOCATED( c_soil_av ) )  CALL wrd_mpi_io( 'c_soil_av',  c_soil_av )
     6661       IF ( ALLOCATED( c_veg_av ) )  CALL wrd_mpi_io( 'c_veg_av',  c_veg_av )
     6662       IF ( ALLOCATED( lai_av ) )  CALL wrd_mpi_io( 'lai_av', lai_av )
     6663       IF ( ALLOCATED( m_liq_av ) )  CALL wrd_mpi_io( 'm_liq_av',  m_liq_av )
     6664       IF ( ALLOCATED( m_soil_av ) )  CALL wrd_mpi_io( 'm_soil_av', m_soil_av, nzb_soil, nzt_soil )
     6665       IF ( ALLOCATED( qsws_liq_av ) )  CALL wrd_mpi_io( 'qsws_liq_av', qsws_liq_av )
     6666       IF ( ALLOCATED( qsws_soil_av ) )  CALL wrd_mpi_io( 'qsws_soil_av', qsws_soil_av )
     6667       IF ( ALLOCATED( qsws_veg_av ) )  CALL wrd_mpi_io( 'qsws_veg_av', qsws_veg_av )
     6668       IF ( ALLOCATED( t_soil_av ) )  CALL wrd_mpi_io( 't_soil_av', t_soil_av, nzb_soil, nzt_soil )
     6669
     6670       CALL rd_mpi_io_surface_filetypes( surf_lsm_h%start_index, surf_lsm_h%end_index,             &
     6671                                         surface_data_to_write, global_start_index )
     6672
     6673       CALL wrd_mpi_io( 'lsm_start_index_h',  surf_lsm_h%start_index )
     6674       CALL wrd_mpi_io( 'lsm_end_index_h',  surf_lsm_h%end_index )
     6675       CALL wrd_mpi_io( 'lsm_global_start_index_h', global_start_index )
     6676       CALL wrd_mpi_io_surface ( 't_soil_h', t_soil_h%var_2d )
     6677       CALL wrd_mpi_io_surface( 'm_soil_h',  m_soil_h%var_2d )
     6678       CALL wrd_mpi_io_surface( 'm_liq_h', m_liq_h%var_1d )
     6679       CALL wrd_mpi_io_surface( 't_surface_h', t_surface_h%var_1d )
     6680
     6681       DO  l = 0, 3
     6682
     6683          WRITE( dum, '(I1)' )  l
     6684
     6685          CALL rd_mpi_io_surface_filetypes ( surf_lsm_v(l)%start_index, surf_lsm_v(l)%end_index,   &
     6686                                             surface_data_to_write, global_start_index )
     6687
     6688          CALL wrd_mpi_io( 'lsm_start_index_v_' //dum,  surf_lsm_v(l)%start_index )
     6689          CALL wrd_mpi_io( 'lsm_end_index_v_' //dum,  surf_lsm_v(l)%end_index )
     6690          CALL wrd_mpi_io( 'lsm_global_start_index_v_' //dum , global_start_index )
     6691
     6692          IF ( .NOT. surface_data_to_write )  CYCLE
     6693
     6694          CALL wrd_mpi_io_surface( 't_soil_v(' // dum // ')', t_soil_v(l)%var_2d  )
     6695          CALL wrd_mpi_io_surface( 'm_soil_v(' // dum // ')', m_soil_v(l)%var_2d )
     6696          CALL wrd_mpi_io_surface( 'm_liq_v(' // dum // ')',  m_liq_v(l)%var_1d )
     6697          CALL wrd_mpi_io_surface( 't_surface_v(' // dum // ')',  t_surface_v(l)%var_1d )
     6698
     6699       ENDDO
     6700
    65046701    ENDIF
    6505 
    6506     IF ( ALLOCATED( c_soil_av ) )  THEN
    6507        CALL wrd_write_string( 'c_soil_av' )
    6508        WRITE ( 14 )  c_soil_av
    6509     ENDIF
    6510 
    6511     IF ( ALLOCATED( c_veg_av ) )  THEN
    6512        CALL wrd_write_string( 'c_veg_av' )
    6513        WRITE ( 14 )  c_veg_av
    6514     ENDIF
    6515 
    6516     IF ( ALLOCATED( lai_av ) )  THEN
    6517        CALL wrd_write_string( 'lai_av' )
    6518        WRITE ( 14 )  lai_av
    6519     ENDIF
    6520 
    6521     IF ( ALLOCATED( m_liq_av ) )  THEN
    6522        CALL wrd_write_string( 'm_liq_av' )
    6523        WRITE ( 14 )  m_liq_av
    6524     ENDIF
    6525 
    6526     IF ( ALLOCATED( m_soil_av ) )  THEN
    6527        CALL wrd_write_string( 'm_soil_av' )
    6528        WRITE ( 14 )  m_soil_av
    6529     ENDIF
    6530 
    6531     IF ( ALLOCATED( qsws_liq_av ) )  THEN
    6532        CALL wrd_write_string( 'qsws_liq_av' )
    6533        WRITE ( 14 )  qsws_liq_av
    6534     ENDIF
    6535 
    6536     IF ( ALLOCATED( qsws_soil_av ) )  THEN
    6537        CALL wrd_write_string( 'qsws_soil_av' )
    6538        WRITE ( 14 )  qsws_soil_av
    6539     ENDIF
    6540 
    6541     IF ( ALLOCATED( qsws_veg_av ) )  THEN
    6542        CALL wrd_write_string( 'qsws_veg_av' )
    6543        WRITE ( 14 )  qsws_veg_av
    6544     ENDIF
    6545 
    6546     IF ( ALLOCATED( t_soil_av ) )  THEN
    6547        CALL wrd_write_string( 't_soil_av' )
    6548        WRITE ( 14 )  t_soil_av
    6549     ENDIF
    6550 
    6551     CALL wrd_write_string( 'lsm_start_index_h' )
    6552     WRITE ( 14 )  surf_lsm_h%start_index
    6553 
    6554     CALL wrd_write_string( 'lsm_end_index_h' )
    6555     WRITE ( 14 )  surf_lsm_h%end_index
    6556 
    6557     CALL wrd_write_string( 't_soil_h' )
    6558     WRITE ( 14 )  t_soil_h%var_2d
    6559 
    6560 
    6561 
    6562     DO  l = 0, 3
    6563 
    6564        CALL wrd_write_string( 'lsm_start_index_v' )
    6565        WRITE ( 14 )  surf_lsm_v(l)%start_index
    6566 
    6567        CALL wrd_write_string( 'lsm_end_index_v' )
    6568        WRITE ( 14 )  surf_lsm_v(l)%end_index
    6569 
    6570        WRITE( dum, '(I1)')  l
    6571 
    6572        CALL wrd_write_string( 't_soil_v(' // dum // ')' )
    6573        WRITE ( 14 )  t_soil_v(l)%var_2d
    6574 
    6575     ENDDO
    6576 
    6577     CALL wrd_write_string( 'lsm_start_index_h' )
    6578     WRITE ( 14 )  surf_lsm_h%start_index
    6579 
    6580     CALL wrd_write_string( 'lsm_end_index_h' )
    6581     WRITE ( 14 )  surf_lsm_h%end_index
    6582 
    6583     CALL wrd_write_string( 'm_soil_h' )
    6584     WRITE ( 14 )  m_soil_h%var_2d
    6585 
    6586     DO  l = 0, 3
    6587 
    6588        CALL wrd_write_string( 'lsm_start_index_v' )
    6589        WRITE ( 14 )  surf_lsm_v(l)%start_index
    6590 
    6591        CALL wrd_write_string( 'lsm_end_index_v' )
    6592        WRITE ( 14 )  surf_lsm_v(l)%end_index
    6593 
    6594        WRITE( dum, '(I1)')  l
    6595 
    6596        CALL wrd_write_string( 'm_soil_v(' // dum // ')' )
    6597        WRITE ( 14 )  m_soil_v(l)%var_2d
    6598 
    6599     ENDDO
    6600 
    6601     CALL wrd_write_string( 'lsm_start_index_h' )
    6602     WRITE ( 14 )  surf_lsm_h%start_index
    6603 
    6604     CALL wrd_write_string( 'lsm_end_index_h' )
    6605     WRITE ( 14 )  surf_lsm_h%end_index
    6606 
    6607     CALL wrd_write_string( 'm_liq_h' )
    6608     WRITE ( 14 )  m_liq_h%var_1d
    6609 
    6610     DO  l = 0, 3
    6611 
    6612        CALL wrd_write_string( 'lsm_start_index_v' )
    6613        WRITE ( 14 )  surf_lsm_v(l)%start_index
    6614 
    6615        CALL wrd_write_string( 'lsm_end_index_v' )
    6616        WRITE ( 14 )  surf_lsm_v(l)%end_index
    6617 
    6618        WRITE( dum, '(I1)')  l
    6619 
    6620        CALL wrd_write_string( 'm_liq_v(' // dum // ')' )
    6621        WRITE ( 14 )  m_liq_v(l)%var_1d
    6622 
    6623     ENDDO
    6624 
    6625     CALL wrd_write_string( 'lsm_start_index_h' )
    6626     WRITE ( 14 )  surf_lsm_h%start_index
    6627 
    6628     CALL wrd_write_string( 'lsm_end_index_h' )
    6629     WRITE ( 14 )  surf_lsm_h%end_index
    6630 
    6631     CALL wrd_write_string( 't_surface_h' )
    6632     WRITE ( 14 )  t_surface_h%var_1d
    6633 
    6634     DO  l = 0, 3
    6635 
    6636        CALL wrd_write_string( 'lsm_start_index_v' )
    6637        WRITE ( 14 )  surf_lsm_v(l)%start_index
    6638 
    6639        CALL wrd_write_string( 'lsm_end_index_v' )
    6640        WRITE ( 14 )  surf_lsm_v(l)%end_index
    6641 
    6642        WRITE( dum, '(I1)')  l
    6643 
    6644        CALL wrd_write_string( 't_surface_v(' // dum // ')' )
    6645        WRITE ( 14 )  t_surface_v(l)%var_1d
    6646 
    6647     ENDDO
    6648 
    66496702
    66506703 END SUBROUTINE lsm_wrd_local
Note: See TracChangeset for help on using the changeset viewer.