Ignore:
Timestamp:
Jul 26, 2016 7:52:02 AM (7 years ago)
Author:
maronga
Message:

further modularization of land surface model (2D/3D output and restart data)

File:
1 edited

Legend:

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

    r1960 r1972  
    1919! Current revisions:
    2020! -----------------
    21 !
     21! Land surface parts are now done in the respective module
    2222!
    2323! Former revisions:
     
    127127
    128128    USE land_surface_model_mod,                                                &
    129         ONLY:  c_liq_av, c_soil_av, c_veg, c_veg_av, ghf_eb_av, lai_av,        &
    130                qsws_eb_av, qsws_liq_eb_av, qsws_soil_eb_av, qsws_veg_eb_av,    &
    131                land_surface, m_liq_eb, m_liq_eb_av, m_soil, m_soil_av,         &
    132                nzb_soil, nzt_soil, shf_eb_av, t_soil, t_soil_av
     129        ONLY:  land_surface, lsm_read_restart_data
    133130
    134131    USE particle_attributes,                                                   &
     
    204201    REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d      !< temporary array for storing 2D data
    205202    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d      !< temporary array for storing 3D data
    206     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil1!< temporary array for storing 3D soil model data
    207     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil2!< temporary array for storing 3D soil model data
    208203    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwul   !<
    209204    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwun   !<
     
    330325!--    First compare the version numbers
    331326       READ ( 13 )  version_on_file
    332        binary_version = '4.3'
     327       binary_version = '4.4'
    333328       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
    334329          WRITE( message_string, * ) 'version mismatch concerning data ',      &
     
    405400                        nxl_on_file-nbgp:nxr_on_file+nbgp) )
    406401
    407 !
    408 !--    If the land surface model is used, allocate array for storing soil model
    409 !--    data
    410        IF ( land_surface )  THEN
    411           ALLOCATE( tmp_3d_soil1(nzb_soil:nzt_soil+1,                          &
    412                                 nys_on_file-nbgp:nyn_on_file+nbgp,             &
    413                                 nxl_on_file-nbgp:nxr_on_file+nbgp) )
    414           ALLOCATE( tmp_3d_soil2(nzb_soil:nzt_soil,                            &
    415                                 nys_on_file-nbgp:nyn_on_file+nbgp,             &
    416                                 nxl_on_file-nbgp:nxr_on_file+nbgp) )
    417        ENDIF
    418402!
    419403!--    Read arrays
     
    444428             SELECT CASE ( TRIM( field_chr ) )
    445429
    446                 CASE ( 'c_liq_av' )
    447                    IF ( .NOT. ALLOCATED( c_liq_av ) )  THEN
    448                       ALLOCATE( c_liq_av(nysg:nyng,nxlg:nxrg) )
    449                    ENDIF
    450                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    451                    c_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    452                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    453 
    454                 CASE ( 'c_soil_av' )
    455                    IF ( .NOT. ALLOCATED( c_soil_av ) )  THEN
    456                       ALLOCATE( c_soil_av(nysg:nyng,nxlg:nxrg) )
    457                    ENDIF
    458                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    459                    c_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    460                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    461 
    462                 CASE ( 'c_veg_av' )
    463                    IF ( .NOT. ALLOCATED( c_veg_av ) )  THEN
    464                       ALLOCATE( c_veg_av(nysg:nyng,nxlg:nxrg) )
    465                    ENDIF
    466                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    467                    c_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    468                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    469 
    470430                CASE ( 'e' )
    471431                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    481441                            tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    482442
    483                 CASE ( 'ghf_eb_av' )
    484                    IF ( .NOT. ALLOCATED( ghf_eb_av ) )  THEN
    485                       ALLOCATE( ghf_eb_av(nysg:nyng,nxlg:nxrg) )
    486                    ENDIF
    487                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    488                    ghf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    489                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    490 
    491443                CASE ( 'iran' ) ! matching random numbers is still unresolved
    492444                                ! issue
    493445                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
    494446
    495                 CASE ( 'lai_av' )
    496                    IF ( .NOT. ALLOCATED( lai_av ) )  THEN
    497                       ALLOCATE( lai_av(nysg:nyng,nxlg:nxrg) )
    498                    ENDIF
    499                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    500                    lai_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    501                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    502 
    503447                CASE ( 'kh' )
    504448                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    526470                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    527471                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    528 
    529                 CASE ( 'm_liq_eb' )
    530                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    531                    m_liq_eb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =        &
    532                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    533                 CASE ( 'm_liq_eb_av' )
    534                    IF ( .NOT. ALLOCATED( m_liq_eb_av ) )  THEN
    535                       ALLOCATE( m_liq_eb_av(nysg:nyng,nxlg:nxrg) )
    536                    ENDIF
    537                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    538                    m_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    539                                   tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    540 
    541                 CASE ( 'm_soil' )
    542                    IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
    543                    m_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    544                           tmp_3d_soil2(nzb_soil:nzt_soil,nysf-nbgp:nynf        &
    545                           +nbgp,nxlf-nbgp:nxrf+nbgp)
    546 
    547                 CASE ( 'm_soil_av' )
    548                    IF ( .NOT. ALLOCATED( m_soil_av ) )  THEN
    549                       ALLOCATE( m_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
    550                    ENDIF
    551                    IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
    552                    m_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    553                                     tmp_3d_soil2(nzb_soil:nzt_soil,nysf        &
    554                                     -nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    555472
    556473                CASE ( 'nr' )
     
    769686                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    770687                   qswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    771                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    772 
    773                 CASE ( 'qsws_eb_av' )
    774                    IF ( .NOT. ALLOCATED( qsws_eb_av ) )  THEN
    775                       ALLOCATE( qsws_eb_av(nysg:nyng,nxlg:nxrg) )
    776                    ENDIF 
    777                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    778                    qsws_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    779                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    780 
    781                 CASE ( 'qsws_liq_eb_av' )
    782                    IF ( .NOT. ALLOCATED( qsws_liq_eb_av ) )  THEN
    783                       ALLOCATE( qsws_liq_eb_av(nysg:nyng,nxlg:nxrg) )
    784                    ENDIF 
    785                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    786                    qsws_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    787                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    788                 CASE ( 'qsws_soil_eb_av' )
    789                    IF ( .NOT. ALLOCATED( qsws_soil_eb_av ) )  THEN
    790                       ALLOCATE( qsws_soil_eb_av(nysg:nyng,nxlg:nxrg) )
    791                    ENDIF 
    792                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    793                    qsws_soil_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    794                                           tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    795 
    796                 CASE ( 'qsws_veg_eb_av' )
    797                    IF ( .NOT. ALLOCATED( qsws_veg_eb_av ) )  THEN
    798                       ALLOCATE( qsws_veg_eb_av(nysg:nyng,nxlg:nxrg) )
    799                    ENDIF 
    800                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    801                    qsws_veg_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    802688                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    803689
     
    1033919                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    1034920                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    1035                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1036 
    1037                 CASE ( 'shf_eb_av' )
    1038                    IF ( .NOT. ALLOCATED( shf_eb_av ) )  THEN
    1039                       ALLOCATE( shf_eb_av(nysg:nyng,nxlg:nxrg) )
    1040                    ENDIF
    1041                    IF ( k == 1 )  READ ( 13 )  tmp_2d
    1042                    shf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    1043921                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1044922
     
    1113991                   tswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    1114992                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    1115 
    1116                 CASE ( 't_soil' )
    1117                    IF ( k == 1 )  READ ( 13 )  tmp_3d_soil1
    1118                    t_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
    1119                                    tmp_3d_soil1(:,nysf-nbgp:nynf+nbgp,         &
    1120                                                 nxlf-nbgp:nxrf+nbgp)
    1121 
    1122                 CASE ( 't_soil_av' )
    1123                    IF ( .NOT. ALLOCATED( t_soil_av ) )  THEN
    1124                       ALLOCATE( t_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
    1125                    ENDIF
    1126                    IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
    1127                    t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
    1128                                     tmp_3d_soil2(:,nysf-nbgp:nynf+nbgp,        &
    1129                                     nxlf-nbgp:nxrf+nbgp)
    1130993
    1131994                CASE ( 'u' )
     
    14071270
    14081271!
     1272!--    Read land surface restart data
     1273       CALL lsm_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file,  &
     1274                                    nynfa, nyn_on_file, nysfa, nys_on_file,    &
     1275                                    offset_xa, offset_ya, overlap_count(i),    &
     1276                                    tmp_2d )
     1277
     1278!
    14091279!--    Read user-defined restart data
    14101280       CALL user_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file, &
     
    14181288
    14191289       DEALLOCATE( tmp_2d, tmp_3d )
    1420        IF ( ALLOCATED( tmp_3d_soil1 ) )  DEALLOCATE( tmp_3d_soil1 )
    1421        IF ( ALLOCATED( tmp_3d_soil2 ) )  DEALLOCATE( tmp_3d_soil2 )
    14221290
    14231291    ENDDO  ! loop over restart files
Note: See TracChangeset for help on using the changeset viewer.