Ignore:
Timestamp:
Jul 19, 2018 1:26:52 PM (6 years ago)
Author:
suehring
Message:

Further adjustments for surface structure

File:
1 edited

Legend:

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

    r3147 r3152  
    2626! -----------------
    2727! $Id$
     28! q_surface added
     29!
     30! 3147 2018-07-18 22:38:11Z maronga
    2831! Added vpt_surface and vpt1
    2932!
     
    306309       REAL(wp), DIMENSION(:,:), ALLOCATABLE   ::  rrtm_asdir      !< albedo for shortwave direct radiation, solar angle of 60°
    307310
     311       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  q_surface         !< skin-surface mixing ratio
    308312       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  pt_surface        !< skin-surface temperature
    309313       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  vpt_surface       !< skin-surface virtual temperature
     
    11611165          ALLOCATE ( surfaces%qs(1:surfaces%ns)   )
    11621166          ALLOCATE ( surfaces%qsws(1:surfaces%ns) )     
     1167          ALLOCATE ( surfaces%q_surface(1:surfaces%ns)   )
    11631168          ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) )
    11641169       ENDIF
     
    14171422          DEALLOCATE ( surfaces%qs )
    14181423          DEALLOCATE ( surfaces%qsws ) 
     1424          DEALLOCATE ( surfaces%q_surface   )
    14191425          DEALLOCATE ( surfaces%vpt_surface )
    14201426       ENDIF
     
    15411547          ALLOCATE ( surfaces%qs(1:surfaces%ns)          )
    15421548          ALLOCATE ( surfaces%qsws(1:surfaces%ns)        )   
     1549          ALLOCATE ( surfaces%q_surface(1:surfaces%ns)   )
    15431550          ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) )           
    15441551       ENDIF
     
    20932100
    20942101             surf%ts(num_h)   = 0.0_wp
    2095 
     2102!
     2103!--          Set initial value for surface temperature
     2104             surf%pt_surface(num_h) = pt_surface
     2105             
    20962106             IF ( humidity )  THEN
    20972107                surf%qs(num_h)   = 0.0_wp
     
    21162126                   
    21172127                ENDIF
     2128               
     2129                surf%q_surface(num_h)   = q_surface
     2130                surf%vpt_surface(num_h) = surf%pt_surface(num_h) *             &
     2131                                   ( 1.0_wp + 0.61_wp * surf%q_surface(num_h) )
    21182132             ENDIF
    21192133
     
    21232137                IF ( air_chemistry )  surf%css(lsp,num_h) = 0.0_wp
    21242138             ENDDO
    2125 !
    2126 !--          Set initial value for surface temperature
    2127              surf%pt_surface(num_h) = pt_surface
    21282139!
    21292140!--          Inititalize surface fluxes of sensible and latent heat, as well as
     
    26192630                   IF ( ALLOCATED( surf_def_h(l)%pt_surface ) )                &
    26202631                      surf_h(l)%pt_surface(mm(l)) = surf_def_h(l)%pt_surface(m)
     2632                   IF ( ALLOCATED( surf_def_h(l)%q_surface ) )                 &
     2633                      surf_h(l)%q_surface(mm(l)) = surf_def_h(l)%q_surface(m)
    26212634                   IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) )               &
    26222635                      surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m)                     
     
    26762689                      IF ( ALLOCATED( surf_lsm_h%pt_surface ) )                &
    26772690                         surf_h(l)%pt_surface(mm(l)) = surf_lsm_h%pt_surface(m)
     2691                      IF ( ALLOCATED( surf_def_h(l)%q_surface ) )              &
     2692                         surf_h(l)%q_surface(mm(l)) = surf_def_h(l)%q_surface(m)
    26782693                      IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) )            &
    2679                       surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m)
     2694                         surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m)
    26802695                      IF ( ALLOCATED( surf_lsm_h%usws ) )                      &
    26812696                         surf_h(0)%usws(mm(0))    = surf_lsm_h%usws(m)
     
    27332748                      IF ( ALLOCATED( surf_usm_h%pt_surface ) )                &
    27342749                         surf_h(l)%pt_surface(mm(l)) = surf_usm_h%pt_surface(m)
     2750                       IF ( ALLOCATED( surf_usm_h%q_surface ) )                &
     2751                         surf_h(l)%q_surface(mm(l)) = surf_usm_h%q_surface(m)
    27352752                      IF ( ALLOCATED( surf_usm_h%vpt_surface ) )               &
    27362753                         surf_h(l)%vpt_surface(mm(l)) = surf_usm_h%vpt_surface(m)
     
    28312848                   IF ( ALLOCATED( surf_def_v(l)%pt_surface ) )                &
    28322849                      surf_v(l)%pt_surface(mm(l)) = surf_def_v(l)%pt_surface(m)
     2850                   IF ( ALLOCATED( surf_def_v(l)%q_surface ) )                 &
     2851                      surf_v(l)%q_surface(mm(l)) = surf_def_v(l)%q_surface(m)
    28332852                   IF ( ALLOCATED( surf_def_v(l)%vpt_surface ) )               &
    28342853                      surf_v(l)%vpt_surface(mm(l)) = surf_def_v(l)%vpt_surface(m)
     
    28892908                   IF ( ALLOCATED( surf_lsm_v(l)%pt_surface ) )                &
    28902909                      surf_v(l)%pt_surface(mm(l)) = surf_lsm_v(l)%pt_surface(m)
     2910                   IF ( ALLOCATED( surf_lsm_v(l)%q_surface ) )                 &
     2911                      surf_v(l)%q_surface(mm(l)) = surf_lsm_v(l)%q_surface(m)
    28912912                   IF ( ALLOCATED( surf_lsm_v(l)%vpt_surface ) )               &
    28922913                      surf_v(l)%vpt_surface(mm(l)) = surf_lsm_v(l)%vpt_surface(m)
     
    29512972                   IF ( ALLOCATED( surf_usm_v(l)%pt_surface ) )                &
    29522973                      surf_v(l)%pt_surface(mm(l)) = surf_usm_v(l)%pt_surface(m)
     2974                   IF ( ALLOCATED( surf_usm_v(l)%q_surface ) )                 &
     2975                      surf_v(l)%q_surface(mm(l)) = surf_usm_v(l)%q_surface(m)
    29532976                   IF ( ALLOCATED( surf_usm_v(l)%vpt_surface ) )               &
    29542977                      surf_v(l)%vpt_surface(mm(l)) = surf_usm_v(l)%vpt_surface(m)
     
    30923115             WRITE ( 14 )  surf_h(l)%pt_surface
    30933116          ENDIF
     3117         
     3118          IF ( ALLOCATED ( surf_h(l)%q_surface ) )  THEN
     3119             CALL wrd_write_string( 'surf_h(' // dum // ')%q_surface' )
     3120             WRITE ( 14 )  surf_h(l)%q_surface
     3121          ENDIF
    30943122
    30953123          IF ( ALLOCATED ( surf_h(l)%vpt_surface ) )  THEN
     
    32243252             WRITE ( 14 )  surf_v(l)%pt_surface
    32253253          ENDIF
     3254         
     3255          IF ( ALLOCATED ( surf_v(l)%q_surface ) )  THEN
     3256             CALL wrd_write_string( 'surf_v(' // dum // ')%q_surface' )
     3257             WRITE ( 14 )  surf_v(l)%q_surface
     3258          ENDIF
    32263259
    32273260          IF ( ALLOCATED ( surf_v(l)%vpt_surface ) )  THEN
     
    34673500             IF ( ALLOCATED( surf_h(0)%pt_surface )  .AND.  kk == 1 )          &
    34683501                READ ( 13 )  surf_h(0)%pt_surface
     3502          CASE ( 'surf_h(0)%q_surface' )         
     3503             IF ( ALLOCATED( surf_h(0)%q_surface )  .AND.  kk == 1 )           &
     3504                READ ( 13 )  surf_h(0)%q_surface
    34693505          CASE ( 'surf_h(0)%vpt_surface' )         
    34703506             IF ( ALLOCATED( surf_h(0)%vpt_surface )  .AND.  kk == 1 )         &
     
    35473583             IF ( ALLOCATED( surf_h(1)%pt_surface )  .AND.  kk == 1 )          &
    35483584                READ ( 13 )  surf_h(1)%pt_surface
     3585          CASE ( 'surf_h(1)%q_surface' )         
     3586             IF ( ALLOCATED( surf_h(1)%q_surface )  .AND.  kk == 1 )           &
     3587                READ ( 13 )  surf_h(1)%q_surface
    35493588          CASE ( 'surf_h(1)%vpt_surface' )         
    3550              IF ( ALLOCATED( surf_h(1)%vpt_surface )  .AND.  kk == 1 )          &
     3589             IF ( ALLOCATED( surf_h(1)%vpt_surface )  .AND.  kk == 1 )         &
    35513590                READ ( 13 )  surf_h(1)%vpt_surface
    35523591          CASE ( 'surf_h(1)%usws' )         
     
    36273666             IF ( ALLOCATED( surf_h(2)%pt_surface )  .AND.  kk == 1 )          &
    36283667                READ ( 13 )  surf_h(2)%pt_surface
     3668          CASE ( 'surf_h(2)%q_surface' )         
     3669             IF ( ALLOCATED( surf_h(2)%q_surface )  .AND.  kk == 1 )           &
     3670                READ ( 13 )  surf_h(2)%q_surface
    36293671          CASE ( 'surf_h(2)%vpt_surface' )         
    3630              IF ( ALLOCATED( surf_h(2)%vpt_surface )  .AND.  kk == 1 )          &
     3672             IF ( ALLOCATED( surf_h(2)%vpt_surface )  .AND.  kk == 1 )         &
    36313673                READ ( 13 )  surf_h(2)%vpt_surface
    36323674          CASE ( 'surf_h(2)%usws' )         
     
    37093751             IF ( ALLOCATED( surf_v(0)%pt_surface )  .AND.  kk == 1 )          &
    37103752                READ ( 13 )  surf_v(0)%pt_surface
     3753          CASE ( 'surf_v(0)%q_surface' )         
     3754             IF ( ALLOCATED( surf_v(0)%q_surface )  .AND.  kk == 1 )           &
     3755                READ ( 13 )  surf_v(0)%q_surface
    37113756          CASE ( 'surf_v(0)%vpt_surface' )         
    3712              IF ( ALLOCATED( surf_v(0)%vpt_surface )  .AND.  kk == 1 )          &
     3757             IF ( ALLOCATED( surf_v(0)%vpt_surface )  .AND.  kk == 1 )         &
    37133758                READ ( 13 )  surf_v(0)%vpt_surface
    37143759          CASE ( 'surf_v(0)%shf' )         
     
    37923837             IF ( ALLOCATED( surf_v(1)%pt_surface )  .AND.  kk == 1 )          &
    37933838                READ ( 13 )  surf_v(1)%pt_surface
     3839          CASE ( 'surf_v(1)%q_surface' )         
     3840             IF ( ALLOCATED( surf_v(1)%q_surface )  .AND.  kk == 1 )           &
     3841                READ ( 13 )  surf_v(1)%q_surface
    37943842          CASE ( 'surf_v(1)%vpt_surface' )         
    37953843             IF ( ALLOCATED( surf_v(1)%vpt_surface )  .AND.  kk == 1 )         &
     
    38753923             IF ( ALLOCATED( surf_v(2)%pt_surface )  .AND.  kk == 1 )          &
    38763924                READ ( 13 )  surf_v(2)%pt_surface
     3925          CASE ( 'surf_v(2)%q_surface' )         
     3926             IF ( ALLOCATED( surf_v(2)%q_surface )  .AND.  kk == 1 )           &
     3927                READ ( 13 )  surf_v(2)%q_surface
    38773928          CASE ( 'surf_v(2)%vpt_surface' )         
    3878              IF ( ALLOCATED( surf_v(2)%vpt_surface )  .AND.  kk == 1 )          &
     3929             IF ( ALLOCATED( surf_v(2)%vpt_surface )  .AND.  kk == 1 )         &
    38793930                READ ( 13 )  surf_v(2)%vpt_surface
    38803931          CASE ( 'surf_v(2)%shf' )         
     
    39584009             IF ( ALLOCATED( surf_v(3)%pt_surface )  .AND.  kk == 1 )          &
    39594010                READ ( 13 )  surf_v(3)%pt_surface
     4011          CASE ( 'surf_v(3)%q_surface' )         
     4012             IF ( ALLOCATED( surf_v(3)%q_surface )  .AND.  kk == 1 )           &
     4013                READ ( 13 )  surf_v(3)%q_surface
    39604014          CASE ( 'surf_v(3)%vpt_surface' )         
    3961              IF ( ALLOCATED( surf_v(3)%vpt_surface )  .AND.  kk == 1 )          &
     4015             IF ( ALLOCATED( surf_v(3)%vpt_surface )  .AND.  kk == 1 )         &
    39624016                READ ( 13 )  surf_v(3)%vpt_surface
    39634017          CASE ( 'surf_v(3)%shf' )         
     
    41544208                   surf_target%pt_surface(m_target) = surf_file%pt_surface(m_file)
    41554209             ENDIF
     4210             
     4211             IF ( INDEX( restart_string(1:length), '%q_surface' ) /= 0 )  THEN
     4212                IF ( ALLOCATED( surf_target%q_surface )  .AND.                 &
     4213                     ALLOCATED( surf_file%q_surface   ) )                      &
     4214                   surf_target%q_surface(m_target) = surf_file%q_surface(m_file)
     4215             ENDIF
    41564216
    41574217             IF ( INDEX( restart_string(1:length), '%vpt_surface' ) /= 0 )  THEN
Note: See TracChangeset for help on using the changeset viewer.