Ignore:
Timestamp:
Jul 18, 2018 10:36:19 PM (3 years ago)
Author:
maronga
Message:

major bugfix in calculation of Obukhov length and subsequent handling of surface information

File:
1 edited

Legend:

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

    r3055 r3146  
    2121! Current revisions:
    2222! ------------------
    23 !
     23! Added vpt_surface and vpt1
    2424!
    2525! Former revisions:
     
    251251       REAL(wp), DIMENSION(:), ALLOCATABLE ::  z0q       !< roughness length for humidity
    252252
    253        REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt1       !< Potential temperature at first grid level
     253       REAL(wp), DIMENSION(:), ALLOCATABLE ::  pt1       !< potential temperature at first grid level
    254254       REAL(wp), DIMENSION(:), ALLOCATABLE ::  qv1       !< mixing ratio at first grid level
     255       REAL(wp), DIMENSION(:), ALLOCATABLE ::  vpt1      !< virtual potential temperature at first grid level
     256       
    255257       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  css     !< scaling parameter chemical species
    256258!
     
    302304
    303305       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  pt_surface        !< skin-surface temperature
     306       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  vpt_surface       !< skin-surface virtual temperature
    304307       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  rad_net           !< net radiation
    305308       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  rad_net_l         !< net radiation, used in USM
     
    10471050       DEALLOCATE ( surfaces%pt1 )
    10481051       DEALLOCATE ( surfaces%qv1 )
     1052       DEALLOCATE ( surfaces%vpt1 )
     1053       
    10491054!
    10501055!--       
     
    11491154       ALLOCATE ( surfaces%pt_surface(1:surfaces%ns) )
    11501155!
    1151 !--    Characteristic humidity and surface flux of latent heat
     1156!--    Characteristic humidity, surface flux of latent heat, and surface virtual potential temperature
    11521157       IF ( humidity )  THEN
    11531158          ALLOCATE ( surfaces%qs(1:surfaces%ns)   )
    11541159          ALLOCATE ( surfaces%qsws(1:surfaces%ns) )     
     1160          ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) )
    11551161       ENDIF
    11561162!
     
    11711177       ALLOCATE ( surfaces%pt1(1:surfaces%ns) )
    11721178       ALLOCATE ( surfaces%qv1(1:surfaces%ns) )
     1179       ALLOCATE ( surfaces%vpt1(1:surfaces%ns) )
    11731180!
    11741181!--       
     
    14061413       IF ( humidity )  THEN
    14071414          DEALLOCATE ( surfaces%qs )
    1408           DEALLOCATE ( surfaces%qsws )     
     1415          DEALLOCATE ( surfaces%qsws ) 
     1416          DEALLOCATE ( surfaces%vpt_surface )
    14091417       ENDIF
    14101418!
     
    14251433       DEALLOCATE ( surfaces%pt1 )
    14261434       DEALLOCATE ( surfaces%qv1 )
     1435       DEALLOCATE ( surfaces%vpt1 )
    14271436
    14281437       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     
    15271536!--    Characteristic humidity and surface flux of latent heat
    15281537       IF ( humidity )  THEN
    1529           ALLOCATE ( surfaces%qs(1:surfaces%ns)   )
    1530           ALLOCATE ( surfaces%qsws(1:surfaces%ns) )     
     1538          ALLOCATE ( surfaces%qs(1:surfaces%ns)          )
     1539          ALLOCATE ( surfaces%qsws(1:surfaces%ns)        )   
     1540          ALLOCATE ( surfaces%vpt_surface(1:surfaces%ns) )           
    15311541       ENDIF
    15321542!
     
    15471557       ALLOCATE ( surfaces%pt1(1:surfaces%ns) )
    15481558       ALLOCATE ( surfaces%qv1(1:surfaces%ns) )
     1559       ALLOCATE ( surfaces%vpt1(1:surfaces%ns) )
    15491560
    15501561       IF ( cloud_physics .AND. microphysics_seifert)  THEN
     
    20972108                   surf%nrsws(num_h) = 0.0_wp
    20982109
    2099                    surf%pt1(num_h) = 0.0_wp
    2100                    surf%qv1(num_h) = 0.0_wp
    2101 
     2110                   surf%pt1(num_h)  = 0.0_wp
     2111                   surf%qv1(num_h)  = 0.0_wp
     2112                   surf%vpt1(num_h) = 0.0_wp
     2113                   
    21022114                ENDIF
    21032115             ENDIF
     
    26042616                   IF ( ALLOCATED( surf_def_h(l)%pt_surface ) )                &
    26052617                      surf_h(l)%pt_surface(mm(l)) = surf_def_h(l)%pt_surface(m)
     2618                   IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) )               &
     2619                      surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m)                     
    26062620                   IF ( ALLOCATED( surf_def_h(l)%usws ) )                      &
    26072621                      surf_h(l)%usws(mm(l))    = surf_def_h(l)%usws(m)
     
    26592673                      IF ( ALLOCATED( surf_lsm_h%pt_surface ) )                &
    26602674                         surf_h(l)%pt_surface(mm(l)) = surf_lsm_h%pt_surface(m)
     2675                      IF ( ALLOCATED( surf_def_h(l)%vpt_surface ) )            &
     2676                      surf_h(l)%vpt_surface(mm(l)) = surf_def_h(l)%vpt_surface(m)
    26612677                      IF ( ALLOCATED( surf_lsm_h%usws ) )                      &
    26622678                         surf_h(0)%usws(mm(0))    = surf_lsm_h%usws(m)
     
    27142730                      IF ( ALLOCATED( surf_usm_h%pt_surface ) )                &
    27152731                         surf_h(l)%pt_surface(mm(l)) = surf_usm_h%pt_surface(m)
     2732                      IF ( ALLOCATED( surf_usm_h%vpt_surface ) )               &
     2733                         surf_h(l)%vpt_surface(mm(l)) = surf_usm_h%vpt_surface(m)
    27162734                      IF ( ALLOCATED( surf_usm_h%usws ) )                      &
    27172735                         surf_h(0)%usws(mm(0))    = surf_usm_h%usws(m)
     
    28102828                   IF ( ALLOCATED( surf_def_v(l)%pt_surface ) )                &
    28112829                      surf_v(l)%pt_surface(mm(l)) = surf_def_v(l)%pt_surface(m)
     2830                   IF ( ALLOCATED( surf_def_v(l)%vpt_surface ) )               &
     2831                      surf_v(l)%vpt_surface(mm(l)) = surf_def_v(l)%vpt_surface(m)
    28122832                   IF ( ALLOCATED( surf_def_v(l)%shf ) )                       &
    28132833                      surf_v(l)%shf(mm(l))     = surf_def_v(l)%shf(m)
     
    28662886                   IF ( ALLOCATED( surf_lsm_v(l)%pt_surface ) )                &
    28672887                      surf_v(l)%pt_surface(mm(l)) = surf_lsm_v(l)%pt_surface(m)
     2888                   IF ( ALLOCATED( surf_lsm_v(l)%vpt_surface ) )               &
     2889                      surf_v(l)%vpt_surface(mm(l)) = surf_lsm_v(l)%vpt_surface(m)
    28682890                   IF ( ALLOCATED( surf_lsm_v(l)%usws ) )                      &
    28692891                      surf_v(l)%usws(mm(l))    = surf_lsm_v(l)%usws(m)
     
    29262948                   IF ( ALLOCATED( surf_usm_v(l)%pt_surface ) )                &
    29272949                      surf_v(l)%pt_surface(mm(l)) = surf_usm_v(l)%pt_surface(m)
     2950                   IF ( ALLOCATED( surf_usm_v(l)%vpt_surface ) )               &
     2951                      surf_v(l)%vpt_surface(mm(l)) = surf_usm_v(l)%vpt_surface(m)
    29282952                   IF ( ALLOCATED( surf_usm_v(l)%usws ) )                      &
    29292953                      surf_v(l)%usws(mm(l))    = surf_usm_v(l)%usws(m)
     
    30663090          ENDIF
    30673091
     3092          IF ( ALLOCATED ( surf_h(l)%vpt_surface ) )  THEN
     3093             CALL wrd_write_string( 'surf_h(' // dum // ')%vpt_surface' )
     3094             WRITE ( 14 )  surf_h(l)%vpt_surface
     3095          ENDIF
     3096
    30683097          IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
    30693098             CALL wrd_write_string( 'surf_h(' // dum // ')%usws' )
     
    31913220             CALL wrd_write_string( 'surf_v(' // dum // ')%pt_surface' )
    31923221             WRITE ( 14 )  surf_v(l)%pt_surface
     3222          ENDIF
     3223
     3224          IF ( ALLOCATED ( surf_v(l)%vpt_surface ) )  THEN
     3225             CALL wrd_write_string( 'surf_v(' // dum // ')%vpt_surface' )
     3226             WRITE ( 14 )  surf_v(l)%vpt_surface
    31933227          ENDIF
    31943228
     
    34303464             IF ( ALLOCATED( surf_h(0)%pt_surface )  .AND.  kk == 1 )          &
    34313465                READ ( 13 )  surf_h(0)%pt_surface
     3466          CASE ( 'surf_h(0)%vpt_surface' )         
     3467             IF ( ALLOCATED( surf_h(0)%vpt_surface )  .AND.  kk == 1 )         &
     3468                READ ( 13 )  surf_h(0)%vpt_surface
    34323469          CASE ( 'surf_h(0)%usws' )         
    34333470             IF ( ALLOCATED( surf_h(0)%usws )  .AND.  kk == 1 )                &
     
    35073544             IF ( ALLOCATED( surf_h(1)%pt_surface )  .AND.  kk == 1 )          &
    35083545                READ ( 13 )  surf_h(1)%pt_surface
     3546          CASE ( 'surf_h(1)%vpt_surface' )         
     3547             IF ( ALLOCATED( surf_h(1)%vpt_surface )  .AND.  kk == 1 )          &
     3548                READ ( 13 )  surf_h(1)%vpt_surface
    35093549          CASE ( 'surf_h(1)%usws' )         
    35103550             IF ( ALLOCATED( surf_h(1)%usws )  .AND.  kk == 1 )                &
     
    35843624             IF ( ALLOCATED( surf_h(2)%pt_surface )  .AND.  kk == 1 )          &
    35853625                READ ( 13 )  surf_h(2)%pt_surface
     3626          CASE ( 'surf_h(2)%vpt_surface' )         
     3627             IF ( ALLOCATED( surf_h(2)%vpt_surface )  .AND.  kk == 1 )          &
     3628                READ ( 13 )  surf_h(2)%vpt_surface
    35863629          CASE ( 'surf_h(2)%usws' )         
    35873630             IF ( ALLOCATED( surf_h(2)%usws )  .AND.  kk == 1 )                &
     
    36633706             IF ( ALLOCATED( surf_v(0)%pt_surface )  .AND.  kk == 1 )          &
    36643707                READ ( 13 )  surf_v(0)%pt_surface
     3708          CASE ( 'surf_v(0)%vpt_surface' )         
     3709             IF ( ALLOCATED( surf_v(0)%vpt_surface )  .AND.  kk == 1 )          &
     3710                READ ( 13 )  surf_v(0)%vpt_surface
    36653711          CASE ( 'surf_v(0)%shf' )         
    36663712             IF ( ALLOCATED( surf_v(0)%shf )  .AND.  kk == 1 )                 &
     
    37433789             IF ( ALLOCATED( surf_v(1)%pt_surface )  .AND.  kk == 1 )          &
    37443790                READ ( 13 )  surf_v(1)%pt_surface
     3791          CASE ( 'surf_v(1)%vpt_surface' )         
     3792             IF ( ALLOCATED( surf_v(1)%vpt_surface )  .AND.  kk == 1 )         &
     3793                READ ( 13 )  surf_v(1)%vpt_surface
    37453794          CASE ( 'surf_v(1)%shf' )         
    37463795             IF ( ALLOCATED( surf_v(1)%shf )  .AND.  kk == 1 )                 &
     
    38233872             IF ( ALLOCATED( surf_v(2)%pt_surface )  .AND.  kk == 1 )          &
    38243873                READ ( 13 )  surf_v(2)%pt_surface
     3874          CASE ( 'surf_v(2)%vpt_surface' )         
     3875             IF ( ALLOCATED( surf_v(2)%vpt_surface )  .AND.  kk == 1 )          &
     3876                READ ( 13 )  surf_v(2)%vpt_surface
    38253877          CASE ( 'surf_v(2)%shf' )         
    38263878             IF ( ALLOCATED( surf_v(2)%shf )  .AND.  kk == 1 )                 &
     
    39033955             IF ( ALLOCATED( surf_v(3)%pt_surface )  .AND.  kk == 1 )          &
    39043956                READ ( 13 )  surf_v(3)%pt_surface
     3957          CASE ( 'surf_v(3)%vpt_surface' )         
     3958             IF ( ALLOCATED( surf_v(3)%vpt_surface )  .AND.  kk == 1 )          &
     3959                READ ( 13 )  surf_v(3)%vpt_surface
    39053960          CASE ( 'surf_v(3)%shf' )         
    39063961             IF ( ALLOCATED( surf_v(3)%shf )  .AND.  kk == 1 )                 &
     
    40974152             ENDIF
    40984153
     4154             IF ( INDEX( restart_string(1:length), '%vpt_surface' ) /= 0 )  THEN
     4155                IF ( ALLOCATED( surf_target%vpt_surface )  .AND.               &
     4156                     ALLOCATED( surf_file%vpt_surface   ) )                    &
     4157                   surf_target%vpt_surface(m_target) = surf_file%vpt_surface(m_file)
     4158             ENDIF
     4159             
    40994160             IF ( INDEX( restart_string(1:length), '%usws' ) /= 0 )  THEN
    41004161                IF ( ALLOCATED( surf_target%usws )  .AND.                      &
Note: See TracChangeset for help on using the changeset viewer.