Changeset 3173


Ignore:
Timestamp:
Jul 26, 2018 12:55:23 PM (6 years ago)
Author:
suehring
Message:

Further revision of 2D surface output for radiation and chemistry quantities; bugfix for commit 3170

Location:
palm/trunk/SOURCE
Files:
3 edited

Legend:

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

    r3045 r3173  
    2727! -----------------
    2828! $Id$
     29! Revise output of surface quantities in case of overhanging structures
     30!
     31! 3045 2018-05-28 07:55:41Z Giersch
    2932! error messages revised
    3033!
     
    12571260    CHARACTER (LEN=*) :: variable !<
    12581261 
     1262    LOGICAL      ::  match_def !< flag indicating natural-type surface
     1263    LOGICAL      ::  match_lsm !< flag indicating natural-type surface
     1264    LOGICAL      ::  match_usm !< flag indicating urban-type surface
    12591265
    12601266    INTEGER(iwp) ::  i                  !< grid index x direction
     
    12881294             ENDDO
    12891295          ELSEIF ( TRIM(variable(4:)) == TRIM('cssws*') )        THEN
    1290              DO  m = 1, surf_def_h(0)%ns
    1291                  i = surf_def_h(0)%i(m)
    1292                  j = surf_def_h(0)%j(m)
    1293                  chem_species(lsp)%cssws_av(j,i) = chem_species(lsp)%cssws_av(j,i) + surf_def_h(0)%cssws(lsp,m)
    1294              ENDDO
    1295              DO  m = 1, surf_lsm_h%ns
    1296                  i = surf_lsm_h%i(m)
    1297                  j = surf_lsm_h%j(m)
    1298                  chem_species(lsp)%cssws_av(j,i) = chem_species(lsp)%cssws_av(j,i) + surf_lsm_h%cssws(lsp,m)
     1296             DO  i = nxl, nxr
     1297                DO  j = nys, nyn
     1298                   match_def = surf_def_h(0)%start_index(j,i) <=               &
     1299                               surf_def_h(0)%end_index(j,i)
     1300                   match_lsm = surf_lsm_h%start_index(j,i) <=                  &
     1301                               surf_lsm_h%end_index(j,i)
     1302                   match_usm = surf_usm_h%start_index(j,i) <=                  &
     1303                               surf_usm_h%end_index(j,i)
     1304
     1305                   IF ( match_def )  THEN
     1306                      m = surf_def_h(0)%end_index(j,i)
     1307                      chem_species(lsp)%cssws_av(j,i) =                        &
     1308                                             chem_species(lsp)%cssws_av(j,i) + &
     1309                                             surf_def_h(0)%cssws(lsp,m)
     1310                   ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     1311                      m = surf_lsm_h%end_index(j,i)
     1312                      chem_species(lsp)%cssws_av(j,i) =                        &
     1313                                             chem_species(lsp)%cssws_av(j,i) + &
     1314                                             surf_lsm_h%cssws(lsp,m)
     1315                   ELSEIF ( match_usm )  THEN
     1316                      m = surf_usm_h%end_index(j,i)
     1317                      chem_species(lsp)%cssws_av(j,i) =                        &
     1318                                             chem_species(lsp)%cssws_av(j,i) + &
     1319                                             surf_usm_h%cssws(lsp,m)
     1320                   ENDIF
     1321                ENDDO
    12991322             ENDDO
    1300              DO  m = 1, surf_usm_h%ns
    1301                  i = surf_usm_h%i(m)
    1302                  j = surf_usm_h%j(m)
    1303                  chem_species(lsp)%cssws_av(j,i) = chem_species(lsp)%cssws_av(j,i) + surf_usm_h%cssws(lsp,m)
    1304              ENDDO
    1305 
    13061323          ENDIF
    13071324       ENDDO
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r3172 r3173  
    2828! -----------------
    2929! $Id$
     30! Revise output of surface radiation quantities in case of overhanging
     31! structures
     32!
     33! 3172 2018-07-26 12:06:06Z suehring
    3034! Bugfixes:
    3135!  - temporal work-around for calculation of effective radiative surface
     
    74977501    CHARACTER (LEN=*) :: variable !<
    74987502
     7503    LOGICAL      ::  match_lsm !< flag indicating natural-type surface
     7504    LOGICAL      ::  match_usm !< flag indicating urban-type surface
     7505   
    74997506    INTEGER(iwp) ::  i !<
    75007507    INTEGER(iwp) ::  j !<
     
    75977604                DO  i = nxl, nxr
    75987605                   DO  j = nys, nyn
    7599                       DO m = surf_lsm_h%start_index(j,i),                      &
    7600                              surf_lsm_h%end_index(j,i)
     7606                      match_lsm = surf_lsm_h%start_index(j,i) <=               &
     7607                                  surf_lsm_h%end_index(j,i)
     7608                      match_usm = surf_usm_h%start_index(j,i) <=               &
     7609                                  surf_usm_h%end_index(j,i)
     7610
     7611                     IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     7612                         m = surf_lsm_h%end_index(j,i)
    76017613                         rad_net_av(j,i) = rad_net_av(j,i) +                   &
    7602                                            surf_lsm_h%rad_net(m)
    7603                       ENDDO
    7604                       DO m = surf_usm_h%start_index(j,i),                      &
    7605                              surf_usm_h%end_index(j,i)
     7614                                         surf_lsm_h%rad_net(m)
     7615                      ELSEIF ( match_usm )  THEN
     7616                         m = surf_usm_h%end_index(j,i)
    76067617                         rad_net_av(j,i) = rad_net_av(j,i) +                   &
    7607                                            surf_usm_h%rad_net(m)
    7608                       ENDDO
     7618                                         surf_usm_h%rad_net(m)
     7619                      ENDIF
    76097620                   ENDDO
    76107621                ENDDO
     
    76157626                DO  i = nxl, nxr
    76167627                   DO  j = nys, nyn
    7617                       DO m = surf_lsm_h%start_index(j,i),                      &
    7618                              surf_lsm_h%end_index(j,i)
     7628                      match_lsm = surf_lsm_h%start_index(j,i) <=               &
     7629                                  surf_lsm_h%end_index(j,i)
     7630                      match_usm = surf_usm_h%start_index(j,i) <=               &
     7631                                  surf_usm_h%end_index(j,i)
     7632
     7633                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     7634                         m = surf_lsm_h%end_index(j,i)
    76197635                         rad_lw_in_xy_av(j,i) = rad_lw_in_xy_av(j,i) +         &
    7620                                                 surf_lsm_h%rad_lw_in(m)
    7621                       ENDDO
    7622                       DO m = surf_usm_h%start_index(j,i),                      &
    7623                              surf_usm_h%end_index(j,i)
     7636                                         surf_lsm_h%rad_lw_in(m)
     7637                      ELSEIF ( match_usm )  THEN
     7638                         m = surf_usm_h%end_index(j,i)
    76247639                         rad_lw_in_xy_av(j,i) = rad_lw_in_xy_av(j,i) +         &
    7625                                                 surf_usm_h%rad_lw_in(m)
    7626                       ENDDO
     7640                                         surf_usm_h%rad_lw_in(m)
     7641                      ENDIF
    76277642                   ENDDO
    76287643                ENDDO
     
    76337648                DO  i = nxl, nxr
    76347649                   DO  j = nys, nyn
    7635                       DO m = surf_lsm_h%start_index(j,i),                      &
    7636                              surf_lsm_h%end_index(j,i)
     7650                      match_lsm = surf_lsm_h%start_index(j,i) <=               &
     7651                                  surf_lsm_h%end_index(j,i)
     7652                      match_usm = surf_usm_h%start_index(j,i) <=               &
     7653                                  surf_usm_h%end_index(j,i)
     7654
     7655                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     7656                         m = surf_lsm_h%end_index(j,i)
    76377657                         rad_lw_out_xy_av(j,i) = rad_lw_out_xy_av(j,i) +       &
    7638                                                    surf_lsm_h%rad_lw_out(m)
    7639                       ENDDO
    7640                       DO m = surf_usm_h%start_index(j,i),                      &
    7641                              surf_usm_h%end_index(j,i)
     7658                                                 surf_lsm_h%rad_lw_out(m)
     7659                      ELSEIF ( match_usm )  THEN
     7660                         m = surf_usm_h%end_index(j,i)
    76427661                         rad_lw_out_xy_av(j,i) = rad_lw_out_xy_av(j,i) +       &
    7643                                                   surf_usm_h%rad_lw_out(m)
    7644                       ENDDO
     7662                                                 surf_usm_h%rad_lw_out(m)
     7663                      ENDIF
    76457664                   ENDDO
    76467665                ENDDO
     
    76517670                DO  i = nxl, nxr
    76527671                   DO  j = nys, nyn
    7653                       DO m = surf_lsm_h%start_index(j,i),                      &
    7654                              surf_lsm_h%end_index(j,i)
     7672                      match_lsm = surf_lsm_h%start_index(j,i) <=               &
     7673                                  surf_lsm_h%end_index(j,i)
     7674                      match_usm = surf_usm_h%start_index(j,i) <=               &
     7675                                  surf_usm_h%end_index(j,i)
     7676
     7677                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     7678                         m = surf_lsm_h%end_index(j,i)
    76557679                         rad_sw_in_xy_av(j,i) = rad_sw_in_xy_av(j,i) +         &
    7656                                                   surf_lsm_h%rad_sw_in(m)
    7657                       ENDDO
    7658                       DO m = surf_usm_h%start_index(j,i),                      &
    7659                              surf_usm_h%end_index(j,i)
     7680                                                surf_lsm_h%rad_sw_in(m)
     7681                      ELSEIF ( match_usm )  THEN
     7682                         m = surf_usm_h%end_index(j,i)
    76607683                         rad_sw_in_xy_av(j,i) = rad_sw_in_xy_av(j,i) +         &
    76617684                                                surf_usm_h%rad_sw_in(m)
    7662                       ENDDO
     7685                      ENDIF
    76637686                   ENDDO
    76647687                ENDDO
     
    76697692                DO  i = nxl, nxr
    76707693                   DO  j = nys, nyn
    7671                       DO m = surf_lsm_h%start_index(j,i),                      &
    7672                              surf_lsm_h%end_index(j,i)
     7694                      match_lsm = surf_lsm_h%start_index(j,i) <=               &
     7695                                  surf_lsm_h%end_index(j,i)
     7696                      match_usm = surf_usm_h%start_index(j,i) <=               &
     7697                                  surf_usm_h%end_index(j,i)
     7698
     7699                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
     7700                         m = surf_lsm_h%end_index(j,i)
    76737701                         rad_sw_out_xy_av(j,i) = rad_sw_out_xy_av(j,i) +       &
    7674                                                    surf_lsm_h%rad_sw_out(m)
    7675                       ENDDO
    7676                       DO m = surf_usm_h%start_index(j,i),                      &
    7677                              surf_usm_h%end_index(j,i)
     7702                                                 surf_lsm_h%rad_sw_out(m)
     7703                      ELSEIF ( match_usm )  THEN
     7704                         m = surf_usm_h%end_index(j,i)
    76787705                         rad_sw_out_xy_av(j,i) = rad_sw_out_xy_av(j,i) +       &
    7679                                                    surf_usm_h%rad_sw_out(m)
    7680                       ENDDO
     7706                                                 surf_usm_h%rad_sw_out(m)
     7707                      ENDIF
    76817708                   ENDDO
    76827709                ENDDO
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r3170 r3173  
    2525! -----------------
    2626! $Id$
     27! Bugfix for last commit
     28!
     29! 3170 2018-07-25 15:19:37Z suehring
    2730! Revise output of surface quantities in case of overhanging structures
    2831!
     
    595598                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    596599                         m = surf_lsm_h%end_index(j,i)
    597                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     600                         ghf_av(j,i) = ghf_av(j,i) +                           &
    598601                                         surf_lsm_h%ghf(m)
    599602                      ELSEIF ( match_usm )  THEN
    600603                         m = surf_usm_h%end_index(j,i)
    601                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     604                         ghf_av(j,i) = ghf_av(j,i) +                           &
    602605                                         surf_usm_h%frac(ind_veg_wall,m)  *    &
    603606                                         surf_usm_h%wghf_eb(m)        +        &
     
    678681                      IF ( match_def )  THEN
    679682                         m = surf_def_h(0)%end_index(j,i)
    680                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     683                         ol_av(j,i) = ol_av(j,i) +                             &
    681684                                         surf_def_h(0)%ol(m)
    682685                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    683686                         m = surf_lsm_h%end_index(j,i)
    684                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     687                         ol_av(j,i) = ol_av(j,i) +                             &
    685688                                         surf_lsm_h%ol(m)
    686689                      ELSEIF ( match_usm )  THEN
    687690                         m = surf_usm_h%end_index(j,i)
    688                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     691                         ol_av(j,i) = ol_av(j,i) +                             &
    689692                                         surf_usm_h%ol(m)
    690693                      ENDIF
     
    884887                      IF ( match_def )  THEN
    885888                         m = surf_def_h(0)%end_index(j,i)
    886                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     889                         qsws_av(j,i) = qsws_av(j,i) +                         &
    887890                                         surf_def_h(0)%qsws(m) *               &
    888891                                         waterflux_output_conversion(k)
    889892                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    890893                         m = surf_lsm_h%end_index(j,i)
    891                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     894                         qsws_av(j,i) = qsws_av(j,i) +                         &
    892895                                         surf_lsm_h%qsws(m) * l_v
    893896                      ELSEIF ( match_usm )  THEN
    894897                         m = surf_usm_h%end_index(j,i)
    895                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     898                         qsws_av(j,i) = qsws_av(j,i) +                         &
    896899                                         surf_usm_h%qsws(m) * l_v
    897900                      ENDIF
     
    922925                      IF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    923926                         m = surf_lsm_h%end_index(j,i)
    924                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     927                         r_a_av(j,i) = r_a_av(j,i) +                           &
    925928                                         surf_lsm_h%r_a(m)
    926929                      ELSEIF ( match_usm )  THEN
    927930                         m = surf_usm_h%end_index(j,i)
    928                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     931                         r_a_av(j,i) = r_a_av(j,i) +                           &
    929932                                         surf_usm_h%frac(ind_veg_wall,m)  *    &
    930933                                         surf_usm_h%r_a(m)       +             &
     
    988991                      IF ( match_def )  THEN
    989992                         m = surf_def_h(0)%end_index(j,i)
    990                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     993                         shf_av(j,i) = shf_av(j,i) +                           &
    991994                                         surf_def_h(0)%shf(m)  *               &
    992995                                         heatflux_output_conversion(k)
    993996                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    994997                         m = surf_lsm_h%end_index(j,i)
    995                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     998                         shf_av(j,i) = shf_av(j,i) +                           &
    996999                                         surf_lsm_h%shf(m) * cp
    9971000                      ELSEIF ( match_usm )  THEN
    9981001                         m = surf_usm_h%end_index(j,i)
    999                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1002                         shf_av(j,i) = shf_av(j,i) +                           &
    10001003                                         surf_usm_h%shf(m) * cp
    10011004                      ENDIF
     
    10171020                      IF ( match_def )  THEN
    10181021                         m = surf_def_h(0)%end_index(j,i)
    1019                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1022                         ssws_av(j,i) = ssws_av(j,i) +                         &
    10201023                                         surf_def_h(0)%ssws(m)
    10211024                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    10221025                         m = surf_lsm_h%end_index(j,i)
    1023                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1026                         ssws_av(j,i) = ssws_av(j,i) +                         &
    10241027                                         surf_lsm_h%ssws(m)
    10251028                      ELSEIF ( match_usm )  THEN
    10261029                         m = surf_usm_h%end_index(j,i)
    1027                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1030                         ssws_av(j,i) = ssws_av(j,i) +                         &
    10281031                                         surf_usm_h%ssws(m)
    10291032                      ENDIF
     
    10451048                      IF ( match_def )  THEN
    10461049                         m = surf_def_h(0)%end_index(j,i)
    1047                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1050                         ts_av(j,i) = ts_av(j,i) +                             &
    10481051                                         surf_def_h(0)%ts(m)
    10491052                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    10501053                         m = surf_lsm_h%end_index(j,i)
    1051                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1054                         ts_av(j,i) = ts_av(j,i) +                             &
    10521055                                         surf_lsm_h%ts(m)
    10531056                      ELSEIF ( match_usm )  THEN
    10541057                         m = surf_usm_h%end_index(j,i)
    1055                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1058                         ts_av(j,i) = ts_av(j,i) +                             &
    10561059                                         surf_usm_h%ts(m)
    10571060                      ENDIF
     
    11121115                      IF ( match_def )  THEN
    11131116                         m = surf_def_h(0)%end_index(j,i)
    1114                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1117                         us_av(j,i) = us_av(j,i) +                             &
    11151118                                         surf_def_h(0)%us(m)
    11161119                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    11171120                         m = surf_lsm_h%end_index(j,i)
    1118                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1121                         us_av(j,i) = us_av(j,i) +                             &
    11191122                                         surf_lsm_h%us(m)
    11201123                      ELSEIF ( match_usm )  THEN
    11211124                         m = surf_usm_h%end_index(j,i)
    1122                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1125                         us_av(j,i) = us_av(j,i) +                             &
    11231126                                         surf_usm_h%us(m)
    11241127                      ENDIF
     
    11731176                      IF ( match_def )  THEN
    11741177                         m = surf_def_h(0)%end_index(j,i)
    1175                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1178                         z0_av(j,i) = z0_av(j,i) +                             &
    11761179                                         surf_def_h(0)%z0(m)
    11771180                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    11781181                         m = surf_lsm_h%end_index(j,i)
    1179                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1182                         z0_av(j,i) = z0_av(j,i) +                             &
    11801183                                         surf_lsm_h%z0(m)
    11811184                      ELSEIF ( match_usm )  THEN
    11821185                         m = surf_usm_h%end_index(j,i)
    1183                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1186                         z0_av(j,i) = z0_av(j,i) +                             &
    11841187                                         surf_usm_h%z0(m)
    11851188                      ENDIF
     
    12011204                      IF ( match_def )  THEN
    12021205                         m = surf_def_h(0)%end_index(j,i)
    1203                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1206                         z0h_av(j,i) = z0h_av(j,i) +                           &
    12041207                                         surf_def_h(0)%z0h(m)
    12051208                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    12061209                         m = surf_lsm_h%end_index(j,i)
    1207                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1210                         z0h_av(j,i) = z0h_av(j,i) +                           &
    12081211                                         surf_lsm_h%z0h(m)
    12091212                      ELSEIF ( match_usm )  THEN
    12101213                         m = surf_usm_h%end_index(j,i)
    1211                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1214                         z0h_av(j,i) = z0h_av(j,i) +                           &
    12121215                                         surf_usm_h%z0h(m)
    12131216                      ENDIF
     
    12291232                      IF ( match_def )  THEN
    12301233                         m = surf_def_h(0)%end_index(j,i)
    1231                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1234                         z0q_av(j,i) = z0q_av(j,i) +                           &
    12321235                                         surf_def_h(0)%z0q(m)
    12331236                      ELSEIF ( match_lsm  .AND.  .NOT. match_usm )  THEN
    12341237                         m = surf_lsm_h%end_index(j,i)
    1235                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1238                         z0q_av(j,i) = z0q_av(j,i) +                           &
    12361239                                         surf_lsm_h%z0q(m)
    12371240                      ELSEIF ( match_usm )  THEN
    12381241                         m = surf_usm_h%end_index(j,i)
    1239                          tsurf_av(j,i) = tsurf_av(j,i) +                       &
     1242                         z0q_av(j,i) = z0q_av(j,i) +                           &
    12401243                                         surf_usm_h%z0q(m)
    12411244                      ENDIF
Note: See TracChangeset for help on using the changeset viewer.