Ignore:
Timestamp:
Sep 9, 2020 8:27:58 PM (4 years ago)
Author:
pavelkrc
Message:

Radiative transfer model RTM version 4.1

File:
1 edited

Legend:

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

    r4591 r4671  
    2525! -----------------
    2626! $Id$
     27! Implementation of downward facing USM and LSM surfaces
     28!
     29! 4591 2020-07-06 15:56:08Z raasch
    2730! File re-formatted to follow the PALM coding standard
    2831!
     
    441444!
    442445!--                   Check whether grid point is a natural- or urban-type surface.
    443                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    444                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     446                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     447                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    445448!
    446449!--                   In order to avoid double-counting of surface properties, always assume that
     
    449452!--                   would be visible from above
    450453                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    451                          m = surf_lsm_h%end_index(j,i)
    452                          ghf_av(j,i) = ghf_av(j,i) + surf_lsm_h%ghf(m)
    453                       ELSEIF ( match_usm )  THEN
    454                          m = surf_usm_h%end_index(j,i)
    455                          ghf_av(j,i) = ghf_av(j,i) + surf_usm_h%frac(m,ind_veg_wall)  *            &
    456                                                      surf_usm_h%wghf_eb(m)        +                &
    457                                                      surf_usm_h%frac(m,ind_pav_green) *            &
    458                                                      surf_usm_h%wghf_eb_green(m)  +                &
    459                                                      surf_usm_h%frac(m,ind_wat_win)   *            &
    460                                                      surf_usm_h%wghf_eb_window(m)
     454                         m = surf_lsm_h(0)%end_index(j,i)
     455                         ghf_av(j,i) = ghf_av(j,i) + surf_lsm_h(0)%ghf(m)
     456                      ELSEIF ( match_usm )  THEN
     457                         m = surf_usm_h(0)%end_index(j,i)
     458                         ghf_av(j,i) = ghf_av(j,i) + surf_usm_h(0)%frac(m,ind_veg_wall)  *            &
     459                                                     surf_usm_h(0)%wghf_eb(m)        +                &
     460                                                     surf_usm_h(0)%frac(m,ind_pav_green) *            &
     461                                                     surf_usm_h(0)%wghf_eb_green(m)  +                &
     462                                                     surf_usm_h(0)%frac(m,ind_wat_win)   *            &
     463                                                     surf_usm_h(0)%wghf_eb_window(m)
    461464                      ENDIF
    462465                   ENDDO
     
    501504                   DO  j = nys, nyn
    502505                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    503                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    504                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     506                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     507                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    505508
    506509                      IF ( match_def )  THEN
     
    508511                         ol_av(j,i) = ol_av(j,i) + surf_def_h(0)%ol(m)
    509512                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    510                          m = surf_lsm_h%end_index(j,i)
    511                          ol_av(j,i) = ol_av(j,i) + surf_lsm_h%ol(m)
    512                       ELSEIF ( match_usm )  THEN
    513                          m = surf_usm_h%end_index(j,i)
    514                          ol_av(j,i) = ol_av(j,i) + surf_usm_h%ol(m)
     513                         m = surf_lsm_h(0)%end_index(j,i)
     514                         ol_av(j,i) = ol_av(j,i) + surf_lsm_h(0)%ol(m)
     515                      ELSEIF ( match_usm )  THEN
     516                         m = surf_usm_h(0)%end_index(j,i)
     517                         ol_av(j,i) = ol_av(j,i) + surf_usm_h(0)%ol(m)
    515518                      ENDIF
    516519                   ENDDO
     
    659662                   DO  j = nys, nyn
    660663                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    661                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    662                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     664                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     665                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    663666
    664667                      IF ( match_def )  THEN
     
    666669                         qsurf_av(j,i) = qsurf_av(j,i) + surf_def_h(0)%q_surface(m)
    667670                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    668                          m = surf_lsm_h%end_index(j,i)
    669                          qsurf_av(j,i) = qsurf_av(j,i) + surf_lsm_h%q_surface(m)
    670                       ELSEIF ( match_usm )  THEN
    671                          m = surf_usm_h%end_index(j,i)
    672                          qsurf_av(j,i) = qsurf_av(j,i) + surf_usm_h%q_surface(m)
     671                         m = surf_lsm_h(0)%end_index(j,i)
     672                         qsurf_av(j,i) = qsurf_av(j,i) + surf_lsm_h(0)%q_surface(m)
     673                      ELSEIF ( match_usm )  THEN
     674                         m = surf_usm_h(0)%end_index(j,i)
     675                         qsurf_av(j,i) = qsurf_av(j,i) + surf_usm_h(0)%q_surface(m)
    673676                      ENDIF
    674677                   ENDDO
     
    685688                   DO  j = nys, nyn
    686689                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    687                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    688                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     690                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     691                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    689692
    690693                      IF ( match_def )  THEN
     
    693696                                        waterflux_output_conversion(nzb)
    694697                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    695                          m = surf_lsm_h%end_index(j,i)
    696                          qsws_av(j,i) = qsws_av(j,i) + surf_lsm_h%qsws(m) * l_v
     698                         m = surf_lsm_h(0)%end_index(j,i)
     699                         qsws_av(j,i) = qsws_av(j,i) + surf_lsm_h(0)%qsws(m) * l_v
    697700                      ELSEIF ( match_usm  .AND.  .NOT. match_lsm )  THEN
    698                          m = surf_usm_h%end_index(j,i)
    699                          qsws_av(j,i) = qsws_av(j,i) + surf_usm_h%qsws(m) * l_v
     701                         m = surf_usm_h(0)%end_index(j,i)
     702                         qsws_av(j,i) = qsws_av(j,i) + surf_usm_h(0)%qsws(m) * l_v
    700703                      ENDIF
    701704                   ENDDO
     
    718721                DO  i = nxl, nxr
    719722                   DO  j = nys, nyn
    720                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    721                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     723                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     724                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    722725
    723726                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    724                          m = surf_lsm_h%end_index(j,i)
    725                          r_a_av(j,i) = r_a_av(j,i) + surf_lsm_h%r_a(m)
    726                       ELSEIF ( match_usm )  THEN
    727                          m = surf_usm_h%end_index(j,i)
    728                          r_a_av(j,i) = r_a_av(j,i) + surf_usm_h%frac(m,ind_veg_wall)  *            &
    729                                                      surf_usm_h%r_a(m)       +                     &
    730                                                      surf_usm_h%frac(m,ind_pav_green) *            &
    731                                                      surf_usm_h%r_a_green(m) +                     &
    732                                                      surf_usm_h%frac(m,ind_wat_win)   *            &
    733                                                      surf_usm_h%r_a_window(m)
     727                         m = surf_lsm_h(0)%end_index(j,i)
     728                         r_a_av(j,i) = r_a_av(j,i) + surf_lsm_h(0)%r_a(m)
     729                      ELSEIF ( match_usm )  THEN
     730                         m = surf_usm_h(0)%end_index(j,i)
     731                         r_a_av(j,i) = r_a_av(j,i) + surf_usm_h(0)%frac(m,ind_veg_wall)  *            &
     732                                                     surf_usm_h(0)%r_a(m)       +                     &
     733                                                     surf_usm_h(0)%frac(m,ind_pav_green) *            &
     734                                                     surf_usm_h(0)%r_a_green(m) +                     &
     735                                                     surf_usm_h(0)%frac(m,ind_wat_win)   *            &
     736                                                     surf_usm_h(0)%r_a_window(m)
    734737                      ENDIF
    735738                   ENDDO
     
    756759                   DO  j = nys, nyn
    757760                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    758                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    759                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     761                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     762                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    760763
    761764                      IF ( match_def )  THEN
     
    764767                                       heatflux_output_conversion(nzb)
    765768                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    766                          m = surf_lsm_h%end_index(j,i)
    767                          shf_av(j,i) = shf_av(j,i) + surf_lsm_h%shf(m) * c_p
    768                       ELSEIF ( match_usm )  THEN
    769                          m = surf_usm_h%end_index(j,i)
    770                          shf_av(j,i) = shf_av(j,i) + surf_usm_h%shf(m) * c_p
     769                         m = surf_lsm_h(0)%end_index(j,i)
     770                         shf_av(j,i) = shf_av(j,i) + surf_lsm_h(0)%shf(m) * c_p
     771                      ELSEIF ( match_usm )  THEN
     772                         m = surf_usm_h(0)%end_index(j,i)
     773                         shf_av(j,i) = shf_av(j,i) + surf_usm_h(0)%shf(m) * c_p
    771774                      ENDIF
    772775                   ENDDO
     
    789792                   DO  j = nys, nyn
    790793                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    791                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    792                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     794                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     795                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    793796
    794797                      IF ( match_def )  THEN
     
    796799                         ssws_av(j,i) = ssws_av(j,i) + surf_def_h(0)%ssws(m)
    797800                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    798                          m = surf_lsm_h%end_index(j,i)
    799                          ssws_av(j,i) = ssws_av(j,i) + surf_lsm_h%ssws(m)
    800                       ELSEIF ( match_usm )  THEN
    801                          m = surf_usm_h%end_index(j,i)
    802                          ssws_av(j,i) = ssws_av(j,i) + surf_usm_h%ssws(m)
     801                         m = surf_lsm_h(0)%end_index(j,i)
     802                         ssws_av(j,i) = ssws_av(j,i) + surf_lsm_h(0)%ssws(m)
     803                      ELSEIF ( match_usm )  THEN
     804                         m = surf_usm_h(0)%end_index(j,i)
     805                         ssws_av(j,i) = ssws_av(j,i) + surf_usm_h(0)%ssws(m)
    803806                      ENDIF
    804807                   ENDDO
     
    811814                   DO  j = nys, nyn
    812815                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    813                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    814                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     816                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     817                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    815818
    816819                      IF ( match_def )  THEN
     
    818821                         ts_av(j,i) = ts_av(j,i) + surf_def_h(0)%ts(m)
    819822                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    820                          m = surf_lsm_h%end_index(j,i)
    821                          ts_av(j,i) = ts_av(j,i) + surf_lsm_h%ts(m)
    822                       ELSEIF ( match_usm )  THEN
    823                          m = surf_usm_h%end_index(j,i)
    824                          ts_av(j,i) = ts_av(j,i) + surf_usm_h%ts(m)
     823                         m = surf_lsm_h(0)%end_index(j,i)
     824                         ts_av(j,i) = ts_av(j,i) + surf_lsm_h(0)%ts(m)
     825                      ELSEIF ( match_usm )  THEN
     826                         m = surf_usm_h(0)%end_index(j,i)
     827                         ts_av(j,i) = ts_av(j,i) + surf_usm_h(0)%ts(m)
    825828                      ENDIF
    826829                   ENDDO
     
    833836                   DO  j = nys, nyn
    834837                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    835                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    836                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     838                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     839                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    837840
    838841                      IF ( match_def )  THEN
     
    840843                         tsurf_av(j,i) = tsurf_av(j,i) + surf_def_h(0)%pt_surface(m)
    841844                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    842                          m = surf_lsm_h%end_index(j,i)
    843                          tsurf_av(j,i) = tsurf_av(j,i) + surf_lsm_h%pt_surface(m)
    844                       ELSEIF ( match_usm )  THEN
    845                          m = surf_usm_h%end_index(j,i)
    846                          tsurf_av(j,i) = tsurf_av(j,i) + surf_usm_h%pt_surface(m)
     845                         m = surf_lsm_h(0)%end_index(j,i)
     846                         tsurf_av(j,i) = tsurf_av(j,i) + surf_lsm_h(0)%pt_surface(m)
     847                      ELSEIF ( match_usm )  THEN
     848                         m = surf_usm_h(0)%end_index(j,i)
     849                         tsurf_av(j,i) = tsurf_av(j,i) + surf_usm_h(0)%pt_surface(m)
    847850                      ENDIF
    848851                   ENDDO
     
    866869                   DO  j = nys, nyn
    867870                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    868                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    869                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     871                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     872                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    870873
    871874                      IF ( match_def )  THEN
     
    873876                         us_av(j,i) = us_av(j,i) + surf_def_h(0)%us(m)
    874877                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    875                          m = surf_lsm_h%end_index(j,i)
    876                          us_av(j,i) = us_av(j,i) + surf_lsm_h%us(m)
    877                       ELSEIF ( match_usm )  THEN
    878                          m = surf_usm_h%end_index(j,i)
    879                          us_av(j,i) = us_av(j,i) + surf_usm_h%us(m)
     878                         m = surf_lsm_h(0)%end_index(j,i)
     879                         us_av(j,i) = us_av(j,i) + surf_lsm_h(0)%us(m)
     880                      ELSEIF ( match_usm )  THEN
     881                         m = surf_usm_h(0)%end_index(j,i)
     882                         us_av(j,i) = us_av(j,i) + surf_usm_h(0)%us(m)
    880883                      ENDIF
    881884                   ENDDO
     
    921924                   DO  j = nys, nyn
    922925                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    923                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    924                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     926                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     927                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    925928
    926929                      IF ( match_def )  THEN
     
    928931                         z0_av(j,i) = z0_av(j,i) + surf_def_h(0)%z0(m)
    929932                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    930                          m = surf_lsm_h%end_index(j,i)
    931                          z0_av(j,i) = z0_av(j,i) + surf_lsm_h%z0(m)
    932                       ELSEIF ( match_usm )  THEN
    933                          m = surf_usm_h%end_index(j,i)
    934                          z0_av(j,i) = z0_av(j,i) + surf_usm_h%z0(m)
     933                         m = surf_lsm_h(0)%end_index(j,i)
     934                         z0_av(j,i) = z0_av(j,i) + surf_lsm_h(0)%z0(m)
     935                      ELSEIF ( match_usm )  THEN
     936                         m = surf_usm_h(0)%end_index(j,i)
     937                         z0_av(j,i) = z0_av(j,i) + surf_usm_h(0)%z0(m)
    935938                      ENDIF
    936939                   ENDDO
     
    943946                   DO  j = nys, nyn
    944947                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    945                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    946                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     948                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     949                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    947950
    948951                      IF ( match_def )  THEN
     
    950953                         z0h_av(j,i) = z0h_av(j,i) + surf_def_h(0)%z0h(m)
    951954                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    952                          m = surf_lsm_h%end_index(j,i)
    953                          z0h_av(j,i) = z0h_av(j,i) + surf_lsm_h%z0h(m)
    954                       ELSEIF ( match_usm )  THEN
    955                          m = surf_usm_h%end_index(j,i)
    956                          z0h_av(j,i) = z0h_av(j,i) + surf_usm_h%z0h(m)
     955                         m = surf_lsm_h(0)%end_index(j,i)
     956                         z0h_av(j,i) = z0h_av(j,i) + surf_lsm_h(0)%z0h(m)
     957                      ELSEIF ( match_usm )  THEN
     958                         m = surf_usm_h(0)%end_index(j,i)
     959                         z0h_av(j,i) = z0h_av(j,i) + surf_usm_h(0)%z0h(m)
    957960                      ENDIF
    958961                   ENDDO
     
    965968                   DO  j = nys, nyn
    966969                      match_def = surf_def_h(0)%start_index(j,i) <= surf_def_h(0)%end_index(j,i)
    967                       match_lsm = surf_lsm_h%start_index(j,i) <= surf_lsm_h%end_index(j,i)
    968                       match_usm = surf_usm_h%start_index(j,i) <= surf_usm_h%end_index(j,i)
     970                      match_lsm = surf_lsm_h(0)%start_index(j,i) <= surf_lsm_h(0)%end_index(j,i)
     971                      match_usm = surf_usm_h(0)%start_index(j,i) <= surf_usm_h(0)%end_index(j,i)
    969972
    970973                      IF ( match_def )  THEN
     
    972975                         z0q_av(j,i) = z0q_av(j,i) + surf_def_h(0)%z0q(m)
    973976                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    974                          m = surf_lsm_h%end_index(j,i)
    975                          z0q_av(j,i) = z0q_av(j,i) + surf_lsm_h%z0q(m)
    976                       ELSEIF ( match_usm )  THEN
    977                          m = surf_usm_h%end_index(j,i)
    978                          z0q_av(j,i) = z0q_av(j,i) + surf_usm_h%z0q(m)
     977                         m = surf_lsm_h(0)%end_index(j,i)
     978                         z0q_av(j,i) = z0q_av(j,i) + surf_lsm_h(0)%z0q(m)
     979                      ELSEIF ( match_usm )  THEN
     980                         m = surf_usm_h(0)%end_index(j,i)
     981                         z0q_av(j,i) = z0q_av(j,i) + surf_usm_h(0)%z0q(m)
    979982                      ENDIF
    980983                   ENDDO
Note: See TracChangeset for help on using the changeset viewer.