Ignore:
Timestamp:
Mar 3, 2015 2:18:16 PM (7 years ago)
Author:
maronga
Message:

land surface model released

File:
1 edited

Legend:

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

    r1469 r1551  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Added support for binary input of land surface and radiation model data. In the
     23! course of this work, new temporary arrays tmp_3d_soil1, tmp_3d_soil2 were
     24! required.
    2325!
    2426! Former revisions:
     
    9496    USE kinds
    9597
     98    USE land_surface_model_mod,                                                &
     99        ONLY:  c_liq_av, c_soil_av, c_veg, c_veg_av, ghf_eb_av, lai_av,        &
     100               qsws_eb_av, qsws_liq_eb_av, qsws_soil_eb_av, qsws_veg_eb_av,    &
     101               land_surface, m_liq_eb, m_liq_eb_av, m_soil, m_soil_av,         &
     102               nzb_soil, nzt_soil, shf_eb_av, t_soil, t_soil_av
     103
    96104    USE particle_attributes,                                                   &
    97105        ONLY:  iran_part
    98106
    99107    USE pegrid
     108
     109    USE radiation_model_mod,                                                   &
     110        ONLY: rad_net_av, rad_sw_in_av
    100111
    101112    USE random_function_mod,                                                   &
     
    157168    REAL(wp) ::  rdummy
    158169
    159     REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d     !:
    160     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d     !:
    161     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwul  !:
    162     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwun  !:
    163     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwur  !:
    164     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwus  !:
    165     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvl  !:
    166     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvn  !:
    167     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvr  !:
    168     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvs  !:
    169     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwl  !:
    170     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwn  !:
    171     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwr  !:
    172     REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwws  !:
     170    REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  tmp_2d      !: temporary array for storing 2D data
     171    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d      !: temporary array for storing 3D data
     172    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil1!: temporary array for storing 3D soil model data
     173    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3d_soil2!: temporary array for storing 3D soil model data
     174    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwul   !:
     175    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwun   !:
     176    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwur   !:
     177    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwus   !:
     178    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvl   !:
     179    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvn   !:
     180    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvr   !:
     181    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwvs   !:
     182    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwl   !:
     183    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwn   !:
     184    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwwr   !:
     185    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   ::  tmp_3dwws   !:
    173186
    174187    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::  tmp_4d     !:
     
    317330!--    First compare the version numbers
    318331       READ ( 13 )  version_on_file
    319        binary_version = '3.4'
     332       binary_version = '4.0'
    320333       IF ( TRIM( version_on_file ) /= TRIM( binary_version ) )  THEN
    321334          WRITE( message_string, * ) 'version mismatch concerning data ',      &
     
    387400!
    388401!--    Allocate temporary arrays sized as the arrays on the restart file
    389        ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,           &
    390                         nxl_on_file-nbgp:nxr_on_file+nbgp),          &
    391                  tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp, &
     402       ALLOCATE( tmp_2d(nys_on_file-nbgp:nyn_on_file+nbgp,                     &
     403                        nxl_on_file-nbgp:nxr_on_file+nbgp),                    &
     404                 tmp_3d(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,           &
    392405                        nxl_on_file-nbgp:nxr_on_file+nbgp) )
    393406
     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
    394418!
    395419!--    Read arrays
     
    423447             SELECT CASE ( TRIM( field_chr ) )
    424448
     449                CASE ( 'c_liq_av' )
     450                   IF ( .NOT. ALLOCATED( c_liq_av ) )  THEN
     451                      ALLOCATE( c_liq_av(nysg:nyng,nxlg:nxrg) )
     452                   ENDIF
     453                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     454                   c_liq_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     455                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     456
     457                CASE ( 'c_soil_av' )
     458                   IF ( .NOT. ALLOCATED( c_soil_av ) )  THEN
     459                      ALLOCATE( c_soil_av(nysg:nyng,nxlg:nxrg) )
     460                   ENDIF
     461                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     462                   c_soil_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     463                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     464
     465                CASE ( 'c_veg_av' )
     466                   IF ( .NOT. ALLOCATED( c_veg_av ) )  THEN
     467                      ALLOCATE( c_veg_av(nysg:nyng,nxlg:nxrg) )
     468                   ENDIF
     469                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     470                   c_veg_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     471                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     472
    425473                CASE ( 'e' )
    426474                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    436484                            tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    437485
     486                CASE ( 'ghf_eb_av' )
     487                   IF ( .NOT. ALLOCATED( ghf_eb_av ) )  THEN
     488                      ALLOCATE( ghf_eb_av(nysg:nyng,nxlg:nxrg) )
     489                   ENDIF
     490                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     491                   ghf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     492                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     493
    438494                CASE ( 'iran' ) ! matching random numbers is still unresolved
    439495                                ! issue
    440496                   IF ( k == 1 )  READ ( 13 )  iran, iran_part
    441497
     498                CASE ( 'lai_av' )
     499                   IF ( .NOT. ALLOCATED( lai_av ) )  THEN
     500                      ALLOCATE( lai_av(nysg:nyng,nxlg:nxrg) )
     501                   ENDIF
     502                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     503                   lai_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     504                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     505
    442506                CASE ( 'kh' )
    443507                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     
    465529                   lwp_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    466530                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     531
     532                CASE ( 'm_liq_eb' )
     533                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     534                   m_liq_eb(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  =        &
     535                                 tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     536                CASE ( 'm_liq_eb_av' )
     537                   IF ( .NOT. ALLOCATED( m_liq_eb_av ) )  THEN
     538                      ALLOCATE( m_liq_eb_av(nysg:nyng,nxlg:nxrg) )
     539                   ENDIF
     540                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     541                   m_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
     542                                  tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     543
     544                CASE ( 'm_soil' )
     545                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
     546                   m_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
     547                          tmp_3d_soil2(nzb_soil:nzt_soil,nysf-nbgp:nynf        &
     548                          +nbgp,nxlf-nbgp:nxrf+nbgp)
     549
     550                CASE ( 'm_soil_av' )
     551                   IF ( .NOT. ALLOCATED( m_soil_av ) )  THEN
     552                      ALLOCATE( m_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
     553                   ENDIF
     554                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
     555                   m_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
     556                                    tmp_3d_soil2(nzb_soil:nzt_soil,nysf        &
     557                                    -nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    467558
    468559                CASE ( 'nr' )
     
    679770                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    680771
     772                CASE ( 'qsws_eb_av' )
     773                   IF ( .NOT. ALLOCATED( qsws_eb_av ) )  THEN
     774                      ALLOCATE( qsws_eb_av(nysg:nyng,nxlg:nxrg) )
     775                   ENDIF 
     776                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     777                   qsws_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     778                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     779
     780                CASE ( 'qsws_liq_eb_av' )
     781                   IF ( .NOT. ALLOCATED( qsws_liq_eb_av ) )  THEN
     782                      ALLOCATE( qsws_liq_eb_av(nysg:nyng,nxlg:nxrg) )
     783                   ENDIF 
     784                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     785                   qsws_liq_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     786                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     787                CASE ( 'qsws_soil_eb_av' )
     788                   IF ( .NOT. ALLOCATED( qsws_soil_eb_av ) )  THEN
     789                      ALLOCATE( qsws_soil_eb_av(nysg:nyng,nxlg:nxrg) )
     790                   ENDIF 
     791                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     792                   qsws_soil_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     793                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     794
     795                CASE ( 'qsws_veg_eb_av' )
     796                   IF ( .NOT. ALLOCATED( qsws_veg_eb_av ) )  THEN
     797                      ALLOCATE( qsws_veg_eb_av(nysg:nyng,nxlg:nxrg) )
     798                   ENDIF 
     799                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     800                   qsws_veg_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     801                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     802
    681803                CASE ( 'qv_av' )
    682804                   IF ( .NOT. ALLOCATED( qv_av ) )  THEN
     
    686808                   qv_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
    687809                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     810
     811                CASE ( 'rad_net_av' )
     812                   IF ( .NOT. ALLOCATED( rad_net_av ) )  THEN
     813                      ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) )
     814                   ENDIF 
     815                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     816                   rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     817                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     818
     819                CASE ( 'rad_sw_in_av' )
     820                   IF ( .NOT. ALLOCATED( rad_sw_in_av ) )  THEN
     821                      ALLOCATE( rad_sw_in_av(nysg:nyng,nxlg:nxrg) )
     822                   ENDIF 
     823                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     824                   rad_sw_in_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     825                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    688826
    689827                CASE ( 'random_iv' )  ! still unresolved issue
     
    759897                   IF ( k == 1 )  READ ( 13 )  tmp_2d
    760898                   shf_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     899                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     900
     901                CASE ( 'shf_eb_av' )
     902                   IF ( .NOT. ALLOCATED( shf_eb_av ) )  THEN
     903                      ALLOCATE( shf_eb_av(nysg:nyng,nxlg:nxrg) )
     904                   ENDIF
     905                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     906                   shf_eb_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    761907                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    762908
     
    808954                   tswst(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
    809955                         tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     956
     957                CASE ( 't_soil' )
     958                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil1
     959                   t_soil(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =         &
     960                                   tmp_3d_soil1(:,nysf-nbgp:nynf+nbgp,         &
     961                                                nxlf-nbgp:nxrf+nbgp)
     962
     963                CASE ( 't_soil_av' )
     964                   IF ( .NOT. ALLOCATED( t_soil_av ) )  THEN
     965                      ALLOCATE( t_soil_av(nzb_soil:nzt_soil,nysg:nyng,nxlg:nxrg) )
     966                   ENDIF
     967                   IF ( k == 1 )  READ ( 13 )  tmp_3d_soil2(:,:,:)
     968                   t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =      &
     969                                    tmp_3d_soil2(:,nysf-nbgp:nynf+nbgp,        &
     970                                    nxlf-nbgp:nxrf+nbgp)
    810971
    811972                CASE ( 'u' )
     
    10851246
    10861247       DEALLOCATE( tmp_2d, tmp_3d )
     1248       IF ( ALLOCATED( tmp_3d_soil1 ) )  DEALLOCATE( tmp_3d_soil1 )
     1249       IF ( ALLOCATED( tmp_3d_soil2 ) )  DEALLOCATE( tmp_3d_soil2 )
    10871250
    10881251    ENDDO  ! loop over restart files
Note: See TracChangeset for help on using the changeset viewer.