Changeset 4495 for palm/trunk/SOURCE/surface_mod.f90
- Timestamp:
- Apr 13, 2020 8:11:20 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/surface_mod.f90
r4366 r4495 26 26 ! ----------------- 27 27 ! $Id$ 28 ! restart data handling with MPI-IO added 29 ! 30 ! 4366 2020-01-09 08:12:43Z raasch 28 31 ! workaround implemented to avoid vectorization bug on NEC Aurora 29 32 ! … … 138 141 ONLY: rif1d, us1d, usws1d, vsws1d 139 142 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 140 146 141 147 IMPLICIT NONE … … 2980 2986 INTEGER(iwp), DIMENSION(0:3) :: mm !< running index for surface elements on gathered surface array 2981 2987 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 2982 2992 2983 2993 TYPE(surf_type), DIMENSION(0:2) :: surf_h !< gathered horizontal surfaces, contains all surface types … … 3165 3175 IF ( ALLOCATED( surf_usm_h%pt_surface ) ) & 3166 3176 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 ) ) & 3168 3178 surf_h(l)%q_surface(mm(l)) = surf_usm_h%q_surface(m) 3169 3179 IF ( ALLOCATED( surf_usm_h%vpt_surface ) ) & … … 3476 3486 3477 3487 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 3511 3525 3512 IF ( ALLOCATED ( surf_h(l)%qs ) ) THEN3513 CALL wrd_write_string( 'surf_h(' // dum // ')%qs' )3514 WRITE ( 14 ) surf_h(l)%qs3515 ENDIF3516 3517 IF ( ALLOCATED ( surf_h(l)%ss ) ) THEN3518 CALL wrd_write_string( 'surf_h(' // dum // ')%ss' )3519 WRITE ( 14 ) surf_h(l)%ss3520 ENDIF3521 3522 IF ( ALLOCATED ( surf_h(l)%qcs ) ) THEN3523 CALL wrd_write_string( 'surf_h(' // dum // ')%qcs' )3524 WRITE ( 14 ) surf_h(l)%qcs3525 ENDIF3526 3527 IF ( ALLOCATED ( surf_h(l)%ncs ) ) THEN3528 CALL wrd_write_string( 'surf_h(' // dum // ')%ncs' )3529 WRITE ( 14 ) surf_h(l)%ncs3530 ENDIF3531 3532 IF ( ALLOCATED ( surf_h(l)%qrs ) ) THEN3533 CALL wrd_write_string( 'surf_h(' // dum // ')%qrs' )3534 WRITE ( 14 ) surf_h(l)%qrs3535 ENDIF3536 3537 IF ( ALLOCATED ( surf_h(l)%nrs ) ) THEN3538 CALL wrd_write_string( 'surf_h(' // dum // ')%nrs' )3539 WRITE ( 14 ) surf_h(l)%nrs3540 ENDIF3541 3542 IF ( ALLOCATED ( surf_h(l)%ol ) ) THEN3543 CALL wrd_write_string( 'surf_h(' // dum // ')%ol' )3544 WRITE ( 14 ) surf_h(l)%ol3545 ENDIF3546 3547 IF ( ALLOCATED ( surf_h(l)%rib ) ) THEN3548 CALL wrd_write_string( 'surf_h(' // dum // ')%rib' )3549 WRITE ( 14 ) surf_h(l)%rib3550 ENDIF3551 3552 IF ( ALLOCATED ( surf_h(l)%pt_surface ) ) THEN3553 CALL wrd_write_string( 'surf_h(' // dum // ')%pt_surface' )3554 WRITE ( 14 ) surf_h(l)%pt_surface3555 ENDIF3526 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 3556 3570 3557 IF ( ALLOCATED ( surf_h(l)%q_surface ) ) THEN3558 CALL wrd_write_string( 'surf_h(' // dum // ')%q_surface' )3559 WRITE ( 14 ) surf_h(l)%q_surface3560 ENDIF3561 3562 IF ( ALLOCATED ( surf_h(l)%vpt_surface ) ) THEN3563 CALL wrd_write_string( 'surf_h(' // dum // ')%vpt_surface' )3564 WRITE ( 14 ) surf_h(l)%vpt_surface3565 ENDIF3566 3567 IF ( ALLOCATED ( surf_h(l)%usws ) ) THEN3568 CALL wrd_write_string( 'surf_h(' // dum // ')%usws' )3569 WRITE ( 14 ) surf_h(l)%usws3570 ENDIF3571 3572 IF ( ALLOCATED ( surf_h(l)%vsws ) ) THEN3573 CALL wrd_write_string( 'surf_h(' // dum // ')%vsws' )3574 WRITE ( 14 ) surf_h(l)%vsws3575 ENDIF3571 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 3576 3590 3577 IF ( ALLOCATED ( surf_h(l)%shf ) ) THEN3578 CALL wrd_write_string( 'surf_h(' // dum // ')%shf' )3579 WRITE ( 14 ) surf_h(l)%shf3580 ENDIF3581 3582 IF ( ALLOCATED ( surf_h(l)%qsws ) ) THEN3583 CALL wrd_write_string( 'surf_h(' // dum // ')%qsws' )3584 WRITE ( 14 ) surf_h(l)%qsws3585 ENDIF3586 3587 IF ( ALLOCATED ( surf_h(l)%ssws ) ) THEN3588 CALL wrd_write_string( 'surf_h(' // dum // ')%ssws' )3589 WRITE ( 14 ) surf_h(l)%ssws3590 ENDIF3591 3592 IF ( ALLOCATED ( surf_h(l)%css ) ) THEN3593 CALL wrd_write_string( 'surf_h(' // dum // ')%css' )3594 WRITE ( 14 ) surf_h(l)%css3595 ENDIF3596 3597 IF ( ALLOCATED ( surf_h(l)%cssws ) ) THEN3598 CALL wrd_write_string( 'surf_h(' // dum // ')%cssws' )3599 WRITE ( 14 ) surf_h(l)%cssws3600 ENDIF3601 3602 IF ( ALLOCATED ( surf_h(l)%qcsws ) ) THEN3603 CALL wrd_write_string( 'surf_h(' // dum // ')%qcsws' )3604 WRITE ( 14 ) surf_h(l)%qcsws3605 ENDIF3606 3607 IF ( ALLOCATED ( surf_h(l)%ncsws ) ) THEN3608 CALL wrd_write_string( 'surf_h(' // dum // ')%ncsws' )3609 WRITE ( 14 ) surf_h(l)%ncsws3610 ENDIF3611 3612 IF ( ALLOCATED ( surf_h(l)%qrsws ) ) THEN3613 CALL wrd_write_string( 'surf_h(' // dum // ')%qrsws' )3614 WRITE ( 14 ) surf_h(l)%qrsws3615 ENDIF3616 3617 IF ( ALLOCATED ( surf_h(l)%nrsws ) ) THEN3618 CALL wrd_write_string( 'surf_h(' // dum // ')%nrsws' )3619 WRITE ( 14 ) surf_h(l)%nrsws3620 ENDIF3621 3622 IF ( ALLOCATED ( surf_h(l)%sasws ) ) THEN3623 CALL wrd_write_string( 'surf_h(' // dum // ')%sasws' )3624 WRITE ( 14 ) surf_h(l)%sasws3625 ENDIF3591 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 3626 3640 3627 ENDDO3628 ! 3629 !-- Write vertical surfaces.3630 !-- Always start with %start_index followed by %end_index.3631 DO l = 0, 33632 WRITE( dum, '(I1)') l3633 3634 CALL wrd_write_string( 'surf_v(' // dum // ')%start_index' )3635 WRITE ( 14 ) surf_v(l)%start_index3636 3637 CALL wrd_write_string( 'surf_v(' // dum // ')%end_index' )3638 WRITE ( 14 ) surf_v(l)%end_index3639 3640 IF ( ALLOCATED ( surf_v(l)%us ) ) THEN3641 CALL wrd_write_string( 'surf_v(' // dum // ')%us' )3642 WRITE ( 14 ) surf_v(l)%us3643 ENDIF3644 3645 IF ( ALLOCATED ( surf_v(l)%ts ) ) THEN3646 CALL wrd_write_string( 'surf_v(' // dum // ')%ts' )3647 WRITE ( 14 ) surf_v(l)%ts3648 ENDIF3649 3650 IF ( ALLOCATED ( surf_v(l)%qs ) ) THEN3651 CALL wrd_write_string( 'surf_v(' // dum // ')%qs' )3652 WRITE ( 14 ) surf_v(l)%qs3653 ENDIF3654 3655 IF ( ALLOCATED ( surf_v(l)%ss ) ) THEN3656 CALL wrd_write_string( 'surf_v(' // dum // ')%ss' )3657 WRITE ( 14 ) surf_v(l)%ss3658 ENDIF3641 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 3659 3673 3660 IF ( ALLOCATED ( surf_v(l)%qcs ) ) THEN3661 CALL wrd_write_string( 'surf_v(' // dum // ')%qcs' )3662 WRITE ( 14 ) surf_v(l)%qcs3663 ENDIF3664 3665 IF ( ALLOCATED ( surf_v(l)%ncs ) ) THEN3666 CALL wrd_write_string( 'surf_v(' // dum // ')%ncs' )3667 WRITE ( 14 ) surf_v(l)%ncs3668 ENDIF3669 3670 IF ( ALLOCATED ( surf_v(l)%qrs ) ) THEN3671 CALL wrd_write_string( 'surf_v(' // dum // ')%qrs' )3672 WRITE ( 14 ) surf_v(l)%qrs3673 ENDIF3674 3675 IF ( ALLOCATED ( surf_v(l)%nrs ) ) THEN3676 CALL wrd_write_string( 'surf_v(' // dum // ')%nrs' )3677 WRITE ( 14 ) surf_v(l)%nrs3678 ENDIF3679 3680 IF ( ALLOCATED ( surf_v(l)%ol ) ) THEN3681 CALL wrd_write_string( 'surf_v(' // dum // ')%ol' )3682 WRITE ( 14 ) surf_v(l)%ol3683 ENDIF3684 3685 IF ( ALLOCATED ( surf_v(l)%rib ) ) THEN3686 CALL wrd_write_string( 'surf_v(' // dum // ')%rib' )3687 WRITE ( 14 ) surf_v(l)%rib3688 ENDIF3689 3690 IF ( ALLOCATED ( surf_v(l)%pt_surface ) ) THEN3691 CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' )3692 WRITE ( 14 ) surf_v(l)%pt_surface3693 ENDIF3674 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 3694 3708 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 3772 4036 3773 4037 END SUBROUTINE surface_wrd_local
Note: See TracChangeset
for help on using the changeset viewer.