Ignore:
Timestamp:
Sep 30, 2019 8:40:37 AM (2 years ago)
Author:
pavelkrc
Message:

Merge branch resler into trunk

Location:
palm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk

  • palm/trunk/SOURCE

  • palm/trunk/SOURCE/radiation_model_mod.f90

    r4238 r4245  
    2828! -----------------
    2929! $Id$
     30! Initialize explicit per-surface albedos from building_surface_pars
     31!
     32! 4238 2019-09-25 16:06:01Z suehring
    3033! Modify check in order to avoid equality comparisons of floating points
    3134!
     
    257260               albedo_pars_f,                                                  &
    258261               building_type_f,                                                &
     262               building_surface_pars_f,                                        &
    259263               pavement_type_f,                                                &
    260264               vegetation_type_f,                                              &
     
    356360                                   'building (dummy)                     '  & ! 33
    357361                                                         /)
     362!
     363!-- Indices of radiation-related input attributes in building_surface_pars
     364!-- (other are in urban_surface_mod)
     365    INTEGER(iwp) ::  ind_s_alb_b_wall                = 19 !< index for Broadband albedo of wall fraction
     366    INTEGER(iwp) ::  ind_s_alb_l_wall                = 20 !< index for Longwave albedo of wall fraction
     367    INTEGER(iwp) ::  ind_s_alb_s_wall                = 21 !< index for Shortwave albedo of wall fraction
     368    INTEGER(iwp) ::  ind_s_alb_b_win                 = 22 !< index for Broadband albedo of window fraction
     369    INTEGER(iwp) ::  ind_s_alb_l_win                 = 23 !< index for Longwave albedo of window fraction
     370    INTEGER(iwp) ::  ind_s_alb_s_win                 = 24 !< index for Shortwave albedo of window fraction
     371    INTEGER(iwp) ::  ind_s_alb_b_green               = 24 !< index for Broadband albedo of green fraction
     372    INTEGER(iwp) ::  ind_s_alb_l_green               = 25 !< index for Longwave albedo of green fraction
     373    INTEGER(iwp) ::  ind_s_alb_s_green               = 26 !< index for Shortwave albedo of green fraction
    358374
    359375    INTEGER(iwp) :: albedo_type  = 9999999_iwp, &     !< Albedo surface type
     
    14971513
    14981514       INTEGER(iwp) ::  i         !< running index x-direction
     1515       INTEGER(iwp) ::  is        !< running index for input surface elements
    14991516       INTEGER(iwp) ::  ioff      !< offset in x between surface element reference grid point in atmosphere and actual surface
    15001517       INTEGER(iwp) ::  j         !< running index y-direction
    15011518       INTEGER(iwp) ::  joff      !< offset in y between surface element reference grid point in atmosphere and actual surface
     1519       INTEGER(iwp) ::  k         !< running index z-direction
    15021520       INTEGER(iwp) ::  l         !< running index for orientation of vertical surfaces
    15031521       INTEGER(iwp) ::  m         !< running index for surface elements
     
    18871905          ENDIF 
    18881906!
     1907!--       Read explicit albedo values from building surface pars. If present,
     1908!--       they override all less specific albedo values and force a albedo_type
     1909!--       to zero in order to take effect.
     1910          IF ( building_surface_pars_f%from_file )  THEN
     1911             DO  m = 1, surf_usm_h%ns
     1912                i = surf_usm_h%i(m)
     1913                j = surf_usm_h%j(m)
     1914                k = surf_usm_h%k(m)
     1915!
     1916!--             Iterate over surfaces in column, check height and orientation
     1917                DO  is = building_surface_pars_f%index_ji(1,j,i), &
     1918                         building_surface_pars_f%index_ji(2,j,i)
     1919                   IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND. &
     1920                        building_surface_pars_f%coords(1,is) == k )  THEN
     1921
     1922                      IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
     1923                           building_surface_pars_f%fill )  THEN
     1924                         surf_usm_h%albedo(ind_veg_wall,m) =                         &
     1925                                  building_surface_pars_f%pars(ind_s_alb_b_wall,is)
     1926                         surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     1927                      ENDIF
     1928
     1929                      IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
     1930                           building_surface_pars_f%fill )  THEN
     1931                         surf_usm_h%albedo(ind_wat_win,m) =                          &
     1932                                  building_surface_pars_f%pars(ind_s_alb_b_win,is)
     1933                         surf_usm_h%albedo_type(ind_wat_win,m) = 0
     1934                      ENDIF
     1935
     1936                      IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
     1937                           building_surface_pars_f%fill )  THEN
     1938                         surf_usm_h%albedo(ind_pav_green,m) =                        &
     1939                                  building_surface_pars_f%pars(ind_s_alb_b_green,is)
     1940                         surf_usm_h%albedo_type(ind_pav_green,m) = 0
     1941                      ENDIF
     1942
     1943                      EXIT ! surface was found and processed
     1944                   ENDIF
     1945                ENDDO
     1946             ENDDO
     1947
     1948             DO  l = 0, 3
     1949                DO  m = 1, surf_usm_v(l)%ns
     1950                   i = surf_usm_v(l)%i(m)
     1951                   j = surf_usm_v(l)%j(m)
     1952                   k = surf_usm_v(l)%k(m)
     1953!
     1954!--                Iterate over surfaces in column, check height and orientation
     1955                   DO  is = building_surface_pars_f%index_ji(1,j,i), &
     1956                            building_surface_pars_f%index_ji(2,j,i)
     1957                      IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND. &
     1958                           building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND. &
     1959                           building_surface_pars_f%coords(1,is) == k )  THEN
     1960
     1961                         IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
     1962                              building_surface_pars_f%fill )  THEN
     1963                            surf_usm_v(l)%albedo(ind_veg_wall,m) =                      &
     1964                                     building_surface_pars_f%pars(ind_s_alb_b_wall,is)
     1965                            surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     1966                         ENDIF
     1967
     1968                         IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
     1969                              building_surface_pars_f%fill )  THEN
     1970                            surf_usm_v(l)%albedo(ind_wat_win,m) =                       &
     1971                                     building_surface_pars_f%pars(ind_s_alb_b_win,is)
     1972                            surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     1973                         ENDIF
     1974
     1975                         IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
     1976                              building_surface_pars_f%fill )  THEN
     1977                            surf_usm_v(l)%albedo(ind_pav_green,m) =                     &
     1978                                     building_surface_pars_f%pars(ind_s_alb_b_green,is)
     1979                            surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     1980                         ENDIF
     1981
     1982                         EXIT ! surface was found and processed
     1983                      ENDIF
     1984                   ENDDO
     1985                ENDDO
     1986             ENDDO
     1987          ENDIF
     1988!
    18891989!--    Initialization actions for RRTMG
    18901990       ELSEIF ( radiation_scheme == 'rrtmg' )  THEN
     
    22892389             ENDDO
    22902390
     2391          ENDIF
     2392!
     2393!--       Read explicit albedo values from building surface pars. If present,
     2394!--       they override all less specific albedo values and force a albedo_type
     2395!--       to zero in order to take effect.
     2396          IF ( building_surface_pars_f%from_file )  THEN
     2397             DO  m = 1, surf_usm_h%ns
     2398                i = surf_usm_h%i(m)
     2399                j = surf_usm_h%j(m)
     2400                k = surf_usm_h%k(m)
     2401!
     2402!--             Iterate over surfaces in column, check height and orientation
     2403                DO  is = building_surface_pars_f%index_ji(1,j,i), &
     2404                         building_surface_pars_f%index_ji(2,j,i)
     2405                   IF ( building_surface_pars_f%coords(4,is) == -surf_usm_h%koff .AND. &
     2406                        building_surface_pars_f%coords(1,is) == k )  THEN
     2407
     2408                      IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
     2409                           building_surface_pars_f%fill )  THEN
     2410                         surf_usm_h%albedo(ind_veg_wall,m) =                         &
     2411                                  building_surface_pars_f%pars(ind_s_alb_b_wall,is)
     2412                         surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2413                      ENDIF
     2414
     2415                      IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /=      &
     2416                           building_surface_pars_f%fill )  THEN
     2417                         surf_usm_h%aldir(ind_veg_wall,m) =                          &
     2418                                  building_surface_pars_f%pars(ind_s_alb_l_wall,is)
     2419                         surf_usm_h%aldif(ind_veg_wall,m) =                          &
     2420                                  building_surface_pars_f%pars(ind_s_alb_l_wall,is)
     2421                         surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2422                      ENDIF
     2423
     2424                      IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /=      &
     2425                           building_surface_pars_f%fill )  THEN
     2426                         surf_usm_h%asdir(ind_veg_wall,m) =                          &
     2427                                  building_surface_pars_f%pars(ind_s_alb_s_wall,is)
     2428                         surf_usm_h%asdif(ind_veg_wall,m) =                          &
     2429                                  building_surface_pars_f%pars(ind_s_alb_s_wall,is)
     2430                         surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2431                      ENDIF
     2432
     2433                      IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
     2434                           building_surface_pars_f%fill )  THEN
     2435                         surf_usm_h%albedo(ind_wat_win,m) =                          &
     2436                                  building_surface_pars_f%pars(ind_s_alb_b_win,is)
     2437                         surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2438                      ENDIF
     2439
     2440                      IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /=       &
     2441                           building_surface_pars_f%fill )  THEN
     2442                         surf_usm_h%aldir(ind_wat_win,m) =                           &
     2443                                  building_surface_pars_f%pars(ind_s_alb_l_win,is)
     2444                         surf_usm_h%aldif(ind_wat_win,m) =                           &
     2445                                  building_surface_pars_f%pars(ind_s_alb_l_win,is)
     2446                         surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2447                      ENDIF
     2448
     2449                      IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /=       &
     2450                           building_surface_pars_f%fill )  THEN
     2451                         surf_usm_h%asdir(ind_wat_win,m) =                           &
     2452                                  building_surface_pars_f%pars(ind_s_alb_s_win,is)
     2453                         surf_usm_h%asdif(ind_wat_win,m) =                           &
     2454                                  building_surface_pars_f%pars(ind_s_alb_s_win,is)
     2455                         surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2456                      ENDIF
     2457
     2458                      IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
     2459                           building_surface_pars_f%fill )  THEN
     2460                         surf_usm_h%albedo(ind_pav_green,m) =                        &
     2461                                  building_surface_pars_f%pars(ind_s_alb_b_green,is)
     2462                         surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2463                      ENDIF
     2464
     2465                      IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /=     &
     2466                           building_surface_pars_f%fill )  THEN
     2467                         surf_usm_h%aldir(ind_pav_green,m) =                         &
     2468                                  building_surface_pars_f%pars(ind_s_alb_l_green,is)
     2469                         surf_usm_h%aldif(ind_pav_green,m) =                         &
     2470                                  building_surface_pars_f%pars(ind_s_alb_l_green,is)
     2471                         surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2472                      ENDIF
     2473
     2474                      IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /=     &
     2475                           building_surface_pars_f%fill )  THEN
     2476                         surf_usm_h%asdir(ind_pav_green,m) =                         &
     2477                                  building_surface_pars_f%pars(ind_s_alb_s_green,is)
     2478                         surf_usm_h%asdif(ind_pav_green,m) =                         &
     2479                                  building_surface_pars_f%pars(ind_s_alb_s_green,is)
     2480                         surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2481                      ENDIF
     2482
     2483                      EXIT ! surface was found and processed
     2484                   ENDIF
     2485                ENDDO
     2486             ENDDO
     2487
     2488             DO  l = 0, 3
     2489                DO  m = 1, surf_usm_v(l)%ns
     2490                   i = surf_usm_v(l)%i(m)
     2491                   j = surf_usm_v(l)%j(m)
     2492                   k = surf_usm_v(l)%k(m)
     2493!
     2494!--                Iterate over surfaces in column, check height and orientation
     2495                   DO  is = building_surface_pars_f%index_ji(1,j,i), &
     2496                            building_surface_pars_f%index_ji(2,j,i)
     2497                      IF ( building_surface_pars_f%coords(5,is) == -surf_usm_v(l)%joff .AND. &
     2498                           building_surface_pars_f%coords(6,is) == -surf_usm_v(l)%ioff .AND. &
     2499                           building_surface_pars_f%coords(1,is) == k )  THEN
     2500
     2501                         IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
     2502                              building_surface_pars_f%fill )  THEN
     2503                            surf_usm_v(l)%albedo(ind_veg_wall,m) =                      &
     2504                                     building_surface_pars_f%pars(ind_s_alb_b_wall,is)
     2505                            surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2506                         ENDIF
     2507
     2508                         IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /=      &
     2509                              building_surface_pars_f%fill )  THEN
     2510                            surf_usm_v(l)%aldir(ind_veg_wall,m) =                       &
     2511                                     building_surface_pars_f%pars(ind_s_alb_l_wall,is)
     2512                            surf_usm_v(l)%aldif(ind_veg_wall,m) =                       &
     2513                                     building_surface_pars_f%pars(ind_s_alb_l_wall,is)
     2514                            surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2515                         ENDIF
     2516
     2517                         IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /=      &
     2518                              building_surface_pars_f%fill )  THEN
     2519                            surf_usm_v(l)%asdir(ind_veg_wall,m) =                       &
     2520                                     building_surface_pars_f%pars(ind_s_alb_s_wall,is)
     2521                            surf_usm_v(l)%asdif(ind_veg_wall,m) =                       &
     2522                                     building_surface_pars_f%pars(ind_s_alb_s_wall,is)
     2523                            surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2524                         ENDIF
     2525
     2526                         IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
     2527                              building_surface_pars_f%fill )  THEN
     2528                            surf_usm_v(l)%albedo(ind_wat_win,m) =                       &
     2529                                     building_surface_pars_f%pars(ind_s_alb_b_win,is)
     2530                            surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2531                         ENDIF
     2532
     2533                         IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /=       &
     2534                              building_surface_pars_f%fill )  THEN
     2535                            surf_usm_v(l)%aldir(ind_wat_win,m) =                        &
     2536                                     building_surface_pars_f%pars(ind_s_alb_l_win,is)
     2537                            surf_usm_v(l)%aldif(ind_wat_win,m) =                        &
     2538                                     building_surface_pars_f%pars(ind_s_alb_l_win,is)
     2539                            surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2540                         ENDIF
     2541
     2542                         IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /=       &
     2543                              building_surface_pars_f%fill )  THEN
     2544                            surf_usm_v(l)%asdir(ind_wat_win,m) =                        &
     2545                                     building_surface_pars_f%pars(ind_s_alb_s_win,is)
     2546                            surf_usm_v(l)%asdif(ind_wat_win,m) =                        &
     2547                                     building_surface_pars_f%pars(ind_s_alb_s_win,is)
     2548                            surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2549                         ENDIF
     2550
     2551                         IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
     2552                              building_surface_pars_f%fill )  THEN
     2553                            surf_usm_v(l)%albedo(ind_pav_green,m) =                     &
     2554                                     building_surface_pars_f%pars(ind_s_alb_b_green,is)
     2555                            surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2556                         ENDIF
     2557
     2558                         IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /=     &
     2559                              building_surface_pars_f%fill )  THEN
     2560                            surf_usm_v(l)%aldir(ind_pav_green,m) =                      &
     2561                                     building_surface_pars_f%pars(ind_s_alb_l_green,is)
     2562                            surf_usm_v(l)%aldif(ind_pav_green,m) =                      &
     2563                                     building_surface_pars_f%pars(ind_s_alb_l_green,is)
     2564                            surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2565                         ENDIF
     2566
     2567                         IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /=     &
     2568                              building_surface_pars_f%fill )  THEN
     2569                            surf_usm_v(l)%asdir(ind_pav_green,m) =                      &
     2570                                     building_surface_pars_f%pars(ind_s_alb_s_green,is)
     2571                            surf_usm_v(l)%asdif(ind_pav_green,m) =                      &
     2572                                     building_surface_pars_f%pars(ind_s_alb_s_green,is)
     2573                            surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2574                         ENDIF
     2575
     2576                         EXIT ! surface was found and processed
     2577                      ENDIF
     2578                   ENDDO
     2579                ENDDO
     2580             ENDDO
    22912581          ENDIF
    22922582
Note: See TracChangeset for help on using the changeset viewer.