Changeset 3152 for palm/trunk


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

Further adjustments for surface structure

Location:
palm/trunk/SOURCE
Files:
4 edited

Legend:

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

    r3147 r3152  
    2525! -----------------
    2626! $Id$
     27! Further adjustments for q_surface
     28!
     29! 3147 2018-07-18 22:38:11Z maronga
    2730! Adjustments for new surface structure
    2831!
     
    23212324                                          q(k,j,i)
    23222325          ENDIF
     2326         
     2327          surf%q_surface(m) = q(k+k_off,j+j_off,i+i_off)
    23232328!
    23242329!--       Update virtual potential temperature
    2325           surf%vpt_surface(m) = surf%pt_surface(m) *         &
    2326                      ( 1.0_wp + 0.61_wp * q(k+k_off,j+j_off,i+i_off) )
     2330          surf%vpt_surface(m) = surf%pt_surface(m) *                           &
     2331                                  ( 1.0_wp + 0.61_wp * surf%q_surface(m) )
    23272332
    23282333       
  • palm/trunk/SOURCE/surface_layer_fluxes_mod.f90

    r3149 r3152  
    2626! -----------------
    2727! $Id$
     28! q_surface is now part of surface structure
     29!
     30! 3149 2018-07-19 05:48:09Z maronga
    2831! Correct accidental last commit
    2932!
     
    338341                CALL calc_pt_surface
    339342                IF ( humidity )  THEN
     343                   CALL calc_q_surface
    340344                   CALL calc_vpt_surface
    341345                ENDIF
     
    15951599
    15961600!
    1597 !-- Calculate potential temperature at first grid level
     1601!-- Set potential temperature at surface grid level.
    15981602!-- ( only for upward-facing surfs )
    15991603    SUBROUTINE calc_pt_surface
     
    16191623
    16201624!
    1621 !-- Calculate virtual potential temperature at first grid level
     1625!-- Set mixing ratio at surface grid level. ( Only for upward-facing surfs. )
     1626    SUBROUTINE calc_q_surface
     1627
     1628       IMPLICIT NONE
     1629
     1630       INTEGER(iwp) ::  k_off   !< index offset between surface and atmosphere grid point (-1 for upward-, +1 for downward-facing walls)
     1631       INTEGER(iwp) ::  m       !< loop variable over all horizontal surf elements
     1632       
     1633       k_off = surf%koff
     1634       !$OMP PARALLEL DO PRIVATE( i, j, k )
     1635       DO  m = 1, surf%ns
     1636
     1637          i   = surf%i(m)           
     1638          j   = surf%j(m)
     1639          k   = surf%k(m)
     1640
     1641          surf%q_surface(m) = q(k+k_off,j,i)
     1642
     1643       ENDDO
     1644
     1645    END SUBROUTINE calc_q_surface
     1646   
     1647!
     1648!-- Set virtual potential temperature at surface grid level.
    16221649!-- ( only for upward-facing surfs )
    16231650    SUBROUTINE calc_vpt_surface
     
    17811808                   z_mo = surf%z_mo(m)
    17821809
    1783                    surf%qs(m) = kappa * ( surf%qv1(m) - q(k-1,j,i) )           &
     1810                   surf%qs(m) = kappa * ( surf%qv1(m) - surf%q_surface(m) )    &
    17841811                                        / ( LOG( z_mo / surf%z0q(m) )          &
    17851812                                            - psi_h( z_mo / surf%ol(m) )       &
  • 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
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r3151 r3152  
    2828! -----------------
    2929! $Id$
     30! Initialize q_surface, which might be used in surface_layer_fluxes
     31!
     32! 3151 2018-07-19 08:45:38Z raasch
    3033! remaining preprocessor define strings __check removed
    3134!
     
    313316   
    314317    USE control_parameters,                                                    &
    315         ONLY:  coupling_start_time, topography, dt_3d,                         &
     318        ONLY:  coupling_start_time, topography, dt_3d, humidity,               &
    316319               intermediate_timestep_count, initializing_actions,              &
    317320               intermediate_timestep_count_max, simulated_time, end_time,      &
     
    47064709            ENDDO
    47074710#endif
     4711!
     4712!--         For the sake of correct initialization, set also q_surface.
     4713!--         Note, at urban surfaces q_surface is initialized with 0.
     4714            IF ( humidity )  THEN
     4715               DO  m = 1, surf_usm_h%ns
     4716                  surf_usm_h%q_surface(m) = 0.0_wp
     4717               ENDDO
     4718               DO  l = 0, 3
     4719                  DO  m = 1, surf_usm_v(l)%ns
     4720                     surf_usm_v(l)%q_surface(m) = 0.0_wp
     4721                  ENDDO
     4722               ENDDO
     4723            ENDIF
    47084724     
    47094725!--         initial values for t_wall
Note: See TracChangeset for help on using the changeset viewer.