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/surface_mod.f90

    r4366 r4495  
    2626! -----------------
    2727! $Id$
     28! restart data handling with MPI-IO added
     29!
     30! 4366 2020-01-09 08:12:43Z raasch
    2831! workaround implemented to avoid vectorization bug on NEC Aurora
    2932!
     
    138141        ONLY:  rif1d, us1d, usws1d, vsws1d
    139142
     143    USE restart_data_mpi_io_mod,                                                                   &
     144        ONLY:  rd_mpi_io_surface_filetypes, total_number_of_surface_values, wrd_mpi_io,            &
     145               wrd_mpi_io_global_array, wrd_mpi_io_surface
    140146
    141147    IMPLICIT NONE
     
    29802986       INTEGER(iwp), DIMENSION(0:3) ::  mm            !< running index for surface elements on gathered surface array
    29812987       INTEGER(iwp), DIMENSION(0:3) ::  start_index_v !< start index for vertical surface elements on gathered surface array
     2988
     2989       INTEGER(iwp),DIMENSION(nys:nyn,nxl:nxr) ::  global_start_index  !< index for surface data (MPI-IO)
     2990
     2991       LOGICAL ::  surface_data_to_write  !< switch for MPI-I/O if PE has surface data to write
    29822992
    29832993       TYPE(surf_type), DIMENSION(0:2) ::  surf_h     !< gathered horizontal surfaces, contains all surface types
     
    31653175                      IF ( ALLOCATED( surf_usm_h%pt_surface ) )                &
    31663176                         surf_h(l)%pt_surface(mm(l)) = surf_usm_h%pt_surface(m)
    3167                        IF ( ALLOCATED( surf_usm_h%q_surface ) )                &
     3177                      IF ( ALLOCATED( surf_usm_h%q_surface ) )                 &
    31683178                         surf_h(l)%q_surface(mm(l)) = surf_usm_h%q_surface(m)
    31693179                      IF ( ALLOCATED( surf_usm_h%vpt_surface ) )               &
     
    34763486
    34773487       ENDDO
    3478 !
    3479 !--    Output strings for the total number of upward / downward-facing surfaces
    3480 !--    on subdomain.
    3481        CALL wrd_write_string( 'ns_h_on_file' )
    3482        WRITE ( 14 )  ns_h_on_file
    3483 !
    3484 !--    Output strings for the total number of north/south/east/westward-facing surfaces
    3485 !--    on subdomain.
    3486        CALL wrd_write_string( 'ns_v_on_file' )
    3487        WRITE ( 14 )  ns_v_on_file
    3488 
    3489 !
    3490 !--    Write required restart data.
    3491 !--    Start with horizontal surfaces (upward-, downward-facing, and model top).
    3492 !--    Always start with %start_index followed by %end_index
    3493        DO  l = 0, 2
    3494           WRITE( dum, '(I1)')  l
    3495 
    3496           CALL wrd_write_string( 'surf_h(' // dum // ')%start_index' )
    3497           WRITE ( 14 )  surf_h(l)%start_index
    3498 
    3499           CALL wrd_write_string( 'surf_h(' // dum // ')%end_index' )
    3500           WRITE ( 14 )  surf_h(l)%end_index
    3501 
    3502           IF ( ALLOCATED ( surf_h(l)%us ) )  THEN
    3503              CALL wrd_write_string( 'surf_h(' // dum // ')%us' )
    3504              WRITE ( 14 )  surf_h(l)%us
    3505           ENDIF
    3506 
    3507           IF ( ALLOCATED ( surf_h(l)%ts ) )  THEN
    3508              CALL wrd_write_string( 'surf_h(' // dum // ')%ts' )
    3509              WRITE ( 14 )  surf_h(l)%ts
    3510           ENDIF
     3488
     3489!
     3490!--    Now start writing restart data to file
     3491       IF ( TRIM( restart_data_format_output ) == 'fortran_binary' )  THEN
     3492
     3493!
     3494!--       Output strings for the total number of upward / downward-facing surfaces
     3495!--       on subdomain.
     3496          CALL wrd_write_string( 'ns_h_on_file' )
     3497          WRITE ( 14 )  ns_h_on_file
     3498!
     3499!--       Output strings for the total number of north/south/east/westward-facing surfaces
     3500!--       on subdomain.
     3501          CALL wrd_write_string( 'ns_v_on_file' )
     3502          WRITE ( 14 )  ns_v_on_file
     3503
     3504!
     3505!--       Horizontal surfaces (upward-, downward-facing, and model top).
     3506!--       Always start with %start_index followed by %end_index
     3507          DO  l = 0, 2
     3508             WRITE( dum, '(I1)')  l
     3509
     3510             CALL wrd_write_string( 'surf_h(' // dum // ')%start_index' )
     3511             WRITE ( 14 )  surf_h(l)%start_index
     3512
     3513             CALL wrd_write_string( 'surf_h(' // dum // ')%end_index' )
     3514             WRITE ( 14 )  surf_h(l)%end_index
     3515
     3516             IF ( ALLOCATED ( surf_h(l)%us ) )  THEN
     3517                CALL wrd_write_string( 'surf_h(' // dum // ')%us' )
     3518                WRITE ( 14 )  surf_h(l)%us
     3519             ENDIF
     3520
     3521             IF ( ALLOCATED ( surf_h(l)%ts ) )  THEN
     3522                CALL wrd_write_string( 'surf_h(' // dum // ')%ts' )
     3523                WRITE ( 14 )  surf_h(l)%ts
     3524             ENDIF
    35113525         
    3512           IF ( ALLOCATED ( surf_h(l)%qs ) )  THEN
    3513              CALL wrd_write_string( 'surf_h(' // dum // ')%qs' ) 
    3514              WRITE ( 14 )  surf_h(l)%qs
    3515           ENDIF
    3516 
    3517           IF ( ALLOCATED ( surf_h(l)%ss ) )  THEN
    3518              CALL wrd_write_string( 'surf_h(' // dum // ')%ss' ) 
    3519              WRITE ( 14 )  surf_h(l)%ss
    3520           ENDIF
    3521 
    3522           IF ( ALLOCATED ( surf_h(l)%qcs ) )  THEN 
    3523              CALL wrd_write_string( 'surf_h(' // dum // ')%qcs' )
    3524              WRITE ( 14 )  surf_h(l)%qcs
    3525           ENDIF
    3526 
    3527           IF ( ALLOCATED ( surf_h(l)%ncs ) )  THEN
    3528              CALL wrd_write_string( 'surf_h(' // dum // ')%ncs' )
    3529              WRITE ( 14 )  surf_h(l)%ncs
    3530           ENDIF
    3531 
    3532           IF ( ALLOCATED ( surf_h(l)%qrs ) )  THEN 
    3533              CALL wrd_write_string( 'surf_h(' // dum // ')%qrs' )
    3534              WRITE ( 14 )  surf_h(l)%qrs
    3535           ENDIF
    3536 
    3537           IF ( ALLOCATED ( surf_h(l)%nrs ) )  THEN
    3538              CALL wrd_write_string( 'surf_h(' // dum // ')%nrs' ) 
    3539              WRITE ( 14 )  surf_h(l)%nrs
    3540           ENDIF
    3541 
    3542           IF ( ALLOCATED ( surf_h(l)%ol ) )  THEN
    3543              CALL wrd_write_string( 'surf_h(' // dum // ')%ol' ) 
    3544              WRITE ( 14 )  surf_h(l)%ol
    3545           ENDIF
    3546 
    3547           IF ( ALLOCATED ( surf_h(l)%rib ) )  THEN
    3548             CALL wrd_write_string( 'surf_h(' // dum // ')%rib' )
    3549              WRITE ( 14 )  surf_h(l)%rib
    3550           ENDIF
    3551 
    3552           IF ( ALLOCATED ( surf_h(l)%pt_surface ) )  THEN
    3553              CALL wrd_write_string( 'surf_h(' // dum // ')%pt_surface' )
    3554              WRITE ( 14 )  surf_h(l)%pt_surface
    3555           ENDIF
     3526             IF ( ALLOCATED ( surf_h(l)%qs ) )  THEN
     3527                CALL wrd_write_string( 'surf_h(' // dum // ')%qs' )
     3528                WRITE ( 14 )  surf_h(l)%qs
     3529             ENDIF
     3530
     3531             IF ( ALLOCATED ( surf_h(l)%ss ) )  THEN
     3532                CALL wrd_write_string( 'surf_h(' // dum // ')%ss' )
     3533                WRITE ( 14 )  surf_h(l)%ss
     3534             ENDIF
     3535
     3536             IF ( ALLOCATED ( surf_h(l)%qcs ) )  THEN
     3537                CALL wrd_write_string( 'surf_h(' // dum // ')%qcs' )
     3538                WRITE ( 14 )  surf_h(l)%qcs
     3539             ENDIF
     3540
     3541             IF ( ALLOCATED ( surf_h(l)%ncs ) )  THEN
     3542                CALL wrd_write_string( 'surf_h(' // dum // ')%ncs' )
     3543                WRITE ( 14 )  surf_h(l)%ncs
     3544             ENDIF
     3545
     3546             IF ( ALLOCATED ( surf_h(l)%qrs ) )  THEN
     3547                CALL wrd_write_string( 'surf_h(' // dum // ')%qrs' )
     3548                WRITE ( 14 )  surf_h(l)%qrs
     3549             ENDIF
     3550
     3551             IF ( ALLOCATED ( surf_h(l)%nrs ) )  THEN
     3552                CALL wrd_write_string( 'surf_h(' // dum // ')%nrs' )
     3553                WRITE ( 14 )  surf_h(l)%nrs
     3554             ENDIF
     3555
     3556             IF ( ALLOCATED ( surf_h(l)%ol ) )  THEN
     3557                CALL wrd_write_string( 'surf_h(' // dum // ')%ol' )
     3558                WRITE ( 14 )  surf_h(l)%ol
     3559             ENDIF
     3560
     3561             IF ( ALLOCATED ( surf_h(l)%rib ) )  THEN
     3562                CALL wrd_write_string( 'surf_h(' // dum // ')%rib' )
     3563                WRITE ( 14 )  surf_h(l)%rib
     3564             ENDIF
     3565
     3566             IF ( ALLOCATED ( surf_h(l)%pt_surface ) )  THEN
     3567                CALL wrd_write_string( 'surf_h(' // dum // ')%pt_surface' )
     3568                WRITE ( 14 )  surf_h(l)%pt_surface
     3569             ENDIF
    35563570         
    3557           IF ( ALLOCATED ( surf_h(l)%q_surface ) )  THEN
    3558              CALL wrd_write_string( 'surf_h(' // dum // ')%q_surface' )
    3559              WRITE ( 14 )  surf_h(l)%q_surface
    3560           ENDIF
    3561 
    3562           IF ( ALLOCATED ( surf_h(l)%vpt_surface ) )  THEN
    3563              CALL wrd_write_string( 'surf_h(' // dum // ')%vpt_surface' )
    3564              WRITE ( 14 )  surf_h(l)%vpt_surface
    3565           ENDIF
    3566 
    3567           IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
    3568              CALL wrd_write_string( 'surf_h(' // dum // ')%usws' )
    3569              WRITE ( 14 )  surf_h(l)%usws
    3570           ENDIF
    3571 
    3572           IF ( ALLOCATED ( surf_h(l)%vsws ) )  THEN
    3573              CALL wrd_write_string( 'surf_h(' // dum // ')%vsws' ) 
    3574              WRITE ( 14 )  surf_h(l)%vsws
    3575           ENDIF
     3571             IF ( ALLOCATED ( surf_h(l)%q_surface ) )  THEN
     3572                CALL wrd_write_string( 'surf_h(' // dum // ')%q_surface' )
     3573                WRITE ( 14 )  surf_h(l)%q_surface
     3574             ENDIF
     3575
     3576             IF ( ALLOCATED ( surf_h(l)%vpt_surface ) )  THEN
     3577                CALL wrd_write_string( 'surf_h(' // dum // ')%vpt_surface' )
     3578                WRITE ( 14 )  surf_h(l)%vpt_surface
     3579             ENDIF
     3580
     3581             IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
     3582                CALL wrd_write_string( 'surf_h(' // dum // ')%usws' )
     3583                WRITE ( 14 )  surf_h(l)%usws
     3584             ENDIF
     3585
     3586             IF ( ALLOCATED ( surf_h(l)%vsws ) )  THEN
     3587                CALL wrd_write_string( 'surf_h(' // dum // ')%vsws' )
     3588                WRITE ( 14 )  surf_h(l)%vsws
     3589             ENDIF
    35763590         
    3577           IF ( ALLOCATED ( surf_h(l)%shf ) )  THEN
    3578              CALL wrd_write_string( 'surf_h(' // dum // ')%shf' )
    3579              WRITE ( 14 )  surf_h(l)%shf
    3580           ENDIF
    3581 
    3582           IF ( ALLOCATED ( surf_h(l)%qsws ) )  THEN
    3583              CALL wrd_write_string( 'surf_h(' // dum // ')%qsws' ) 
    3584              WRITE ( 14 )  surf_h(l)%qsws
    3585           ENDIF
    3586 
    3587           IF ( ALLOCATED ( surf_h(l)%ssws ) )  THEN
    3588              CALL wrd_write_string( 'surf_h(' // dum // ')%ssws' ) 
    3589              WRITE ( 14 )  surf_h(l)%ssws
    3590           ENDIF
    3591 
    3592           IF ( ALLOCATED ( surf_h(l)%css ) )  THEN
    3593              CALL wrd_write_string( 'surf_h(' // dum // ')%css' )
    3594              WRITE ( 14 )  surf_h(l)%css
    3595           ENDIF
    3596 
    3597           IF ( ALLOCATED ( surf_h(l)%cssws ) )  THEN
    3598              CALL wrd_write_string( 'surf_h(' // dum // ')%cssws' )
    3599              WRITE ( 14 )  surf_h(l)%cssws
    3600           ENDIF
    3601 
    3602           IF ( ALLOCATED ( surf_h(l)%qcsws ) )  THEN
    3603              CALL wrd_write_string( 'surf_h(' // dum // ')%qcsws' ) 
    3604              WRITE ( 14 )  surf_h(l)%qcsws
    3605           ENDIF
    3606 
    3607           IF ( ALLOCATED ( surf_h(l)%ncsws ) )  THEN
    3608              CALL wrd_write_string( 'surf_h(' // dum // ')%ncsws' ) 
    3609              WRITE ( 14 )  surf_h(l)%ncsws
    3610           ENDIF
    3611 
    3612           IF ( ALLOCATED ( surf_h(l)%qrsws ) )  THEN
    3613              CALL wrd_write_string( 'surf_h(' // dum // ')%qrsws' ) 
    3614              WRITE ( 14 )  surf_h(l)%qrsws
    3615           ENDIF
    3616 
    3617           IF ( ALLOCATED ( surf_h(l)%nrsws ) )  THEN
    3618              CALL wrd_write_string( 'surf_h(' // dum // ')%nrsws' ) 
    3619              WRITE ( 14 )  surf_h(l)%nrsws
    3620           ENDIF
    3621 
    3622           IF ( ALLOCATED ( surf_h(l)%sasws ) )  THEN
    3623              CALL wrd_write_string( 'surf_h(' // dum // ')%sasws' )
    3624              WRITE ( 14 )  surf_h(l)%sasws
    3625           ENDIF
     3591             IF ( ALLOCATED ( surf_h(l)%shf ) )  THEN
     3592                CALL wrd_write_string( 'surf_h(' // dum // ')%shf' )
     3593                WRITE ( 14 )  surf_h(l)%shf
     3594             ENDIF
     3595
     3596             IF ( ALLOCATED ( surf_h(l)%qsws ) )  THEN
     3597                CALL wrd_write_string( 'surf_h(' // dum // ')%qsws' )
     3598                WRITE ( 14 )  surf_h(l)%qsws
     3599             ENDIF
     3600
     3601             IF ( ALLOCATED ( surf_h(l)%ssws ) )  THEN
     3602                CALL wrd_write_string( 'surf_h(' // dum // ')%ssws' )
     3603                WRITE ( 14 )  surf_h(l)%ssws
     3604             ENDIF
     3605
     3606             IF ( ALLOCATED ( surf_h(l)%css ) )  THEN
     3607                CALL wrd_write_string( 'surf_h(' // dum // ')%css' )
     3608                WRITE ( 14 )  surf_h(l)%css
     3609             ENDIF
     3610
     3611             IF ( ALLOCATED ( surf_h(l)%cssws ) )  THEN
     3612                CALL wrd_write_string( 'surf_h(' // dum // ')%cssws' )
     3613                WRITE ( 14 )  surf_h(l)%cssws
     3614             ENDIF
     3615
     3616             IF ( ALLOCATED ( surf_h(l)%qcsws ) )  THEN
     3617                CALL wrd_write_string( 'surf_h(' // dum // ')%qcsws' )
     3618                WRITE ( 14 )  surf_h(l)%qcsws
     3619             ENDIF
     3620
     3621             IF ( ALLOCATED ( surf_h(l)%ncsws ) )  THEN
     3622                CALL wrd_write_string( 'surf_h(' // dum // ')%ncsws' )
     3623                WRITE ( 14 )  surf_h(l)%ncsws
     3624             ENDIF
     3625
     3626             IF ( ALLOCATED ( surf_h(l)%qrsws ) )  THEN
     3627                CALL wrd_write_string( 'surf_h(' // dum // ')%qrsws' )
     3628                WRITE ( 14 )  surf_h(l)%qrsws
     3629             ENDIF
     3630
     3631             IF ( ALLOCATED ( surf_h(l)%nrsws ) )  THEN
     3632                CALL wrd_write_string( 'surf_h(' // dum // ')%nrsws' )
     3633                WRITE ( 14 )  surf_h(l)%nrsws
     3634             ENDIF
     3635
     3636             IF ( ALLOCATED ( surf_h(l)%sasws ) )  THEN
     3637                CALL wrd_write_string( 'surf_h(' // dum // ')%sasws' )
     3638                WRITE ( 14 )  surf_h(l)%sasws
     3639             ENDIF
    36263640 
    3627        ENDDO
    3628 !
    3629 !--    Write vertical surfaces.
    3630 !--    Always start with %start_index followed by %end_index.
    3631        DO  l = 0, 3
    3632           WRITE( dum, '(I1)')  l
    3633 
    3634           CALL wrd_write_string( 'surf_v(' // dum // ')%start_index' )
    3635           WRITE ( 14 )  surf_v(l)%start_index
    3636 
    3637           CALL wrd_write_string( 'surf_v(' // dum // ')%end_index' )
    3638           WRITE ( 14 )   surf_v(l)%end_index
    3639 
    3640           IF ( ALLOCATED ( surf_v(l)%us ) )  THEN
    3641              CALL wrd_write_string( 'surf_v(' // dum // ')%us' ) 
    3642              WRITE ( 14 )  surf_v(l)%us
    3643           ENDIF 
    3644 
    3645           IF ( ALLOCATED ( surf_v(l)%ts ) )  THEN
    3646              CALL wrd_write_string( 'surf_v(' // dum // ')%ts' )
    3647              WRITE ( 14 )  surf_v(l)%ts
    3648           ENDIF
    3649 
    3650           IF ( ALLOCATED ( surf_v(l)%qs ) )  THEN
    3651              CALL wrd_write_string( 'surf_v(' // dum // ')%qs' ) 
    3652              WRITE ( 14 )  surf_v(l)%qs
    3653           ENDIF 
    3654 
    3655           IF ( ALLOCATED ( surf_v(l)%ss ) )  THEN
    3656              CALL wrd_write_string( 'surf_v(' // dum // ')%ss' )
    3657              WRITE ( 14 )  surf_v(l)%ss
    3658           ENDIF 
     3641          ENDDO
     3642!
     3643!--       Write vertical surfaces.
     3644!--       Always start with %start_index followed by %end_index.
     3645          DO  l = 0, 3
     3646             WRITE( dum, '(I1)')  l
     3647
     3648             CALL wrd_write_string( 'surf_v(' // dum // ')%start_index' )
     3649             WRITE ( 14 )  surf_v(l)%start_index
     3650
     3651             CALL wrd_write_string( 'surf_v(' // dum // ')%end_index' )
     3652             WRITE ( 14 )   surf_v(l)%end_index
     3653
     3654             IF ( ALLOCATED ( surf_v(l)%us ) )  THEN
     3655                CALL wrd_write_string( 'surf_v(' // dum // ')%us' )
     3656                WRITE ( 14 )  surf_v(l)%us
     3657             ENDIF
     3658
     3659             IF ( ALLOCATED ( surf_v(l)%ts ) )  THEN
     3660                CALL wrd_write_string( 'surf_v(' // dum // ')%ts' )
     3661                WRITE ( 14 )  surf_v(l)%ts
     3662             ENDIF
     3663
     3664             IF ( ALLOCATED ( surf_v(l)%qs ) )  THEN
     3665                CALL wrd_write_string( 'surf_v(' // dum // ')%qs' )
     3666                WRITE ( 14 )  surf_v(l)%qs
     3667             ENDIF
     3668
     3669             IF ( ALLOCATED ( surf_v(l)%ss ) )  THEN
     3670                CALL wrd_write_string( 'surf_v(' // dum // ')%ss' )
     3671                WRITE ( 14 )  surf_v(l)%ss
     3672             ENDIF
    36593673         
    3660           IF ( ALLOCATED ( surf_v(l)%qcs ) )  THEN
    3661              CALL wrd_write_string( 'surf_v(' // dum // ')%qcs' )
    3662              WRITE ( 14 )  surf_v(l)%qcs
    3663           ENDIF
    3664 
    3665           IF ( ALLOCATED ( surf_v(l)%ncs ) )  THEN
    3666              CALL wrd_write_string( 'surf_v(' // dum // ')%ncs' )
    3667              WRITE ( 14 )  surf_v(l)%ncs
    3668           ENDIF
    3669 
    3670           IF ( ALLOCATED ( surf_v(l)%qrs ) )  THEN
    3671              CALL wrd_write_string( 'surf_v(' // dum // ')%qrs' ) 
    3672              WRITE ( 14 )  surf_v(l)%qrs
    3673           ENDIF
    3674 
    3675           IF ( ALLOCATED ( surf_v(l)%nrs ) )  THEN
    3676              CALL wrd_write_string( 'surf_v(' // dum // ')%nrs' )
    3677              WRITE ( 14 )  surf_v(l)%nrs
    3678           ENDIF 
    3679 
    3680           IF ( ALLOCATED ( surf_v(l)%ol ) )  THEN
    3681              CALL wrd_write_string( 'surf_v(' // dum // ')%ol' ) 
    3682              WRITE ( 14 )  surf_v(l)%ol
    3683           ENDIF
    3684 
    3685           IF ( ALLOCATED ( surf_v(l)%rib ) )  THEN
    3686              CALL wrd_write_string( 'surf_v(' // dum // ')%rib' )
    3687              WRITE ( 14 )  surf_v(l)%rib
    3688           ENDIF
    3689 
    3690           IF ( ALLOCATED ( surf_v(l)%pt_surface ) )  THEN
    3691              CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' )
    3692              WRITE ( 14 )  surf_v(l)%pt_surface
    3693           ENDIF
     3674             IF ( ALLOCATED ( surf_v(l)%qcs ) )  THEN
     3675                CALL wrd_write_string( 'surf_v(' // dum // ')%qcs' )
     3676                WRITE ( 14 )  surf_v(l)%qcs
     3677             ENDIF
     3678
     3679             IF ( ALLOCATED ( surf_v(l)%ncs ) )  THEN
     3680                CALL wrd_write_string( 'surf_v(' // dum // ')%ncs' )
     3681                WRITE ( 14 )  surf_v(l)%ncs
     3682             ENDIF
     3683
     3684             IF ( ALLOCATED ( surf_v(l)%qrs ) )  THEN
     3685                CALL wrd_write_string( 'surf_v(' // dum // ')%qrs' )
     3686                WRITE ( 14 )  surf_v(l)%qrs
     3687             ENDIF
     3688
     3689             IF ( ALLOCATED ( surf_v(l)%nrs ) )  THEN
     3690                CALL wrd_write_string( 'surf_v(' // dum // ')%nrs' )
     3691                WRITE ( 14 )  surf_v(l)%nrs
     3692             ENDIF
     3693
     3694             IF ( ALLOCATED ( surf_v(l)%ol ) )  THEN
     3695                CALL wrd_write_string( 'surf_v(' // dum // ')%ol' )
     3696                WRITE ( 14 )  surf_v(l)%ol
     3697             ENDIF
     3698
     3699             IF ( ALLOCATED ( surf_v(l)%rib ) )  THEN
     3700                CALL wrd_write_string( 'surf_v(' // dum // ')%rib' )
     3701                WRITE ( 14 )  surf_v(l)%rib
     3702             ENDIF
     3703
     3704             IF ( ALLOCATED ( surf_v(l)%pt_surface ) )  THEN
     3705                CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' )
     3706                WRITE ( 14 )  surf_v(l)%pt_surface
     3707             ENDIF
    36943708         
    3695           IF ( ALLOCATED ( surf_v(l)%q_surface ) )  THEN
    3696              CALL wrd_write_string( 'surf_v(' // dum // ')%q_surface' )
    3697              WRITE ( 14 )  surf_v(l)%q_surface
    3698           ENDIF
    3699 
    3700           IF ( ALLOCATED ( surf_v(l)%vpt_surface ) )  THEN
    3701              CALL wrd_write_string( 'surf_v(' // dum // ')%vpt_surface' )
    3702              WRITE ( 14 )  surf_v(l)%vpt_surface
    3703           ENDIF
    3704 
    3705           IF ( ALLOCATED ( surf_v(l)%shf ) )  THEN
    3706              CALL wrd_write_string( 'surf_v(' // dum // ')%shf' ) 
    3707              WRITE ( 14 )  surf_v(l)%shf
    3708           ENDIF
    3709 
    3710           IF ( ALLOCATED ( surf_v(l)%qsws ) )  THEN
    3711              CALL wrd_write_string( 'surf_v(' // dum // ')%qsws' ) 
    3712              WRITE ( 14 )  surf_v(l)%qsws
    3713           ENDIF
    3714 
    3715           IF ( ALLOCATED ( surf_v(l)%ssws ) )  THEN
    3716              CALL wrd_write_string( 'surf_v(' // dum // ')%ssws' ) 
    3717              WRITE ( 14 )  surf_v(l)%ssws
    3718           ENDIF
    3719 
    3720           IF ( ALLOCATED ( surf_v(l)%css ) )  THEN
    3721              CALL wrd_write_string( 'surf_v(' // dum // ')%css' ) 
    3722              WRITE ( 14 )  surf_v(l)%css
    3723           ENDIF
    3724 
    3725           IF ( ALLOCATED ( surf_v(l)%cssws ) )  THEN
    3726              CALL wrd_write_string( 'surf_v(' // dum // ')%cssws' )
    3727              WRITE ( 14 )  surf_v(l)%cssws
    3728           ENDIF 
    3729 
    3730           IF ( ALLOCATED ( surf_v(l)%qcsws ) )  THEN
    3731              CALL wrd_write_string( 'surf_v(' // dum // ')%qcsws' )
    3732              WRITE ( 14 )  surf_v(l)%qcsws
    3733           ENDIF 
    3734 
    3735           IF ( ALLOCATED ( surf_v(l)%ncsws ) )  THEN
    3736              CALL wrd_write_string( 'surf_v(' // dum // ')%ncsws' )
    3737              WRITE ( 14 )  surf_v(l)%ncsws
    3738           ENDIF
    3739 
    3740           IF ( ALLOCATED ( surf_v(l)%qrsws ) )  THEN
    3741              CALL wrd_write_string( 'surf_v(' // dum // ')%qrsws' ) 
    3742              WRITE ( 14 )  surf_v(l)%qrsws
    3743           ENDIF 
    3744 
    3745           IF ( ALLOCATED ( surf_v(l)%nrsws ) )  THEN
    3746              CALL wrd_write_string( 'surf_v(' // dum // ')%nrsws' ) 
    3747              WRITE ( 14 )  surf_v(l)%nrsws
    3748           ENDIF
    3749 
    3750           IF ( ALLOCATED ( surf_v(l)%sasws ) )  THEN
    3751              CALL wrd_write_string( 'surf_v(' // dum // ')%sasws' )
    3752              WRITE ( 14 )  surf_v(l)%sasws
    3753           ENDIF
    3754 
    3755           IF ( ALLOCATED ( surf_v(l)%mom_flux_uv ) )  THEN
    3756              CALL wrd_write_string( 'surf_v(' // dum // ')%mom_uv' ) 
    3757              WRITE ( 14 )  surf_v(l)%mom_flux_uv
    3758           ENDIF
    3759 
    3760           IF ( ALLOCATED ( surf_v(l)%mom_flux_w ) )  THEN
    3761              CALL wrd_write_string( 'surf_v(' // dum // ')%mom_w' )
    3762              WRITE ( 14 )  surf_v(l)%mom_flux_w
    3763           ENDIF
    3764 
    3765           IF ( ALLOCATED ( surf_v(l)%mom_flux_tke ) )  THEN
    3766              CALL wrd_write_string( 'surf_v(' // dum // ')%mom_tke' ) 
    3767              WRITE ( 14 )  surf_v(l)%mom_flux_tke
    3768           ENDIF
    3769          
    3770        ENDDO
    3771 
     3709             IF ( ALLOCATED ( surf_v(l)%q_surface ) )  THEN
     3710                CALL wrd_write_string( 'surf_v(' // dum // ')%q_surface' )
     3711                WRITE ( 14 )  surf_v(l)%q_surface
     3712             ENDIF
     3713
     3714             IF ( ALLOCATED ( surf_v(l)%vpt_surface ) )  THEN
     3715                CALL wrd_write_string( 'surf_v(' // dum // ')%vpt_surface' )
     3716                WRITE ( 14 )  surf_v(l)%vpt_surface
     3717             ENDIF
     3718
     3719             IF ( ALLOCATED ( surf_v(l)%shf ) )  THEN
     3720                CALL wrd_write_string( 'surf_v(' // dum // ')%shf' )
     3721                WRITE ( 14 )  surf_v(l)%shf
     3722             ENDIF
     3723
     3724             IF ( ALLOCATED ( surf_v(l)%qsws ) )  THEN
     3725                CALL wrd_write_string( 'surf_v(' // dum // ')%qsws' )
     3726                WRITE ( 14 )  surf_v(l)%qsws
     3727             ENDIF
     3728
     3729             IF ( ALLOCATED ( surf_v(l)%ssws ) )  THEN
     3730                CALL wrd_write_string( 'surf_v(' // dum // ')%ssws' )
     3731                WRITE ( 14 )  surf_v(l)%ssws
     3732             ENDIF
     3733
     3734             IF ( ALLOCATED ( surf_v(l)%css ) )  THEN
     3735                CALL wrd_write_string( 'surf_v(' // dum // ')%css' )
     3736                WRITE ( 14 )  surf_v(l)%css
     3737             ENDIF
     3738
     3739             IF ( ALLOCATED ( surf_v(l)%cssws ) )  THEN
     3740                CALL wrd_write_string( 'surf_v(' // dum // ')%cssws' )
     3741                WRITE ( 14 )  surf_v(l)%cssws
     3742             ENDIF
     3743
     3744             IF ( ALLOCATED ( surf_v(l)%qcsws ) )  THEN
     3745                CALL wrd_write_string( 'surf_v(' // dum // ')%qcsws' )
     3746                WRITE ( 14 )  surf_v(l)%qcsws
     3747             ENDIF
     3748
     3749             IF ( ALLOCATED ( surf_v(l)%ncsws ) )  THEN
     3750                CALL wrd_write_string( 'surf_v(' // dum // ')%ncsws' )
     3751                WRITE ( 14 )  surf_v(l)%ncsws
     3752             ENDIF
     3753
     3754             IF ( ALLOCATED ( surf_v(l)%qrsws ) )  THEN
     3755                CALL wrd_write_string( 'surf_v(' // dum // ')%qrsws' )
     3756                WRITE ( 14 )  surf_v(l)%qrsws
     3757             ENDIF
     3758
     3759             IF ( ALLOCATED ( surf_v(l)%nrsws ) )  THEN
     3760                CALL wrd_write_string( 'surf_v(' // dum // ')%nrsws' )
     3761                WRITE ( 14 )  surf_v(l)%nrsws
     3762             ENDIF
     3763
     3764             IF ( ALLOCATED ( surf_v(l)%sasws ) )  THEN
     3765                CALL wrd_write_string( 'surf_v(' // dum // ')%sasws' )
     3766                WRITE ( 14 )  surf_v(l)%sasws
     3767             ENDIF
     3768
     3769             IF ( ALLOCATED ( surf_v(l)%mom_flux_uv ) )  THEN
     3770                CALL wrd_write_string( 'surf_v(' // dum // ')%mom_uv' )
     3771                WRITE ( 14 )  surf_v(l)%mom_flux_uv
     3772             ENDIF
     3773
     3774             IF ( ALLOCATED ( surf_v(l)%mom_flux_w ) )  THEN
     3775                CALL wrd_write_string( 'surf_v(' // dum // ')%mom_w' )
     3776                WRITE ( 14 )  surf_v(l)%mom_flux_w
     3777             ENDIF
     3778
     3779             IF ( ALLOCATED ( surf_v(l)%mom_flux_tke ) )  THEN
     3780                CALL wrd_write_string( 'surf_v(' // dum // ')%mom_tke' )
     3781                WRITE ( 14 )  surf_v(l)%mom_flux_tke
     3782             ENDIF
     3783
     3784          ENDDO
     3785
     3786       ELSEIF ( TRIM( restart_data_format_output ) == 'mpi' )  THEN
     3787
     3788!
     3789!--       Start with horizontal surfaces (upward-, downward-facing, and model top).
     3790!--       All data writen with rd_mpi_io_write_surface are globally indexed 1d-arrays.
     3791          ns_h_on_file = 0
     3792          ns_v_on_file = 0
     3793
     3794          DO  l = 0, 2
     3795
     3796             WRITE( dum, '(I1)')  l
     3797
     3798             CALL rd_mpi_io_surface_filetypes( surf_h(l)%start_index, surf_h(l)%end_index,         &
     3799                                               surface_data_to_write, global_start_index )
     3800             IF ( .NOT. surface_data_to_write )  CYCLE
     3801
     3802             ns_h_on_file(l) = total_number_of_surface_values
     3803
     3804             CALL wrd_mpi_io( 'surf_h(' // dum // ')%start_index',  surf_h(l)%start_index )
     3805             CALL wrd_mpi_io( 'surf_h(' // dum // ')%end_index',  surf_h(l)%end_index )
     3806             CALL wrd_mpi_io( 'global_start_index_h_' // dum , global_start_index )
     3807
     3808             IF ( ALLOCATED ( surf_h(l)%us ) )  THEN
     3809                CALL wrd_mpi_io_surface ( 'surf_h(' // dum // ')%us', surf_h(l)%us )
     3810             ENDIF
     3811
     3812             IF ( ALLOCATED ( surf_h(l)%ts ) )  THEN
     3813                CALL wrd_mpi_io_surface ( 'surf_h(' // dum // ')%ts', surf_h(l)%ts )
     3814             ENDIF
     3815
     3816             IF ( ALLOCATED ( surf_h(l)%qs ) )  THEN
     3817                CALL wrd_mpi_io_surface ( 'surf_h(' // dum // ')%qs', surf_h(l)%qs )
     3818             ENDIF
     3819
     3820             IF ( ALLOCATED ( surf_h(l)%ss ) )  THEN
     3821                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%ss', surf_h(l)%ss )
     3822             ENDIF
     3823
     3824             IF ( ALLOCATED ( surf_h(l)%qcs ) )  THEN
     3825                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%qcs', surf_h(l)%qcs )
     3826             ENDIF
     3827
     3828             IF ( ALLOCATED ( surf_h(l)%ncs ) )  THEN
     3829                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%ncs', surf_h(l)%ncs )
     3830             ENDIF
     3831
     3832             IF ( ALLOCATED ( surf_h(l)%qrs ) )  THEN
     3833                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%qrs', surf_h(l)%qrs )
     3834             ENDIF
     3835
     3836             IF ( ALLOCATED ( surf_h(l)%nrs ) )  THEN
     3837                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%nrs', surf_h(l)%nrs )
     3838             ENDIF
     3839
     3840             IF ( ALLOCATED ( surf_h(l)%ol ) )  THEN
     3841                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%ol', surf_h(l)%ol )
     3842             ENDIF
     3843
     3844             IF ( ALLOCATED ( surf_h(l)%rib ) )  THEN
     3845               CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%rib',  surf_h(l)%rib )
     3846             ENDIF
     3847
     3848             IF ( ALLOCATED ( surf_h(l)%pt_surface ) )  THEN
     3849                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%pt_surface', surf_h(l)%pt_surface )
     3850             ENDIF
     3851
     3852             IF ( ALLOCATED ( surf_h(l)%q_surface ) )  THEN
     3853                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%q_surface', surf_h(l)%q_surface )
     3854             ENDIF
     3855
     3856             IF ( ALLOCATED ( surf_h(l)%vpt_surface ) )  THEN
     3857                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%vpt_surface', surf_h(l)%vpt_surface )
     3858             ENDIF
     3859
     3860             IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
     3861                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%usws', surf_h(l)%usws )
     3862             ENDIF
     3863
     3864             IF ( ALLOCATED ( surf_h(l)%vsws ) )  THEN
     3865                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%vsws', surf_h(l)%vsws )
     3866             ENDIF
     3867
     3868             IF ( ALLOCATED ( surf_h(l)%shf ) )  THEN
     3869                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%shf', surf_h(l)%shf )
     3870             ENDIF
     3871
     3872             IF ( ALLOCATED ( surf_h(l)%qsws ) )  THEN
     3873                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%qsws', surf_h(l)%qsws )
     3874             ENDIF
     3875
     3876             IF ( ALLOCATED ( surf_h(l)%ssws ) )  THEN
     3877                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%ssws', surf_h(l)%ssws )
     3878             ENDIF
     3879
     3880             IF ( ALLOCATED ( surf_h(l)%css ) )  THEN
     3881                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%css', surf_h(l)%css )
     3882             ENDIF
     3883
     3884             IF ( ALLOCATED ( surf_h(l)%cssws ) )  THEN
     3885                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%cssws', surf_h(l)%cssws )
     3886             ENDIF
     3887
     3888             IF ( ALLOCATED ( surf_h(l)%qcsws ) )  THEN
     3889                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%qcsws', surf_h(l)%qcsws )
     3890             ENDIF
     3891
     3892             IF ( ALLOCATED ( surf_h(l)%ncsws ) )  THEN
     3893                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%ncsws', surf_h(l)%ncsws )
     3894             ENDIF
     3895
     3896             IF ( ALLOCATED ( surf_h(l)%qrsws ) )  THEN
     3897                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%qrsws', surf_h(l)%qrsws )
     3898             ENDIF
     3899
     3900             IF ( ALLOCATED ( surf_h(l)%nrsws ) )  THEN
     3901                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%nrsws', surf_h(l)%nrsws )
     3902             ENDIF
     3903
     3904             IF ( ALLOCATED ( surf_h(l)%sasws ) )  THEN
     3905                CALL wrd_mpi_io_surface( 'surf_h(' // dum // ')%sasws', surf_h(l)%sasws )
     3906             ENDIF
     3907
     3908          ENDDO
     3909!
     3910!--       Write vertical surfaces
     3911          DO  l = 0, 3
     3912
     3913             WRITE( dum, '(I1)')  l
     3914
     3915             CALL rd_mpi_io_surface_filetypes( surf_v(l)%start_index, surf_v(l)%end_index,         &
     3916                                               surface_data_to_write, global_start_index )
     3917
     3918             ns_v_on_file(l) = total_number_of_surface_values
     3919
     3920             CALL wrd_mpi_io( 'surf_v(' // dum // ')%start_index', surf_v(l)%start_index )
     3921             CALL wrd_mpi_io( 'surf_v(' // dum // ')%end_index', surf_v(l)%end_index )
     3922             CALL wrd_mpi_io( 'global_start_index_v_' // dum , global_start_index )
     3923
     3924             IF ( .NOT. surface_data_to_write )  CYCLE
     3925
     3926             IF ( ALLOCATED ( surf_v(l)%us ) )  THEN
     3927                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%us',  surf_v(l)%us )
     3928             ENDIF
     3929
     3930             IF ( ALLOCATED ( surf_v(l)%ts ) )  THEN
     3931                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ts', surf_v(l)%ts )
     3932             ENDIF
     3933
     3934             IF ( ALLOCATED ( surf_v(l)%qs ) )  THEN
     3935                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qs',  surf_v(l)%qs )
     3936             ENDIF
     3937
     3938             IF ( ALLOCATED ( surf_v(l)%ss ) )  THEN
     3939                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ss',  surf_v(l)%ss )
     3940             ENDIF
     3941
     3942             IF ( ALLOCATED ( surf_v(l)%qcs ) )  THEN
     3943                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qcs', surf_v(l)%qcs )
     3944             ENDIF
     3945
     3946             IF ( ALLOCATED ( surf_v(l)%ncs ) )  THEN
     3947                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ncs', surf_v(l)%ncs )
     3948             ENDIF
     3949
     3950             IF ( ALLOCATED ( surf_v(l)%qrs ) )  THEN
     3951                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qrs', surf_v(l)%qrs )
     3952             ENDIF
     3953
     3954             IF ( ALLOCATED ( surf_v(l)%nrs ) )  THEN
     3955                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%nrs', surf_v(l)%nrs )
     3956             ENDIF
     3957
     3958             IF ( ALLOCATED ( surf_v(l)%ol ) )  THEN
     3959                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ol', surf_v(l)%ol )
     3960             ENDIF
     3961
     3962             IF ( ALLOCATED ( surf_v(l)%rib ) )  THEN
     3963                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%rib', surf_v(l)%rib )
     3964             ENDIF
     3965
     3966             IF ( ALLOCATED ( surf_v(l)%pt_surface ) )  THEN
     3967                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%pt_surface', surf_v(l)%pt_surface )
     3968             ENDIF
     3969
     3970             IF ( ALLOCATED ( surf_v(l)%q_surface ) )  THEN
     3971                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%q_surface', surf_v(l)%q_surface )
     3972             ENDIF
     3973
     3974             IF ( ALLOCATED ( surf_v(l)%vpt_surface ) )  THEN
     3975                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%vpt_surface', surf_v(l)%vpt_surface )
     3976             ENDIF
     3977
     3978             IF ( ALLOCATED ( surf_v(l)%shf ) )  THEN
     3979                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%shf', surf_v(l)%shf )
     3980             ENDIF
     3981
     3982             IF ( ALLOCATED ( surf_v(l)%qsws ) )  THEN
     3983                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qsws', surf_v(l)%qsws )
     3984              ENDIF
     3985
     3986             IF ( ALLOCATED ( surf_v(l)%ssws ) )  THEN
     3987                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ssws', surf_v(l)%ssws )
     3988             ENDIF
     3989
     3990             IF ( ALLOCATED ( surf_v(l)%css ) )  THEN
     3991                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%css', surf_v(l)%css )
     3992             ENDIF
     3993
     3994             IF ( ALLOCATED ( surf_v(l)%cssws ) )  THEN
     3995                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%cssws', surf_v(l)%cssws )
     3996             ENDIF
     3997
     3998             IF ( ALLOCATED ( surf_v(l)%qcsws ) )  THEN
     3999                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qcsws', surf_v(l)%qcsws )
     4000             ENDIF
     4001
     4002             IF ( ALLOCATED ( surf_v(l)%ncsws ) )  THEN
     4003                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%ncsws', surf_v(l)%ncsws )
     4004             ENDIF
     4005
     4006             IF ( ALLOCATED ( surf_v(l)%qrsws ) )  THEN
     4007                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%qrsws', surf_v(l)%qrsws )
     4008             ENDIF
     4009
     4010             IF ( ALLOCATED ( surf_v(l)%nrsws ) )  THEN
     4011                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%nrsws', surf_v(l)%nrsws )
     4012             ENDIF
     4013
     4014             IF ( ALLOCATED ( surf_v(l)%sasws ) )  THEN
     4015                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%sasws', surf_v(l)%sasws )
     4016             ENDIF
     4017
     4018             IF ( ALLOCATED ( surf_v(l)%mom_flux_uv ) )  THEN
     4019                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%mom_uv', surf_v(l)%mom_flux_uv )
     4020             ENDIF
     4021
     4022             IF ( ALLOCATED ( surf_v(l)%mom_flux_w ) )  THEN
     4023                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%mom_w',  surf_v(l)%mom_flux_w )
     4024             ENDIF
     4025
     4026             IF ( ALLOCATED ( surf_v(l)%mom_flux_tke ) )  THEN
     4027                CALL wrd_mpi_io_surface( 'surf_v(' // dum // ')%mom_tke', surf_v(l)%mom_flux_tke )
     4028             ENDIF
     4029
     4030          ENDDO
     4031
     4032          CALL wrd_mpi_io_global_array( 'ns_h_on_file', ns_h_on_file )
     4033          CALL wrd_mpi_io_global_array( 'ns_v_on_file', ns_v_on_file )
     4034
     4035       ENDIF
    37724036
    37734037    END SUBROUTINE surface_wrd_local
Note: See TracChangeset for help on using the changeset viewer.