Changeset 4495 for palm/trunk/SOURCE/land_surface_model_mod.f90
- Timestamp:
- Apr 13, 2020 8:11:20 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/land_surface_model_mod.f90
r4450 r4495 25 25 ! ----------------- 26 26 ! $Id$ 27 ! restart data handling with MPI-IO added 28 ! 29 ! 4450 2020-03-09 19:12:57Z suehring 27 30 ! Missing from_file check 28 31 ! … … 234 237 end_time, humidity, intermediate_timestep_count, & 235 238 initializing_actions, intermediate_timestep_count_max, & 236 land_surface, max_masks, pt_surface, 239 land_surface, max_masks, pt_surface, restart_data_format_output, & 237 240 rho_surface, spinup, spinup_pt_mean, spinup_time, & 238 241 surface_pressure, timestep_scheme, tsc, & … … 286 289 ONLY: albedo, albedo_type, emissivity, force_radiation_call, & 287 290 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 288 294 289 295 USE statistics, & … … 6490 6496 6491 6497 CHARACTER (LEN=1) :: dum !< dummy to create correct string for creating variable string 6498 6492 6499 INTEGER(iwp) :: l !< index variable for surface orientation 6493 6500 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 6504 6701 ENDIF 6505 6506 IF ( ALLOCATED( c_soil_av ) ) THEN6507 CALL wrd_write_string( 'c_soil_av' )6508 WRITE ( 14 ) c_soil_av6509 ENDIF6510 6511 IF ( ALLOCATED( c_veg_av ) ) THEN6512 CALL wrd_write_string( 'c_veg_av' )6513 WRITE ( 14 ) c_veg_av6514 ENDIF6515 6516 IF ( ALLOCATED( lai_av ) ) THEN6517 CALL wrd_write_string( 'lai_av' )6518 WRITE ( 14 ) lai_av6519 ENDIF6520 6521 IF ( ALLOCATED( m_liq_av ) ) THEN6522 CALL wrd_write_string( 'm_liq_av' )6523 WRITE ( 14 ) m_liq_av6524 ENDIF6525 6526 IF ( ALLOCATED( m_soil_av ) ) THEN6527 CALL wrd_write_string( 'm_soil_av' )6528 WRITE ( 14 ) m_soil_av6529 ENDIF6530 6531 IF ( ALLOCATED( qsws_liq_av ) ) THEN6532 CALL wrd_write_string( 'qsws_liq_av' )6533 WRITE ( 14 ) qsws_liq_av6534 ENDIF6535 6536 IF ( ALLOCATED( qsws_soil_av ) ) THEN6537 CALL wrd_write_string( 'qsws_soil_av' )6538 WRITE ( 14 ) qsws_soil_av6539 ENDIF6540 6541 IF ( ALLOCATED( qsws_veg_av ) ) THEN6542 CALL wrd_write_string( 'qsws_veg_av' )6543 WRITE ( 14 ) qsws_veg_av6544 ENDIF6545 6546 IF ( ALLOCATED( t_soil_av ) ) THEN6547 CALL wrd_write_string( 't_soil_av' )6548 WRITE ( 14 ) t_soil_av6549 ENDIF6550 6551 CALL wrd_write_string( 'lsm_start_index_h' )6552 WRITE ( 14 ) surf_lsm_h%start_index6553 6554 CALL wrd_write_string( 'lsm_end_index_h' )6555 WRITE ( 14 ) surf_lsm_h%end_index6556 6557 CALL wrd_write_string( 't_soil_h' )6558 WRITE ( 14 ) t_soil_h%var_2d6559 6560 6561 6562 DO l = 0, 36563 6564 CALL wrd_write_string( 'lsm_start_index_v' )6565 WRITE ( 14 ) surf_lsm_v(l)%start_index6566 6567 CALL wrd_write_string( 'lsm_end_index_v' )6568 WRITE ( 14 ) surf_lsm_v(l)%end_index6569 6570 WRITE( dum, '(I1)') l6571 6572 CALL wrd_write_string( 't_soil_v(' // dum // ')' )6573 WRITE ( 14 ) t_soil_v(l)%var_2d6574 6575 ENDDO6576 6577 CALL wrd_write_string( 'lsm_start_index_h' )6578 WRITE ( 14 ) surf_lsm_h%start_index6579 6580 CALL wrd_write_string( 'lsm_end_index_h' )6581 WRITE ( 14 ) surf_lsm_h%end_index6582 6583 CALL wrd_write_string( 'm_soil_h' )6584 WRITE ( 14 ) m_soil_h%var_2d6585 6586 DO l = 0, 36587 6588 CALL wrd_write_string( 'lsm_start_index_v' )6589 WRITE ( 14 ) surf_lsm_v(l)%start_index6590 6591 CALL wrd_write_string( 'lsm_end_index_v' )6592 WRITE ( 14 ) surf_lsm_v(l)%end_index6593 6594 WRITE( dum, '(I1)') l6595 6596 CALL wrd_write_string( 'm_soil_v(' // dum // ')' )6597 WRITE ( 14 ) m_soil_v(l)%var_2d6598 6599 ENDDO6600 6601 CALL wrd_write_string( 'lsm_start_index_h' )6602 WRITE ( 14 ) surf_lsm_h%start_index6603 6604 CALL wrd_write_string( 'lsm_end_index_h' )6605 WRITE ( 14 ) surf_lsm_h%end_index6606 6607 CALL wrd_write_string( 'm_liq_h' )6608 WRITE ( 14 ) m_liq_h%var_1d6609 6610 DO l = 0, 36611 6612 CALL wrd_write_string( 'lsm_start_index_v' )6613 WRITE ( 14 ) surf_lsm_v(l)%start_index6614 6615 CALL wrd_write_string( 'lsm_end_index_v' )6616 WRITE ( 14 ) surf_lsm_v(l)%end_index6617 6618 WRITE( dum, '(I1)') l6619 6620 CALL wrd_write_string( 'm_liq_v(' // dum // ')' )6621 WRITE ( 14 ) m_liq_v(l)%var_1d6622 6623 ENDDO6624 6625 CALL wrd_write_string( 'lsm_start_index_h' )6626 WRITE ( 14 ) surf_lsm_h%start_index6627 6628 CALL wrd_write_string( 'lsm_end_index_h' )6629 WRITE ( 14 ) surf_lsm_h%end_index6630 6631 CALL wrd_write_string( 't_surface_h' )6632 WRITE ( 14 ) t_surface_h%var_1d6633 6634 DO l = 0, 36635 6636 CALL wrd_write_string( 'lsm_start_index_v' )6637 WRITE ( 14 ) surf_lsm_v(l)%start_index6638 6639 CALL wrd_write_string( 'lsm_end_index_v' )6640 WRITE ( 14 ) surf_lsm_v(l)%end_index6641 6642 WRITE( dum, '(I1)') l6643 6644 CALL wrd_write_string( 't_surface_v(' // dum // ')' )6645 WRITE ( 14 ) t_surface_v(l)%var_1d6646 6647 ENDDO6648 6649 6702 6650 6703 END SUBROUTINE lsm_wrd_local
Note: See TracChangeset
for help on using the changeset viewer.