Changeset 2706 for palm


Ignore:
Timestamp:
Dec 18, 2017 6:33:49 PM (6 years ago)
Author:
suehring
Message:

Bugfixes in radiation and restarts in LSM

Location:
palm/trunk/SOURCE
Files:
4 edited

Legend:

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

    r2705 r2706  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfix, read surface temperature in case of restart runs.
    2323!
    2424! Former revisions:
     
    17681768                        (0.81_wp * (0.004_wp * surf%rad_sw_in(m)               &
    17691769                         + 1.0_wp)) )
     1770
    17701771!
    17711772!--    f2: correction for soil moisture availability to plants (the
     
    19151916
    19161917       ENDIF
    1917 
    19181918
    19191919       tend = 0.0_wp
     
    40524052             ENDDO
    40534053          ENDDO
    4054 
    4055 !
    4056 !--    Actions for restart runs
    4057        ELSE
    4058 !
    4059 !--       Horizontal surfaces
    4060           DO  m = 1, surf_lsm_h%ns
    4061              i   = surf_lsm_h%i(m)           
    4062              j   = surf_lsm_h%j(m)
    4063              k   = surf_lsm_h%k(m)         
    4064              t_surface_h%var_1d(m) = pt(k-1,j,i) * exn
    4065           ENDDO
    4066 !
    4067 !--       Vertical surfaces
    4068           DO  l = 0, 3
    4069 !
    4070 !--          Set index offset of surface element, seen from atmospheric grid point
    4071              j_off = surf_lsm_v(l)%joff
    4072              i_off = surf_lsm_v(l)%ioff
    4073 
    4074              DO  m = 1, surf_lsm_v(l)%ns
    4075                 i   = surf_lsm_v(l)%i(m)           
    4076                 j   = surf_lsm_v(l)%j(m)
    4077                 k   = surf_lsm_v(l)%k(m)         
    4078                 t_surface_v(l)%var_1d(m) = pt(k,j+j_off,i+i_off) * exn
    4079              ENDDO
    4080           ENDDO
    4081 
    40824054       ENDIF
    40834055!
     
    42454217       t_soil_h_p    = t_soil_h
    42464218       m_soil_h_p    = m_soil_h
    4247        m_liq_h_p  = m_liq_h
     4219       m_liq_h_p     = m_liq_h
    42484220       t_surface_h_p = t_surface_h
    42494221
    42504222       t_soil_v_p    = t_soil_v
    42514223       m_soil_v_p    = m_soil_v
    4252        m_liq_v_p  = m_liq_v
     4224       m_liq_v_p     = m_liq_v
    42534225       t_surface_v_p = t_surface_v
    42544226
     
    58245796       ENDDO
    58255797
    5826 
    58275798       WRITE ( 14 ) 'lsm_start_index_h   '
    58285799       WRITE ( 14 ) surf_lsm_h%start_index
     
    58415812          WRITE ( 14 ) m_liq_v(l)%var_1d         
    58425813       ENDDO
     5814
     5815       WRITE ( 14 ) 'lsm_start_index_h   '
     5816       WRITE ( 14 ) surf_lsm_h%start_index
     5817       WRITE ( 14 ) 'lsm_end_index_h     '
     5818       WRITE ( 14 ) surf_lsm_h%end_index
     5819       WRITE ( 14 ) 't_surface_h         '
     5820       WRITE ( 14 ) t_surface_h%var_1d
     5821       
     5822       DO  l = 0, 3
     5823          WRITE ( 14 ) 'lsm_start_index_v   '
     5824          WRITE ( 14 ) surf_lsm_v(l)%start_index
     5825          WRITE ( 14 ) 'lsm_end_index_v     '
     5826          WRITE ( 14 ) surf_lsm_v(l)%end_index
     5827          WRITE( dum, '(I1)')  l         
     5828          WRITE ( 14 ) 't_surface_v(' // dum // ')      '
     5829          WRITE ( 14 ) t_surface_v(l)%var_1d         
     5830       ENDDO
     5831
    58435832
    58445833       WRITE ( 14 )  '*** end lsm ***     '
     
    63406329
    63416330
     6331                CASE ( 't_surface_h' )
     6332                 
     6333                   IF ( k == 1 )  THEN
     6334                      IF ( .NOT.  ALLOCATED( t_surface_h%var_1d ) )            &
     6335                         ALLOCATE( t_surface_h%var_1d(1:surf_lsm_h%ns) )
     6336                      READ ( 13 )  tmp_walltype_h_1d%var_1d
     6337                   ENDIF
     6338                   CALL surface_restore_elements(                              &
     6339                                              t_surface_h%var_1d,              &
     6340                                              tmp_walltype_h_1d%var_1d,        &
     6341                                              surf_lsm_h%start_index,          &
     6342                                              start_index_on_file,             &
     6343                                              end_index_on_file,               &
     6344                                              nxlc, nysc,                      &
     6345                                              nxlf, nxrf, nysf, nynf,          &
     6346                                              nys_on_file, nyn_on_file,        &
     6347                                              nxl_on_file,nxr_on_file )
     6348
     6349                CASE ( 't_surface_v(0)' )
     6350                 
     6351                   IF ( k == 1 )  THEN
     6352                      IF ( .NOT.  ALLOCATED( t_surface_v(0)%var_1d ) )         &
     6353                         ALLOCATE( t_surface_v(0)%var_1d(1:surf_lsm_v(0)%ns) )
     6354                      READ ( 13 )  tmp_walltype_v_1d(0)%var_1d
     6355                   ENDIF
     6356                   CALL surface_restore_elements(                              &
     6357                                           t_surface_v(0)%var_1d,              &
     6358                                           tmp_walltype_v_1d(0)%var_1d,        &
     6359                                           surf_lsm_v(0)%start_index,          &
     6360                                           start_index_on_file,                &
     6361                                           end_index_on_file,                  &
     6362                                           nxlc, nysc,                         &
     6363                                           nxlf, nxrf, nysf, nynf,             &
     6364                                           nys_on_file, nyn_on_file,           &
     6365                                           nxl_on_file,nxr_on_file )
     6366
     6367                CASE ( 't_surface_v(1)' )
     6368                 
     6369                   IF ( k == 1 )  THEN
     6370                      IF ( .NOT.  ALLOCATED( t_surface_v(1)%var_1d ) )         &
     6371                         ALLOCATE( t_surface_v(1)%var_1d(1:surf_lsm_v(1)%ns) )
     6372                      READ ( 13 )  tmp_walltype_v_1d(1)%var_1d
     6373                   ENDIF
     6374                   CALL surface_restore_elements(                              &
     6375                                           t_surface_v(1)%var_1d,              &
     6376                                           tmp_walltype_v_1d(1)%var_1d,        &
     6377                                           surf_lsm_v(1)%start_index,          &
     6378                                           start_index_on_file,                &
     6379                                           end_index_on_file,                  &
     6380                                           nxlc, nysc,                         &
     6381                                           nxlf, nxrf, nysf, nynf,             &
     6382                                           nys_on_file, nyn_on_file,           &
     6383                                           nxl_on_file,nxr_on_file )
     6384
     6385                CASE ( 't_surface_v(2)' )
     6386                 
     6387                   IF ( k == 1 )  THEN
     6388                      IF ( .NOT.  ALLOCATED( t_surface_v(2)%var_1d ) )         &
     6389                         ALLOCATE( t_surface_v(2)%var_1d(1:surf_lsm_v(2)%ns) )
     6390                      READ ( 13 )  tmp_walltype_v_1d(2)%var_1d
     6391                   ENDIF
     6392                   CALL surface_restore_elements(                              &
     6393                                           t_surface_v(2)%var_1d,              &
     6394                                           tmp_walltype_v_1d(2)%var_1d,        &
     6395                                           surf_lsm_v(2)%start_index,          &
     6396                                           start_index_on_file,                &
     6397                                           end_index_on_file,                  &
     6398                                           nxlc, nysc,                         &
     6399                                           nxlf, nxrf, nysf, nynf,             &
     6400                                           nys_on_file, nyn_on_file,           &
     6401                                           nxl_on_file,nxr_on_file )
     6402
     6403                CASE ( 't_surface_v(3)' )
     6404                 
     6405                   IF ( k == 1 )  THEN
     6406                      IF ( .NOT.  ALLOCATED( t_surface_v(3)%var_1d ) )         &
     6407                         ALLOCATE( t_surface_v(3)%var_1d(1:surf_lsm_v(3)%ns) )
     6408                      READ ( 13 )  tmp_walltype_v_1d(3)%var_1d
     6409                   ENDIF
     6410                   CALL surface_restore_elements(                              &
     6411                                           t_surface_v(3)%var_1d,              &
     6412                                           tmp_walltype_v_1d(3)%var_1d,        &
     6413                                           surf_lsm_v(3)%start_index,          &
     6414                                           start_index_on_file,                &
     6415                                           end_index_on_file,                  &
     6416                                           nxlc, nysc,                         &
     6417                                           nxlf, nxrf, nysf, nynf,             &
     6418                                           nys_on_file, nyn_on_file,           &
     6419                                           nxl_on_file,nxr_on_file )
     6420
    63426421               CASE DEFAULT
    63436422                  WRITE( message_string, * ) 'unknown variable named "',       &
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r2701 r2706  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfix, in average radiation case calculate exner function before using it.
    2323!
    2424! Former revisions:
     
    23232323          IF ( cloud_physics )  ql1 = ql1_l
    23242324#endif
     2325 
     2326          exn1 = ( hyp(nzut) / 100000.0_wp )**0.286_wp
    23252327          IF ( cloud_physics )  pt1 = pt1 + l_d_cp / exn1 * ql1
    23262328!
  • palm/trunk/SOURCE/read_3d_binary.f90

    r2696 r2706  
    11381138    myid_char = myid_char_save
    11391139
    1140 
    11411140!
    11421141!-- End of time measuring for reading binary data
  • palm/trunk/SOURCE/surface_mod.f90

    r2698 r2706  
    2121! Current revisions:
    2222! ------------------
    23 !
     23! In case of restarts read and write pt_surface
    2424!
    2525! Former revisions:
     
    22352235                   IF ( ALLOCATED( surf_def_h(l)%rib ) )                       &
    22362236                      surf_h(l)%rib(mm(l))     = surf_def_h(l)%rib(m)
     2237                   IF ( ALLOCATED( surf_def_h(l)%pt_surface ) )                &
     2238                      surf_h(l)%pt_surface(mm(l)) = surf_def_h(l)%pt_surface(m)
    22372239                   IF ( ALLOCATED( surf_def_h(l)%usws ) )                      &
    22382240                      surf_h(l)%usws(mm(l))    = surf_def_h(l)%usws(m)
     
    22902292                      IF ( ALLOCATED( surf_lsm_h%rib ) )                       &
    22912293                         surf_h(0)%rib(mm(0))     = surf_lsm_h%rib(m)
     2294                      IF ( ALLOCATED( surf_lsm_h%pt_surface ) )                &
     2295                         surf_h(l)%pt_surface(mm(l)) = surf_lsm_h%pt_surface(m)
    22922296                      IF ( ALLOCATED( surf_lsm_h%usws ) )                      &
    22932297                         surf_h(0)%usws(mm(0))    = surf_lsm_h%usws(m)
     
    23452349                      IF ( ALLOCATED( surf_usm_h%rib ) )                       &
    23462350                         surf_h(0)%rib(mm(0))     = surf_usm_h%rib(m)
     2351                      IF ( ALLOCATED( surf_usm_h%pt_surface ) )                &
     2352                         surf_h(l)%pt_surface(mm(l)) = surf_usm_h%pt_surface(m)
    23472353                      IF ( ALLOCATED( surf_usm_h%usws ) )                      &
    23482354                         surf_h(0)%usws(mm(0))    = surf_usm_h%usws(m)
     
    24362442                   IF ( ALLOCATED( surf_def_v(l)%rib ) )                       &
    24372443                      surf_v(l)%rib(mm(l))     = surf_def_v(l)%rib(m)
     2444                   IF ( ALLOCATED( surf_def_v(l)%pt_surface ) )                &
     2445                      surf_v(l)%pt_surface(mm(l)) = surf_def_v(l)%pt_surface(m)
    24382446                   IF ( ALLOCATED( surf_def_v(l)%shf ) )                       &
    24392447                      surf_v(l)%shf(mm(l))     = surf_def_v(l)%shf(m)
     
    24922500                   IF ( ALLOCATED( surf_lsm_v(l)%rib ) )                       &
    24932501                      surf_v(l)%rib(mm(l))     = surf_lsm_v(l)%rib(m)
     2502                   IF ( ALLOCATED( surf_lsm_v(l)%pt_surface ) )                &
     2503                      surf_v(l)%pt_surface(mm(l)) = surf_lsm_v(l)%pt_surface(m)
    24942504                   IF ( ALLOCATED( surf_lsm_v(l)%usws ) )                      &
    24952505                      surf_v(l)%usws(mm(l))    = surf_lsm_v(l)%usws(m)
     
    25522562                   IF ( ALLOCATED( surf_usm_v(l)%rib ) )                       &
    25532563                      surf_v(l)%rib(mm(l))     = surf_usm_v(l)%rib(m)
     2564                   IF ( ALLOCATED( surf_usm_v(l)%pt_surface ) )                &
     2565                      surf_v(l)%pt_surface(mm(l)) = surf_usm_v(l)%pt_surface(m)
    25542566                   IF ( ALLOCATED( surf_usm_v(l)%usws ) )                      &
    25552567                      surf_v(l)%usws(mm(l))    = surf_usm_v(l)%usws(m)
     
    26572669             WRITE ( 14 )  surf_h(l)%rib
    26582670          ENDIF
     2671          WRITE ( 14 )  'surf_h(' // dum // ')%pt_surface          ' 
     2672          IF ( ALLOCATED ( surf_h(l)%pt_surface ) )  THEN
     2673             WRITE ( 14 )  surf_h(l)%pt_surface
     2674          ENDIF
    26592675          WRITE ( 14 )  'surf_h(' // dum // ')%usws                ' 
    26602676          IF ( ALLOCATED ( surf_h(l)%usws ) )  THEN
     
    27572773          IF ( ALLOCATED ( surf_v(l)%rib ) )  THEN
    27582774             WRITE ( 14 )  surf_v(l)%rib
     2775          ENDIF
     2776          WRITE ( 14 )  'surf_v(' // dum // ')%pt_surface          ' 
     2777          IF ( ALLOCATED ( surf_v(l)%pt_surface ) )  THEN
     2778             WRITE ( 14 )  surf_v(l)%pt_surface
    27592779          ENDIF
    27602780          WRITE ( 14 )  'surf_v(' // dum // ')%shf                 ' 
     
    29973017                      IF ( ALLOCATED( surf_h(0)%rib )  .AND.  kk == 1 )        &
    29983018                         READ ( 13 )  surf_h(0)%rib
     3019                   CASE ( 'surf_h(0)%pt_surface' )         
     3020                      IF ( ALLOCATED( surf_h(0)%pt_surface )  .AND.  kk == 1 ) &
     3021                         READ ( 13 )  surf_h(0)%pt_surface
    29993022                   CASE ( 'surf_h(0)%usws' )         
    30003023                      IF ( ALLOCATED( surf_h(0)%usws )  .AND.  kk == 1 )       &
     
    30733096                      IF ( ALLOCATED( surf_h(1)%rib )  .AND.  kk == 1 )        &
    30743097                         READ ( 13 )  surf_h(1)%rib
     3098                   CASE ( 'surf_h(1)%pt_surface' )         
     3099                      IF ( ALLOCATED( surf_h(1)%pt_surface )  .AND.  kk == 1 ) &
     3100                         READ ( 13 )  surf_h(1)%pt_surface
    30753101                   CASE ( 'surf_h(1)%usws' )         
    30763102                      IF ( ALLOCATED( surf_h(1)%usws )  .AND.  kk == 1 )       &
     
    32273253                      IF ( ALLOCATED( surf_v(0)%rib )  .AND.  kk == 1 )        &
    32283254                         READ ( 13 )  surf_v(0)%rib
     3255                   CASE ( 'surf_v(0)%pt_surface' )         
     3256                      IF ( ALLOCATED( surf_v(0)%pt_surface )  .AND.  kk == 1 ) &
     3257                         READ ( 13 )  surf_v(0)%pt_surface
    32293258                   CASE ( 'surf_v(0)%shf' )         
    32303259                      IF ( ALLOCATED( surf_v(0)%shf )  .AND.  kk == 1 )        &
     
    33063335                      IF ( ALLOCATED( surf_v(1)%rib )  .AND.  kk == 1 )        &
    33073336                         READ ( 13 )  surf_v(1)%rib
     3337                   CASE ( 'surf_v(1)%pt_surface' )         
     3338                      IF ( ALLOCATED( surf_v(1)%pt_surface )  .AND.  kk == 1 ) &
     3339                         READ ( 13 )  surf_v(1)%pt_surface
    33083340                   CASE ( 'surf_v(1)%shf' )         
    33093341                      IF ( ALLOCATED( surf_v(1)%shf )  .AND.  kk == 1 )        &
     
    33853417                      IF ( ALLOCATED( surf_v(2)%rib )  .AND.  kk == 1 )        &
    33863418                         READ ( 13 )  surf_v(2)%rib
     3419                   CASE ( 'surf_v(2)%pt_surface' )         
     3420                      IF ( ALLOCATED( surf_v(2)%pt_surface )  .AND.  kk == 1 ) &
     3421                         READ ( 13 )  surf_v(2)%pt_surface
    33873422                   CASE ( 'surf_v(2)%shf' )         
    33883423                      IF ( ALLOCATED( surf_v(2)%shf )  .AND.  kk == 1 )        &
     
    34643499                      IF ( ALLOCATED( surf_v(3)%rib )  .AND.  kk == 1 )        &
    34653500                         READ ( 13 )  surf_v(3)%rib
     3501                   CASE ( 'surf_v(3)%pt_surface' )         
     3502                      IF ( ALLOCATED( surf_v(3)%pt_surface )  .AND.  kk == 1 ) &
     3503                         READ ( 13 )  surf_v(3)%pt_surface
    34663504                   CASE ( 'surf_v(3)%shf' )         
    34673505                      IF ( ALLOCATED( surf_v(3)%shf )  .AND.  kk == 1 )        &
     
    36463684             ENDIF
    36473685
     3686             IF ( INDEX( TRIM( field_chr ), '%pt_surface' ) /= 0 )  THEN
     3687                IF ( ALLOCATED( surf_target%pt_surface )  .AND.                &
     3688                     ALLOCATED( surf_file%pt_surface   ) )                     &
     3689                   surf_target%pt_surface(m_target) = surf_file%pt_surface(m_file)
     3690             ENDIF
     3691
    36483692             IF ( INDEX( TRIM( field_chr ), '%usws' ) /= 0 )  THEN
    36493693                IF ( ALLOCATED( surf_target%usws )  .AND.                      &
Note: See TracChangeset for help on using the changeset viewer.